tcp_agent.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #pragma once
  2. #include <string>
  3. #include "base/define.h"
  4. #include "base/buffer.h"
  5. #include "base/error.h"
  6. #include "util/map.hpp"
  7. #include "net/http_define.h"
  8. class ITcpAgent;
  9. namespace ylib
  10. {
  11. namespace network
  12. {
  13. namespace tcp
  14. {
  15. class agent_lst;
  16. class agent :public ylib::error_base
  17. {
  18. public:
  19. agent();
  20. ~agent();
  21. // 启动,是否采用异步
  22. bool start(bool async = false, ylib::receive_model model = ylib::PUSH_DEFAULT);
  23. void stop();
  24. bool connect(const std::string& address, const ushort& port, uint64& connid, void* extra = nullptr);
  25. bool disConnect(uint64 connid);
  26. bool isConnect(uint64 connid);
  27. bool send(uint64 connid, const char* data, uint32 len);
  28. bool send(uint64 connid, const ylib::buffer& data);
  29. void* extra_ptr(uint64 connid);
  30. bool extra_ptr(uint64 connid, void* extra);
  31. template<typename T>
  32. T* extra(uint64 connid)
  33. {
  34. return (T*)extra_ptr(connid);
  35. }
  36. ITcpAgent* getHP() {
  37. return m_agent;
  38. }
  39. void on_handshake(std::function<void(ylib::network::tcp::agent*, uint64)> callback) { m_on_handshake_callback = callback; }
  40. void on_send(std::function<void(ylib::network::tcp::agent*, uint64, const char*, int)> callback) { m_on_send_callback = callback; }
  41. void on_receive(std::function<void(ylib::network::tcp::agent*, uint64, const char*, int)> callback) { m_on_receive_callback = callback; }
  42. void on_receive(std::function<void(ylib::network::tcp::agent*, uint64, int)> callback) { m_on_receive_notdata_callback = callback; }
  43. void on_close(std::function<void(ylib::network::tcp::agent*, uint64)> callback) { m_on_close_callback = callback; }
  44. void on_shutdown(std::function<void(ylib::network::tcp::agent*)> callback) { m_on_shutdown_callback = callback; }
  45. void on_prepareconnect(std::function<void(ylib::network::tcp::agent*, uint64)> callback) { m_on_prepareconnect_callback = callback; }
  46. void on_connect(std::function<void(ylib::network::tcp::agent*, uint64)> callback) { m_on_connect_callback = callback; }
  47. friend class agent_lst;
  48. public:
  49. std::function<void(ylib::network::tcp::agent*, uint64, const char*, int)> m_on_receive_callback;
  50. private:
  51. std::function<void(ylib::network::tcp::agent*, uint64)> m_on_handshake_callback;
  52. std::function<void(ylib::network::tcp::agent*, uint64, const char*, int)> m_on_send_callback;
  53. std::function<void(ylib::network::tcp::agent*, uint64, int)> m_on_receive_notdata_callback;
  54. std::function<void(ylib::network::tcp::agent*, uint64)> m_on_close_callback;
  55. std::function<void(ylib::network::tcp::agent*)> m_on_shutdown_callback;
  56. std::function<void(ylib::network::tcp::agent*, uint64)> m_on_prepareconnect_callback;
  57. std::function<void(ylib::network::tcp::agent*, uint64)> m_on_connect_callback;
  58. ITcpAgent* m_agent = nullptr;
  59. network::tcp::agent_lst* m_listener = nullptr;
  60. ylib::receive_model m_model = ylib::PUSH_DEFAULT;
  61. };
  62. }
  63. }
  64. }