#pragma once #include "../pch/pch.h" #include "CClientSession.h" #include using boost::asio::ip::tcp; class CClientMessage { public: std::string m_username; std::string m_due_time; std::string m_data; }; class CServer { public: CServer(); ~CServer(); void Init(); void BindUsername(std::string username, CClientSession* session); void DeleteClient(std::string username); void InitSqlLite(); bool AddMessageToDB(std::string username, std::string due_time, std::string data); void CheckOfflineMessage(std::string username); void HandleOfflineMessage(); private: void start_aliyun_mns(); void start_accept(); void handle_accept(CClientSession* new_session, const boost::system::error_code& error); //开启线程,监听接口层的消息 void ReceiveMNSMessage(); //开启线程,专门负责把消息发给客户端 void SendMessageToClient(); boost::asio::io_context io_context_; tcp::acceptor* acceptor_; //给客户端发送消息的队列 std::queue m_message_queue; std::mutex m_queue_mutex; std::map m_clients_map; std::mutex m_map_mutex; //处理离线消息的队列 std::queue m_offlineMsg; std::mutex m_offlineMsg_mutex; int m_port; int m_nClientCount = 0; int m_rc; sqlite3* m_db = NULL; };