CServer.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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_aliyun_mns();
  27. void start_accept();
  28. void handle_accept(CClientSession* new_session,
  29. const boost::system::error_code& error);
  30. //开启线程,监听接口层的消息
  31. void ReceiveMNSMessage();
  32. //开启线程,专门负责把消息发给客户端
  33. void SendMessageToClient();
  34. boost::asio::io_context io_context_;
  35. tcp::acceptor* acceptor_;
  36. //给客户端发送消息的队列
  37. std::queue<CClientMessage> m_message_queue;
  38. std::mutex m_queue_mutex;
  39. std::map<std::string, CClientSession*> m_clients_map;
  40. std::mutex m_map_mutex;
  41. //处理离线消息的队列
  42. std::queue<std::string> m_offlineMsg;
  43. std::mutex m_offlineMsg_mutex;
  44. int m_port;
  45. int m_nClientCount = 0;
  46. int m_rc;
  47. sqlite3* m_db = NULL;
  48. };