GrabBag/VrNets/tcpServer/Inc/VrTcpServer.h

48 lines
1.4 KiB
C
Raw Normal View History

#ifndef VRTCPSERVER_H
#define VRTCPSERVER_H
#include "IVrTcpServer.h"
#include <QTcpServer>
#include <QTcpSocket>
#include <QMap>
#include <QTimer>
class VrTcpServer : public IVrTcpServer
{
Q_OBJECT
public:
explicit VrTcpServer(QObject *parent = nullptr);
~VrTcpServer() override;
// 接口实现
bool startServer(quint16 port) override;
void stopServer() override;
bool isListening() const override;
quint16 serverPort() const override;
// 客户端管理
QStringList getClientIds() const;
bool disconnectClient(const QString &clientId);
qint64 sendDataToClient(const QString &clientId, const QByteArray &data);
qint64 sendDataToClient(const QString &clientId, const char *data, qint64 size);
qint64 broadcastData(const QByteArray &data);
qint64 broadcastData(const char *data, qint64 size);
QHostAddress getClientAddress(const QString &clientId) const;
quint16 getClientPort(const QString &clientId) const;
private slots:
void onNewConnection();
void onClientDisconnected();
void onClientReadyRead();
void onClientBytesWritten(qint64 bytes);
void onServerError(QAbstractSocket::SocketError error);
private:
QTcpServer *m_server;
QMap<QString, QTcpSocket*> m_clients;
quint16 m_port;
QString generateClientId(QTcpSocket *socket);
};
#endif // VRTCPSERVER_H