📄 tcpcocketsender.cpp
字号:
/*
* ============================================================================
* Name : CTcpCocketSender from TcpCocketSender.cpp
* Part of : TcpCocket
* Created : 06.03.2006 by ToBeReplacedByAuthor
* Implementation notes:
*
* Version :
* Copyright: ToBeReplacedByCopyright
* ============================================================================
*/
// INCLUDE FILES
#include "TcpCocketSender.h"
// CONSTANTS
const TInt KTimeout = 10;
// ================= MEMBER FUNCTIONS =======================
CTcpCocketSender* CTcpCocketSender::NewL(MObserver& aObserver, RSocket& aSocket)
{
CTcpCocketSender* self = new(ELeave) CTcpCocketSender(aObserver, aSocket);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop();
return self;
}
// destructor
CTcpCocketSender::~CTcpCocketSender()
{
delete iTimer;
Cancel();
}
void CTcpCocketSender::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 CTcpCocketSender::DoCancel()
{
iSocket.CancelWrite();
}
void CTcpCocketSender::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 CTcpCocketTimer::MTimerObserver
void CTcpCocketSender::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
CTcpCocketSender::CTcpCocketSender(MObserver& aObserver, RSocket& aSocket)
: CActive(CActive::EPriorityStandard), iObserver(aObserver), iSocket(aSocket)
{
CActiveScheduler::Add(this);
}
void CTcpCocketSender::ConstructL()
{
iTimer = CTcpCocketTimer::NewL(*this);
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -