service_position.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef __service_position_h__
  2. #define __service_position_h__
  3. #include <string>
  4. #include <list>
  5. #include <boost/asio.hpp>
  6. #include <boost/thread.hpp>
  7. #include <boost/enable_shared_from_this.hpp>
  8. #include <boost/atomic.hpp>
  9. #include <chrono>
  10. struct info_data{
  11. boost::shared_ptr<std::string> p_msg;
  12. std::chrono::system_clock::time_point time_receive;
  13. };
  14. typedef std::shared_ptr<info_data> info_data_ptr;
  15. class info_send{
  16. public:
  17. std::string id;
  18. boost::posix_time::ptime time_last_send;
  19. std::list<info_data_ptr> data;
  20. std::shared_ptr<boost::asio::deadline_timer> p_timer;
  21. double feq;
  22. std::size_t count_max = 3;
  23. };
  24. typedef std::shared_ptr<info_send> info_send_ptr;
  25. class service_position;
  26. typedef boost::shared_ptr<service_position> service_position_ptr;
  27. class service_position: public boost::enable_shared_from_this<service_position>{
  28. public:
  29. typedef boost::shared_ptr<boost::asio::io_service> service_ptr;
  30. typedef boost::shared_ptr<boost::asio::ip::tcp::socket> socket_ptr;
  31. typedef boost::shared_ptr<boost::asio::ip::tcp::acceptor> acceptor_ptr;
  32. typedef boost::shared_ptr<std::string> buffer_ptr;
  33. public:
  34. virtual void notify(const std::string& msg, const std::string& id, const double& feq);
  35. virtual void set_port(const int port);
  36. virtual bool start();
  37. virtual void stop();
  38. protected:
  39. int m_port;
  40. service_ptr m_service;
  41. std::list<socket_ptr> m_sockets;
  42. acceptor_ptr m_acceptor;
  43. boost::thread m_thread;
  44. boost::atomic_bool m_stop;
  45. std::map<std::string, info_send_ptr> m_deques;
  46. std::mutex m_mutex;
  47. std::shared_ptr<boost::asio::deadline_timer> mp_timer;
  48. protected:
  49. virtual void handle_thread(service_ptr p_service);
  50. virtual void handle_acceptor(const boost::system::error_code& ec, socket_ptr p_socket);
  51. virtual void handle_stop();
  52. virtual void handle_notify(buffer_ptr pBuffer);
  53. virtual void handle_write(const boost::system::error_code& ec, unsigned int bytes_transferred, socket_ptr p_socket, buffer_ptr p_buffer);
  54. virtual void handle_buffer(buffer_ptr p_buffer, std::string id, double feq, service_ptr p_service);
  55. virtual void handle_timer(const boost::system::error_code& ec, std::weak_ptr<info_send> p_info);
  56. virtual std::string to_str(const std::chrono::system_clock::time_point& time);
  57. virtual void init_cache(info_send_ptr& p_info);
  58. public:
  59. static service_position_ptr instance(int port);
  60. };
  61. #endif