#ifndef IMSERVICE_H #define IMSERVICE_H #include #include #include /*********************************** * * Class IMService * IM服务端类 * * 用于与客户端交互的封装类 * * 公开方法有: * login 登录 * sendPrivateMessage 发送私聊消息 * sendGroupMessage 发送群聊消息 * * 发出的信号有: * receivedPrivateMessage 接收到私聊消息信号 * receivedGroupMessage 接收到群聊消息信号 * userOnline 用户上线信号 * userOffline 用户下线信号 * serverClose 服务器关闭信号 * **********************************/ class IMService : public QObject { Q_OBJECT // 公开成员函数 public: explicit IMService(QObject *parent = nullptr); ~IMService(); /** * @brief closeService 关闭服务 断开所有Socket连接 */ void closeService(); // 信号 signals: // 槽 public slots: /** * @brief newConnection 当有新连接进入时 */ void newConnection(); /** * @brief disconnected 当连接断开时触发 */ void disconnected(); /** * @brief readyRead 当接收到数据时触发 */ void readyRead(); // 私有成员函数 private: // 发送数据到socket对象中 /** * @brief sendData 发送数据到socket对象中 * @param socket 指定socket对象 * @param data 要发送的数据 */ void sendData(QTcpSocket *socket, QString data); /** * @brief userLogin 用户登录 * @param name 用户昵称 * @param socket socket对象 */ void userLogin(QString name, QTcpSocket *socket); /** * @brief sendPrivateMessage 发送私聊消息 * @param fromName 发送者昵称 * @param toName 接收者昵称 * @param content 内容 */ void sendPrivateMessage(QString fromName, QString toName, QString content); /** * @brief sendGroupMessage 发送群聊消息 * @param fromName 发送者昵称 * @param content 内容 */ void sendGroupMessage(QString fromName, QString content); /** * @brief userOnline 用户上线 * @param name 用户昵称 */ void userOnline(QString name); /** * @brief userOffline 用户离线 * @param name 用户昵称 */ void userOffline(QString name); // 私有成员变量 private: /** * @brief m_server 服务端的Tcp Server对象 */ QTcpServer *m_server; // 客户端的Tcp Socket连接列表 // QMap是一个键值对容器,在这里key是用户的昵称,value是用户的Socket连接对象 // 每当一个新用户上线,将会添加到该容器中 // 当用户下线时则从容器中删除 /** * @brief m_clientSocket 客户端的Tcp Socket连接列表 */ QMap *m_clientSocket; /** * @brief m_clientNames 客户端的昵称列表 */ QMap *m_clientNames; }; #endif // IMSERVICE_H