carManager.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #ifndef __CAR_MANAGER__
  2. #define __CAR_MANAGER__
  3. #include "stdafx.h"
  4. #include "car.h"
  5. #include "bindmorecard.h"
  6. #include "trafficLight.h"
  7. #include "cacti/util/BoundedQueue.h"
  8. class CYAServerDlg;
  9. NAMESPACE_POINT_BEGIN(NAMESPACE_POINT)
  10. struct MotionlessAlarm
  11. {
  12. MotionlessAlarm(CarManager *cm);
  13. ~MotionlessAlarm();
  14. bool find(std::shared_ptr<card_interface> &ci);
  15. void determine(std::shared_ptr<card_interface> &ci);
  16. void erase(std::shared_ptr<card_interface> &ci);
  17. void pushback(std::shared_ptr<card_interface> &ci);
  18. bool isMotionless(std::shared_ptr<card_interface> &ci);
  19. private:
  20. CarManager *m_owner;
  21. bool m_bExit;
  22. std::thread *m_pTh;
  23. std::mutex m_mtx;
  24. std::list<std::shared_ptr<card_interface>> m_cardlist;
  25. void run();
  26. };
  27. class CarManager
  28. {
  29. public:
  30. CarManager(CYAServerDlg*);
  31. ~CarManager();
  32. //--site--
  33. void init_sit_list(int32_t readerid,int32_t antid, double ax, double ay,double scale);
  34. void init_sit_list();
  35. void init_ant_path(int32_t readerid,int32_t antid, double ax, double ay,std::vector<std::string>::iterator& b,std::vector<std::string>::iterator& e);
  36. void init_ant_path();
  37. void init_cardpath();
  38. //--car--
  39. void put(std::string& cardid,const loc_info&li,std::shared_ptr<card_interface> &c,int32_t readerid);
  40. //------
  41. void erase(std::string cardid);
  42. loc_point getpoint(std::string cardid);
  43. //
  44. void update(int x,int y,std::string &cardid){m_g.update(x,y,cardid);}
  45. std::vector<std::string> find_near(int x,int y,int dist,std::string & c)
  46. {
  47. auto v = m_g.find_near(x,y,dist,c);
  48. return std::move(v);
  49. }
  50. std::shared_ptr<card_interface> getCard(const std::string &card_no)
  51. {
  52. auto card = m_cardList[card_no];
  53. if (card==nullptr)
  54. return nullptr;
  55. else
  56. return card->m_card;
  57. }
  58. void uwb_HandleMoreCard(std::shared_ptr<card_interface> &c);
  59. void erase(std::map<uint64_t,std::string> &m) ;
  60. void read_config();
  61. //
  62. std::vector<his_location> makeUpMorePoints(std::string & cardid,double x,double y, uint64_t ct,int32_t readerid);
  63. //
  64. void put(std::shared_ptr<TrafficLightGroup> t,int gid);
  65. std::shared_ptr<TrafficLightGroup> operator [](int gid)
  66. {
  67. auto it = m_Map.find(gid);
  68. if(it == m_Map.end())
  69. return nullptr;
  70. else
  71. return it->second;
  72. }
  73. std::shared_ptr<TrafficLightGroup> operator[](int gid) const
  74. {
  75. auto it = m_Map.find(gid);
  76. if(it == m_Map.end())
  77. return nullptr;
  78. else
  79. return it->second;
  80. }
  81. void showInfo();
  82. void initRule();
  83. void handleRule(std::shared_ptr<card_interface> c);
  84. std::shared_ptr<RunRedLight> check_run_red_light(std::shared_ptr<card_interface> c);
  85. void setManual(int gid,int lid,std::string name,int state);
  86. void cancelManual(int gid);
  87. void getSendLightInfo(std::vector<std::shared_ptr<TrafficLightGroup>>&& p,std::string s="");
  88. //////////
  89. void determineCard(std::shared_ptr<card_interface> & ci);
  90. void deal_alarm_card(std::shared_ptr<card_interface> & ci,bool flag);
  91. void erase(std::shared_ptr<card_interface> &ci);
  92. void push_back(std::shared_ptr<card_interface> &ci);
  93. std::map<int,std::shared_ptr<TrafficLightGroup>> m_Map;
  94. //add by zhuyf , 2018/11/05
  95. std::shared_ptr<TrafficLight> getTrafficLight(const uint32_t& light_id); //获得灯号
  96. std::vector<uint32_t> getPhysicsTrafficLightId(const uint32_t& phy_light_id); //获得物理灯号下所有灯号
  97. int getTrafficGroupId(const uint32_t& light_id); //根据物理灯号获得灯组号
  98. bool resetTrafficGroup();
  99. private:
  100. std::unique_ptr<sit_list> m_sites;
  101. base_card_list m_cardList;
  102. std::array<std::shared_ptr<CardFactory>,2> m_cf;
  103. geo_list m_g;
  104. CYAServerDlg* m_owner;
  105. std::array<std::shared_ptr<DecoratorRule>,2> m_dr;
  106. bool m_bExit;
  107. std::thread* m_pThread;
  108. MotionlessAlarm * m_ma;
  109. cacti::BoundedQueue<std::shared_ptr<TrafficLightGroup>> m_queue;
  110. double m_reddis;
  111. private:
  112. void run();
  113. };
  114. NAMESPACE_POINT_END(NAMESPACE_POINT)
  115. #endif