#ifndef XSOCKETSERVER_H
#define XSOCKETSERVER_H
#include <QTcpSocket>
#include <QTcpServer>
class XSocketServer : public QObject
{
Q_OBJECT
public:
XSocketServer();
~XSocketServer();
bool StartListening(quint16 port);
quint16 GetListeningPort();
void StopListening();
bool IsServerListening();
QTcpServer *GetTcpServer();
signals:
void signalOnNewConnection(QTcpSocket *pSocket);
protected:
virtual void OnNewConnection(QTcpSocket *pSocket){Q_UNUSED(pSocket);}
private slots:
void OnNewConnection();
private:
QTcpServer *m_pServerSocket = nullptr;
};
#endif // XSOCKETSERVER_H
#include "xsocketserver.h"
XSocketServer::XSocketServer()
{
}
XSocketServer::~XSocketServer()
{
if(nullptr != m_pServerSocket)
{
m_pServerSocket->deleteLater();
}
}
bool XSocketServer::StartListening(quint16 port)
{
if(nullptr == m_pServerSocket)
{
m_pServerSocket = new QTcpServer(this);
connect(m_pServerSocket, SIGNAL(newConnection()), SLOT(OnNewConnection()));
}
return m_pServerSocket->listen(QHostAddress::Any, port);
}
quint16 XSocketServer::GetListeningPort()
{
int listenPort = 0;
if(m_pServerSocket->isListening())
{
listenPort = m_pServerSocket->serverPort();
}
return listenPort;
}
void XSocketServer::StopListening()
{
if(nullptr != m_pServerSocket)
{
m_pServerSocket->close();
}
}
bool XSocketServer::IsServerListening()
{
bool bre = false;
if(nullptr != m_pServerSocket)
{
bre = m_pServerSocket->isListening();
}
return bre;
}
QTcpServer *XSocketServer::GetTcpServer()
{
return m_pServerSocket;
}
void XSocketServer::OnNewConnection()
{
QTcpSocket *p = m_pServerSocket->nextPendingConnection();
if(nullptr != p)
{
signalOnNewConnection(p);
OnNewConnection(p);
}
}