📄 socketsreader.cpp
字号:
/* Copyright (c) 2001, Nokia Mobile Phones. All rights reserved */
#include "Sockets.pan"
#include "SocketsReader.h"
#include "EngineNotifier.h"
CSocketsReader* CSocketsReader::NewL(MEngineNotifier& aEngineNotifier, RSocket& aSocket)
{
CSocketsReader* self = CSocketsReader::NewLC(aEngineNotifier, aSocket);
CleanupStack::Pop(self);
return self;
}
CSocketsReader* CSocketsReader::NewLC(MEngineNotifier& aEngineNotifier, RSocket& aSocket)
{
CSocketsReader* self = new (ELeave) CSocketsReader(aEngineNotifier, aSocket);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CSocketsReader::CSocketsReader(MEngineNotifier& aEngineNotifier, RSocket& aSocket)
: CActive(EPriorityStandard),
iSocket(aSocket),
iEngineNotifier(aEngineNotifier)
{
}
CSocketsReader::~CSocketsReader()
{
Cancel();
}
void CSocketsReader::ConstructL()
{
CActiveScheduler::Add(this);
}
void CSocketsReader::DoCancel()
{
// Cancel asychronous read request
iSocket.CancelRead();
}
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;
}
}
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();
}
void CSocketsReader::Start()
{
// Initiate a new read from socket into iBuffer
if (!IsActive())
{
IssueRead();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -