7 g! x* I2 n. t6 o! I! {8 r
QT使用HPSocket,QTHPSocketDemo
P' N, y$ ~" j, e$ | b; e( Q0 Q. X2 d# Q' R& |
[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;
}
, J* ~8 O2 V5 o) J! T- E: f
- h1 }; C+ B% S) R
9 K4 b) K' z+ d8 y8 e5 Y; z4 t5 k6 J5 k% ?* i1 c
0 F( ?7 B) M( {; Q' u* l4 s
# f) K S7 V/ @; q8 Q% w |