linux版本中间件

VideoExtenHdl.cpp 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "VideoExtenHdl.h"
  2. bool CVideoExtenHdl::add(uint32_t & exten, std::string & agent, websocketpp::connection_hdl hdl)
  3. {
  4. std::unique_lock<std::mutex>lock(mut);
  5. auto it = m_ExtenAgent.find(exten);
  6. if (it == m_ExtenAgent.end()) {
  7. m_ExtenAgent[exten] = agent;
  8. m_ExtenHdl[exten] = hdl;
  9. return true;
  10. }
  11. return false;
  12. }
  13. bool CVideoExtenHdl::bindReqAgentExten(const uint32_t & exten, uint32_t & agentExten)
  14. {
  15. std::unique_lock<std::mutex>lock(mut);
  16. {
  17. auto it = m_ExtenAgent.find(exten);
  18. if (it == m_ExtenAgent.end()) {
  19. return false;
  20. }
  21. }
  22. for (auto it = m_ExtenBindReqAgentExten.begin(); it != m_ExtenBindReqAgentExten.end();) {
  23. if (it->second == agentExten) {
  24. it = m_ExtenBindReqAgentExten.erase(it);
  25. }
  26. else {
  27. ++it;
  28. }
  29. }
  30. auto it = m_ExtenBindReqAgentExten.find(exten);
  31. if (it == m_ExtenBindReqAgentExten.end()) {
  32. m_ExtenBindReqAgentExten[exten] = agentExten;
  33. return true;
  34. }
  35. else { // 如果之前绑定过,需要解除之前绑定
  36. uint32_t oldAgentExten = it->second;
  37. m_ExtenBindReqAgentExten[exten] = agentExten;
  38. if (oldAgentExten == agentExten|| oldAgentExten == 0)return true;
  39. agentExten = oldAgentExten;
  40. return false;
  41. }
  42. }
  43. std::pair<uint32_t, uint32_t> CVideoExtenHdl::del(websocketpp::connection_hdl hdl)
  44. {
  45. std::unique_lock<std::mutex>lock(mut);
  46. for (auto it = m_ExtenHdl.begin(); it != m_ExtenHdl.end(); ++it) {
  47. if (it->second.lock() == hdl.lock()) {
  48. uint32_t exten = 0;
  49. uint32_t bindAgentExten = 0;
  50. exten = it->first;
  51. m_ExtenAgent.erase(exten);
  52. m_ExtenHdl.erase(it);
  53. auto itBind = m_ExtenBindReqAgentExten.find(exten);
  54. if (itBind != m_ExtenBindReqAgentExten.end()) {
  55. bindAgentExten = itBind->second;
  56. m_ExtenBindReqAgentExten.erase(itBind);
  57. }
  58. return std::pair(exten, bindAgentExten);
  59. }
  60. }
  61. return std::pair(0, 0);
  62. }
  63. void CVideoExtenHdl::del(uint32_t & exten)
  64. {
  65. std::unique_lock<std::mutex>lock(mut);
  66. m_ExtenAgent.erase(exten);
  67. m_ExtenHdl.erase(exten);
  68. m_ExtenBindReqAgentExten.erase(exten);
  69. }
  70. void CVideoExtenHdl::del(std::string & agent)
  71. {
  72. std::unique_lock<std::mutex>lock(mut);
  73. for (auto it = m_ExtenAgent.begin(); it != m_ExtenAgent.end(); ++it) {
  74. if (it->second == agent) {
  75. uint32_t exten = 0;
  76. exten = it->first;
  77. m_ExtenAgent.erase(exten);
  78. m_ExtenHdl.erase(exten);
  79. m_ExtenBindReqAgentExten.erase(exten);
  80. break;
  81. }
  82. }
  83. }