⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpsocketengine.cpp

📁 《基于Symbian OS的手机开发与应用实践》这本书的配套源码。
💻 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 + -