5 r9 w: z# U1 F! ?QT使用HPSocket,QTHPSocketDemo
. N1 d, R. p8 k' t6 J9 s7 X) D; D5 Q
[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;
}
4 C" t* U& x7 `& x- u1 r9 q
; h$ H0 h8 F3 G0 E/ Q! n% ? K2 m
0 K( {# Q; Q" y! k! D0 \4 ?
0 R0 k, r6 V" @$ E+ V' q' _& s C; N& Y2 F2 h5 _
, g4 ?; |: f v# l
|