📄 udpsocketengine.cpp
字号:
/*
* ============================================================================
* Name : CUdpSocketEngine from UdpSocketEngine.cpp
* Part of : UdpSocket
* Created : 31.01.2006 by ToBeReplacedByAuthor
* Implementation notes:
*
* Version :
* Copyright: ToBeReplacedByCopyright
* ============================================================================
*/
// INCLUDE FILES
#include "UdpSocketEngine.h"
// ================= MEMBER FUNCTIONS =======================
// Two-phased constructor.
CUdpSocketEngine* CUdpSocketEngine::NewL(MUdpObserver& aObserver)
{
CUdpSocketEngine* self = new (ELeave) CUdpSocketEngine( aObserver );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop();
return self;
}
// destructor
CUdpSocketEngine::~CUdpSocketEngine()
{
delete iSender;
delete iReceiver;
iSocket.Close();
iSocketServ.Close();
}
// New functions
void CUdpSocketEngine::SetRemoteL(const TDesC& aAddr, TUint aPort)
{
if(!iAddr.IsUnspecified())
{
User::Leave(KErrGeneral);
}
// Set up address information
User::LeaveIfError(iAddr.Input(aAddr));
iAddr.SetPort(aPort);
ReceiveL();
}
TBool CUdpSocketEngine::RemoteSpecified()
{
return !iAddr.IsUnspecified();
}
void CUdpSocketEngine::SendL(const TDesC& aMsg)
{
if(iAddr.IsUnspecified()||iSender->IsActive())
{
User::Leave(KErrGeneral);
}
iSender->SendTo(iAddr, aMsg);
}
void CUdpSocketEngine::ReceiveL()
{
if(iAddr.IsUnspecified()||iReceiver->IsActive())
{
User::Leave(KErrGeneral);
}
iReceiver->Receive(iAddr);
}
// Functions from CUdpSocketSender::MObserver
void CUdpSocketEngine::OnSendL(const TDesC& aMsg, TInt aError)
{
iObserver.OnSendL(aMsg, aError);
}
// Functions from CUdpSocketReceiver::MObserver
void CUdpSocketEngine::OnReceiveL(const TDesC& aData, TInt aError)
{
iObserver.OnReceiveL(aData, aError);
ReceiveL();
}
// constructor
CUdpSocketEngine::CUdpSocketEngine(MUdpObserver& aObserver)
: iObserver(aObserver)
{
}
// EPOC default constructor can leave.
void CUdpSocketEngine::ConstructL()
{
// Open a session to Socket Server
User::LeaveIfError(iSocketServ.Connect());
// Open a UDP socket
User::LeaveIfError(iSocket.Open(iSocketServ, KAfInet, KSockDatagram, KProtocolInetUdp));
// Bind to local address
TInetAddr addr(INET_ADDR(127,0,0,1), 8001);
User::LeaveIfError(iSocket.Bind(addr));
iSender = new(ELeave) CUdpSocketSender(*this, iSocket);
iReceiver = new(ELeave) CUdpSocketReceiver(*this, iSocket);
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -