service_position.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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: public boost::enable_shared_from_this<service_position>{
  26. public:
  27. typedef boost::shared_ptr<boost::asio::io_service> service_ptr;
  28. typedef boost::shared_ptr<boost::asio::ip::tcp::socket> socket_ptr;
  29. typedef boost::shared_ptr<boost::asio::ip::tcp::acceptor> acceptor_ptr;
  30. typedef boost::shared_ptr<std::string> buffer_ptr;
  31. public:
  32. virtual void notify(const std::string& msg, const std::string& id, const double& feq);
  33. virtual void set_port(const int port);
  34. virtual bool start();
  35. virtual void stop();
  36. protected:
  37. int m_port;
  38. service_ptr m_service;
  39. std::list<socket_ptr> m_sockets;
  40. acceptor_ptr m_acceptor;
  41. boost::thread m_thread;
  42. boost::atomic_bool m_stop;
  43. std::map<std::string, info_send_ptr> m_deques;
  44. std::mutex m_mutex;
  45. std::shared_ptr<boost::asio::deadline_timer> mp_timer;
  46. protected:
  47. virtual void handle_thread(service_ptr p_service);
  48. virtual void handle_acceptor(const boost::system::error_code& ec, socket_ptr p_socket);
  49. virtual void handle_stop();
  50. virtual void handle_notify(buffer_ptr pBuffer);
  51. virtual void handle_write(const boost::system::error_code& ec, unsigned int bytes_transferred, socket_ptr p_socket, buffer_ptr p_buffer);
  52. virtual void handle_buffer(buffer_ptr p_buffer, std::string id, double feq, service_ptr p_service);
  53. virtual void handle_timer(const boost::system::error_code& ec, std::weak_ptr<info_send> p_info);
  54. virtual std::string to_str(const std::chrono::system_clock::time_point& time);
  55. virtual void init_cache(info_send_ptr& p_info);
  56. public:
  57. static service_position_ptr instance();
  58. };
  59. typedef boost::shared_ptr<service_position> service_position_ptr;
  60. #endif