📄 tcpsocketsender.cpp
字号:
/*
* ============================================================================
* Name : CTcpSocketSender from TcpSocketSender.cpp
* Part of : TcpSocket
* Created : 06.03.2006 by ToBeReplacedByAuthor
* Implementation notes:
*
* Version :
* Copyright: ToBeReplacedByCopyright
* ============================================================================
*/
// INCLUDE FILES
#include "TcpSocketSender.h"
// CONSTANTS
const TInt KTimeout = 10;
// ================= MEMBER FUNCTIONS =======================
CTcpSocketSender* CTcpSocketSender::NewL(MObserver& aObserver, RSocket& aSocket)
{
CTcpSocketSender* self = new(ELeave) CTcpSocketSender(aObserver, aSocket);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop();
return self;
}
// destructor
CTcpSocketSender::~CTcpSocketSender()
{
delete iTimer;
Cancel();
}
void CTcpSocketSender::Send(const TDesC& aMsg)
{
Cancel();
TInt size = aMsg.Size();
TPckg<TInt> pkg(size);
const TUint8* ptr = reinterpret_cast<const TUint8*>(aMsg.Ptr());
iBuffer.Copy(pkg);
iBuffer.Append(ptr, size);
iSocket.Write(iBuffer, iStatus);
SetActive();
// Start a timeout timer
iTimer->Start(KTimeout);
}
// Functions from CActive
void CTcpSocketSender::DoCancel()
{
iSocket.CancelWrite();
}
void CTcpSocketSender::RunL()
{
iTimer->Cancel();
const TUint16* ptr = reinterpret_cast<const TUint16*>(iBuffer.Ptr()+4);
TPtrC msg(ptr, (iBuffer.Length()-4)/2);
iObserver.OnSendL(msg, iStatus.Int());
}
// Functions from CTcpSocketTimer::MTimerObserver
void CTcpSocketSender::OnTimerL(TInt aError)
{
const TUint16* ptr = reinterpret_cast<const TUint16*>(iBuffer.Ptr());
TPtrC msg(ptr, iBuffer.Length()/2);
TInt err = (aError==KErrNone)?KErrTimedOut:aError;
iObserver.OnSendL(msg, err);
}
// constructor
CTcpSocketSender::CTcpSocketSender(MObserver& aObserver, RSocket& aSocket)
: CActive(CActive::EPriorityStandard), iObserver(aObserver), iSocket(aSocket)
{
CActiveScheduler::Add(this);
}
void CTcpSocketSender::ConstructL()
{
iTimer = CTcpSocketTimer::NewL(*this);
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -