tcpcocketreceiver.cpp
来自「《基于Symbian OS的手机开发与应用实践》这本书的配套源码。」· C++ 代码 · 共 76 行
CPP
76 行
/*
* ============================================================================
* Name : CTcpCocketReceiver from TcpCocketReceiver.cpp
* Part of : TcpCocket
* Created : 06.03.2006 by ToBeReplacedByAuthor
* Implementation notes:
*
* Version :
* Copyright: ToBeReplacedByCopyright
* ============================================================================
*/
// INCLUDE FILES
#include "TcpCocketReceiver.h"
// ================= MEMBER FUNCTIONS =======================
// constructor
CTcpCocketReceiver::CTcpCocketReceiver(MObserver& aObserver, RSocket& aSocket)
: CActive(CActive::EPriorityStandard), iObserver(aObserver), iSocket(aSocket),
iBuf(const_cast<TUint8*>(iBuffer.Ptr()), 4)
{
CActiveScheduler::Add(this);
}
// destructor
CTcpCocketReceiver::~CTcpCocketReceiver()
{
Cancel();
}
void CTcpCocketReceiver::Receive()
{
Cancel();
// Receive the length of the message
iBuf.Set(const_cast<TUint8*>(iBuffer.Ptr()), 0, 4);
iSocket.Read(iBuf, iStatus);
SetActive();
}
void CTcpCocketReceiver::DoCancel()
{
iSocket.CancelRead();
}
void CTcpCocketReceiver::RunL()
{
TInt err = iStatus.Int();
if(err==KErrNone)
{
if(iBuf.Size()==4)
{
TInt size = 0;
TPckg<TInt> pkg(size);
pkg.Copy(iBuf);
// Receive the message
iBuf.Set(const_cast<TUint8*>(iBuffer.Ptr()), 0, size);
iSocket.Read(iBuf, iStatus);
SetActive();
}
else
{
// Notify observer
const TUint16* ptr = reinterpret_cast<const TUint16*>(iBuf.Ptr());
TPtrC msg(ptr, iBuf.Length()/2);
iObserver.OnReceiveL(msg, err);
}
}
else
{
iObserver.OnReceiveL(KNullDesC(), err);
}
}
// End of File
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?