⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketsreader.cpp

📁 Symbian 手机网络通信程序 sockets-vc
💻 CPP
字号:
/* Copyright (c) 2004, Nokia. All rights reserved */


// INCLUDE FILES
#include "Sockets.pan"
#include "SocketsReader.h"
#include "EngineNotifier.h"


// ========================= MEMBER FUNCTIONS ==================================

// -----------------------------------------------------------------------------
// CSocketsReader::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSocketsReader* CSocketsReader::NewL( MEngineNotifier& aEngineNotifier,
                                      RSocket& aSocket )
    {
    CSocketsReader* self = CSocketsReader::NewLC( aEngineNotifier,
                                                  aSocket );
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CSocketsReader::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSocketsReader* CSocketsReader::NewLC( MEngineNotifier& aEngineNotifier,
                                       RSocket& aSocket )
    {
    CSocketsReader* self = new ( ELeave ) CSocketsReader( aEngineNotifier,
                                                          aSocket );
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

// -----------------------------------------------------------------------------
// CSocketsReader::CSocketsReader()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CSocketsReader::CSocketsReader( MEngineNotifier& aEngineNotifier,
                                RSocket& aSocket )
: CActive( EPriorityStandard ),
  iSocket( aSocket ),
  iEngineNotifier( aEngineNotifier )
    {
    // No implementation required
    }

// -----------------------------------------------------------------------------
// CSocketsReader::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSocketsReader::ConstructL()
    {
    CActiveScheduler::Add( this );
    }

// -----------------------------------------------------------------------------
// CSocketsReader::~CSocketsReader()
// Destructor.
// -----------------------------------------------------------------------------
//
CSocketsReader::~CSocketsReader()
    {
    Cancel();
    }

// -----------------------------------------------------------------------------
// CSocketsReader::DoCancel()
// Cancels any outstanding operation.
// -----------------------------------------------------------------------------
//
void CSocketsReader::DoCancel()
    {
    // Cancel asychronous read request
    iSocket.CancelRead();
    }

// -----------------------------------------------------------------------------
// CSocketsReader::RunL()
// Called when operation completes.
// -----------------------------------------------------------------------------
//
void CSocketsReader::RunL()
    {
    // Active object request complete handler
    switch ( iStatus.Int() )
        {
        case KErrNone:
            // Character has been read from socket
            iEngineNotifier.ResponseReceived( iBuffer );
            IssueRead(); // Immediately start another read
            break;
        case KErrDisconnected:
            iEngineNotifier.ReportError( MEngineNotifier::EDisconnected,
                                         iStatus.Int() );
            break;
        default:
            iEngineNotifier.ReportError( MEngineNotifier::EGeneralReadError,
                                         iStatus.Int() );
            break;
        }
    }

// -----------------------------------------------------------------------------
// CSocketsReader::IssueRead()
// Initiates a read from socket.
// -----------------------------------------------------------------------------
//
void CSocketsReader::IssueRead()
    {
    // Initiate a new read from socket into iBuffer
    __ASSERT_ALWAYS( !IsActive(), User::Panic( KPanicSocketsEngineRead,
                                               ESocketsBadState ) );
    iSocket.RecvOneOrMore( iBuffer, 0, iStatus, iDummyLength );
    SetActive();
    }

// -----------------------------------------------------------------------------
// CSocketsReader::Start()
// Initiates a read from socket.
// -----------------------------------------------------------------------------
//
void CSocketsReader::Start()
    {
    // Initiate a new read from socket into iBuffer
    if ( !IsActive() )
        {
        IssueRead();
        }
    }

// End of File

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -