CServer.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include "../pch/pch.h"
  3. #include "CClientSession.h"
  4. #include <sqlite3/sqlite3.h>
  5. using boost::asio::ip::tcp;
  6. class CClientMessage
  7. {
  8. public:
  9. std::string m_username;
  10. std::string m_due_time;
  11. std::string m_data;
  12. };
  13. class CServer
  14. {
  15. public:
  16. CServer();
  17. ~CServer();
  18. void Init();
  19. void BindUsername(std::string username, CClientSession* session);
  20. void DeleteClient(std::string username);
  21. void InitSqlLite();
  22. bool AddMessageToDB(std::string username, std::string due_time, std::string data);
  23. void CheckOfflineMessage(std::string username);
  24. void HandleOfflineMessage();
  25. private:
  26. void start_accept();
  27. void handle_accept(CClientSession* new_session,
  28. const boost::system::error_code& error);
  29. //开启线程,监听接口层的消息
  30. void ReceiveMNSMessage();
  31. //开启线程,专门负责把消息发给客户端
  32. void SendMessageToClient();
  33. boost::asio::io_context io_context_;
  34. tcp::acceptor* acceptor_;
  35. //给客户端发送消息的队列
  36. std::queue<CClientMessage> m_message_queue;
  37. std::mutex m_queue_mutex;
  38. std::map<std::string, CClientSession*> m_clients_map;
  39. std::mutex m_map_mutex;
  40. //处理离线消息的队列
  41. std::queue<std::string> m_offlineMsg;
  42. std::mutex m_offlineMsg_mutex;
  43. int m_port;
  44. int m_nClientCount = 0;
  45. int m_rc;
  46. sqlite3* m_db = NULL;
  47. };