?? socketsreader.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 + -