| ( y* r4 o* c: `8 t- GQT使用HPSocket,QTHPSocketDemo
 9 m! U9 @/ e7 B$ a0 z
 8 R% r6 U- N7 T6 P% K1 v
 [C#] 纯文本查看 复制代码 #include "ServerListener.h"
#include <QDebug>
#include <QString>
#include <QByteArray>
ServerListener* ServerListener::mServerListener=nullptr;
std::mutex ServerListener::mMutex;
ServerListener::ServerListener()
    :mServerView(nullptr),
     mServer(this)
{
}
ServerListener *ServerListener::getInstance()
{
    ServerListener* tmp = mServerListener;
    if (tmp == nullptr)
    {
        std::lock_guard<std::mutex> lock(mMutex);
        tmp = mServerListener;
        if (tmp == nullptr)
        {
            tmp = new ServerListener();
            mServerListener = tmp;
        }
    }
    return mServerListener;
}
void ServerListener::registerServerView(IServerView *serverView)
{
    mServerView=serverView;
}
void ServerListener::unRegisterServerView(IServerView *serverView)
{
    if(mServerView==serverView)
        mServerView=nullptr;
}
EnHandleResult ServerListener::OnPrepareListen(ITcpServer *pSender, SOCKET soListen)
{
    TCHAR szAddress[50];
    int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
    USHORT usPort;
    pSender->GetListenAddress(szAddress,iAddressLen,usPort);
    QString serverAddr=QString::fromWCharArray(szAddress);
    if(mServerView!=nullptr)
    {
        mServerView->onPrepareListen(serverAddr,usPort);
    }
    return EnHandleResult::HR_OK;
}
EnHandleResult ServerListener::OnAccept(ITcpServer *pSender, CONNID dwConnID, SOCKET soClient)
{
    TCHAR szAddress[50];
    int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
    USHORT usPort;
    pSender->GetLocalAddress(dwConnID,szAddress,iAddressLen,usPort);
    QString localAddr=QString::fromWCharArray(szAddress);
    TCHAR remoteAddress[50];
    int remoteAddressLen =sizeof(remoteAddress) / sizeof(TCHAR);
    USHORT remotePort;
    pSender->GetRemoteAddress(dwConnID,remoteAddress,remoteAddressLen,remotePort);
    QString remoteAddr=QString::fromWCharArray(remoteAddress);
    if(mServerView!=nullptr)
    {
        mServerView->onAccept(localAddr,usPort,remoteAddr,remotePort,dwConnID);
    }
    return EnHandleResult::HR_OK;
}
EnHandleResult ServerListener::OnSend(ITcpServer *pSender, CONNID dwConnID, const BYTE *pData, int iLength)
{
    return EnHandleResult::HR_OK;
}
EnHandleResult ServerListener::OnReceive(ITcpServer *pSender, CONNID dwConnID, const BYTE *pData, int iLength)
{
    TCHAR szAddress[50];
    int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
    USHORT usPort;
    pSender->GetLocalAddress(dwConnID,szAddress,iAddressLen,usPort);
    QString localAddr=QString::fromWCharArray(szAddress);
    QByteArray data =QByteArray((const char*)pData,iLength);
    if(mServerView!=nullptr)
    {
        mServerView->onReceive(localAddr,usPort,data,iLength,dwConnID);
    }
    return EnHandleResult::HR_OK;
}
EnHandleResult ServerListener::OnClose(ITcpServer *pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
{
    if(mServerView!=nullptr)
    {
        mServerView->onClose();
    }
    return EnHandleResult::HR_OK;
}
EnHandleResult ServerListener::OnShutdown(ITcpServer *pSender)
{
    if(mServerView!=nullptr)
    {
        mServerView->onShutdown();
    }
    return EnHandleResult::HR_OK;
}
8 j/ }* u& Z7 w
 4 D; i; l! o# z. r8 Q3 v3 E# E$ r9 J& W
 5 r" N3 l  B& q$ \/ H
 
 3 A% q% D) d, H* K- f6 T' |- }  I/ V, j* K- l) a" s: r6 ]2 M# @
 
 |