#include "VideoExtenHdl.h" bool CVideoExtenHdl::add(uint32_t & exten, std::string & agent, websocketpp::connection_hdl hdl) { std::unique_locklock(mut); auto it = m_ExtenAgent.find(exten); if (it == m_ExtenAgent.end()) { m_ExtenAgent[exten] = agent; m_ExtenHdl[exten] = hdl; return true; } return false; } bool CVideoExtenHdl::bindReqAgentExten(const uint32_t & exten, uint32_t & agentExten) { std::unique_locklock(mut); { auto it = m_ExtenAgent.find(exten); if (it == m_ExtenAgent.end()) { return false; } } for (auto it = m_ExtenBindReqAgentExten.begin(); it != m_ExtenBindReqAgentExten.end();) { if (it->second == agentExten) { it = m_ExtenBindReqAgentExten.erase(it); } else { ++it; } } auto it = m_ExtenBindReqAgentExten.find(exten); if (it == m_ExtenBindReqAgentExten.end()) { m_ExtenBindReqAgentExten[exten] = agentExten; return true; } else { // 如果之前绑定过,需要解除之前绑定 uint32_t oldAgentExten = it->second; m_ExtenBindReqAgentExten[exten] = agentExten; if (oldAgentExten == agentExten|| oldAgentExten == 0)return true; agentExten = oldAgentExten; return false; } } std::pair CVideoExtenHdl::del(websocketpp::connection_hdl hdl) { std::unique_locklock(mut); for (auto it = m_ExtenHdl.begin(); it != m_ExtenHdl.end(); ++it) { if (it->second.lock() == hdl.lock()) { uint32_t exten = 0; uint32_t bindAgentExten = 0; exten = it->first; m_ExtenAgent.erase(exten); m_ExtenHdl.erase(it); auto itBind = m_ExtenBindReqAgentExten.find(exten); if (itBind != m_ExtenBindReqAgentExten.end()) { bindAgentExten = itBind->second; m_ExtenBindReqAgentExten.erase(itBind); } return std::pair(exten, bindAgentExten); } } return std::pair(0, 0); } void CVideoExtenHdl::del(uint32_t & exten) { std::unique_locklock(mut); m_ExtenAgent.erase(exten); m_ExtenHdl.erase(exten); m_ExtenBindReqAgentExten.erase(exten); } void CVideoExtenHdl::del(std::string & agent) { std::unique_locklock(mut); for (auto it = m_ExtenAgent.begin(); it != m_ExtenAgent.end(); ++it) { if (it->second == agent) { uint32_t exten = 0; exten = it->first; m_ExtenAgent.erase(exten); m_ExtenHdl.erase(exten); m_ExtenBindReqAgentExten.erase(exten); break; } } }