tcp_server.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #pragma once
  2. #include <functional>
  3. #include "net/define.h"
  4. #include "base/error.h"
  5. #ifdef USE_NET_TCP_SERVER
  6. class ITcpServer;
  7. namespace ylib
  8. {
  9. namespace network
  10. {
  11. namespace tcp
  12. {
  13. class server_lst;
  14. /****************************************************************
  15. * Class: TCP服务器
  16. * Desc:使用HPSocket开源库。
  17. ****************************************************************/
  18. class server :public ylib::error_base
  19. {
  20. public:
  21. server();
  22. ~server();
  23. // 通过 IServer 继承
  24. bool start(const ylib::AddressPort& bind_ap, ylib::receive_model model = ylib::PUSH_DEFAULT);
  25. void close();
  26. bool send(uint64 connid, const char* data, uint32 len);
  27. bool send(uint64 connid, const ylib::buffer& data);
  28. bool started();
  29. bool disConnect(uint64 connid);
  30. bool isConnect(uint64 connid);
  31. template<typename T>
  32. T* extra(uint64 connid)
  33. {
  34. return (T*)extra_ptr(connid);
  35. }
  36. void* extra_ptr(uint64 connid);
  37. bool extra_ptr(uint64 connid, void* extra);
  38. inline ITcpServer* getHP() { return m_server; }
  39. /****************************************************************
  40. * Fun:[事件]连接
  41. ****************************************************************/
  42. void on_accept(std::function<void(ylib::network::tcp::server* server, uint64 connid)> callback) { m_callback_accept = callback; }
  43. /****************************************************************
  44. * Fun:[事件]关闭
  45. ****************************************************************/
  46. void on_close(std::function<void(ylib::network::tcp::server* server, uint64 connid)> callback) { m_callback_close = callback; }
  47. /****************************************************************
  48. * Fun:[事件]接收
  49. ****************************************************************/
  50. void on_recv(std::function<void(ylib::network::tcp::server* server, uint64 connid, const char* data, uint32 len)> callback) { m_callback_recv = callback; }
  51. /****************************************************************
  52. * Fun:[事件]握手
  53. ****************************************************************/
  54. void on_handshake(std::function<void(ylib::network::tcp::server* server, uint64 connid)> callback) { m_callback_handshake = callback; }
  55. /****************************************************************
  56. * Fun:[事件]已发送
  57. ****************************************************************/
  58. void on_send(std::function<void(ylib::network::tcp::server* server, uint64 connid, const char* data, uint32 len)> callback) { m_callback_send = callback; }
  59. /****************************************************************
  60. * Fun:[事件]过滤接收
  61. ****************************************************************/
  62. void on_recv(std::function<void(ylib::network::tcp::server* server, uint64 connid, uint32 len)> callback) { m_callback_filter = callback; }
  63. friend class server_lst;
  64. public:
  65. std::function<void(ylib::network::tcp::server*, uint64, const char*, uint32)> m_callback_recv;
  66. private:
  67. std::function<void(ylib::network::tcp::server*, uint64)> m_callback_accept;
  68. std::function<void(ylib::network::tcp::server*, uint64)> m_callback_close;
  69. std::function<void(ylib::network::tcp::server*, uint64, const char*, uint32)> m_callback_send;
  70. std::function<void(ylib::network::tcp::server*, uint64)> m_callback_handshake;
  71. std::function<void(ylib::network::tcp::server*, uint64, uint32)> m_callback_filter;
  72. ylib::receive_model m_model = ylib::PUSH_DEFAULT;
  73. ITcpServer* m_server = nullptr;
  74. ylib::network::tcp::server_lst* m_server_listener = nullptr;
  75. };
  76. }
  77. }
  78. }
  79. #endif