#ifndef TP_RAW_TCPSERVER_H #define TP_RAW_TCPSERVER_H #include #include #include #include #include "lpRawTcpClientSession.h" typedef struct tagTP_RAW_CLIENT_SESS { QThread *pThrd_; lpRawClientSession *pSess_; }TP_RAW_CLIENT_SESS; typedef QMap RawClientsSessionMap; typedef enum emServerStatus { TCPSERVER_ON_RUNNING = 0, TCPSERVER_ON_SHUTDOWN, TCPSERVER_ON_CLIENT_CONNECTED, TCPSERVER_ON_CLIENT_DISCONNECTED, }ServerStatus; class lptkRawTcpServer : public QTcpServer { Q_OBJECT public: lptkRawTcpServer(QObject *parent = NULL); ~lptkRawTcpServer(); bool server_begin(const QString &strIP, quint16 nPort); void server_end(); void broadcast_send_data(QSharedPointer data_ptr); void send_data(int sess_id, QSharedPointer data_ptr); void setRecvCallFunc(RecvDataFunc func) { _func = func; }; signals: void client_status_changed(int, ServerStatus); void data_received(int, QSharedPointer); void data_to_send(int, QSharedPointer); void client_connect_status(QString strID, ServerStatus); void sgConnect(QVariantMap); public slots: void on_sess_disconnected(int); void on_data_received(int, QSharedPointer); protected: void incomingConnection(qintptr socketDescriptor); private: RawClientsSessionMap client_sessions_; RecvDataFunc _func; QString _address; int _port; }; #ifndef LPQSHAREDPOINTERQBYTEARRAY #define LPQSHAREDPOINTERQBYTEARRAY Q_DECLARE_METATYPE(QSharedPointer) #endif #ifndef LPTKSERVERSTATUS #define LPTKSERVERSTATUS Q_DECLARE_METATYPE(ServerStatus) #endif #endif // TP_RAW_TCPSERVER_H