. n2 f @% ]" p0 @. V
QT使用HPSocket,QTHPSocketDemo
# K. J/ u N- P7 P! j" n u/ P1 o& _5 U# X. y6 x1 f/ s) c( H( q# J/ G
[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;
}
2 `: }- Q9 J' g4 J
5 \6 I- @" r2 [5 ]+ J+ J& ~" o1 n) N+ P/ M: V- |
: |6 x- P6 q, C: E8 r' s. G
e( a; g8 K# s+ T: v9 t( L. U1 N: U. A8 j& l. Q7 k1 l
|