| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include "VideoExtenHdl.h"
- bool CVideoExtenHdl::add(uint32_t & exten, std::string & agent, websocketpp::connection_hdl hdl)
- {
- std::unique_lock<std::mutex>lock(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_lock<std::mutex>lock(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<uint32_t, uint32_t> CVideoExtenHdl::del(websocketpp::connection_hdl hdl)
- {
- std::unique_lock<std::mutex>lock(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_lock<std::mutex>lock(mut);
- m_ExtenAgent.erase(exten);
- m_ExtenHdl.erase(exten);
- m_ExtenBindReqAgentExten.erase(exten);
- }
- void CVideoExtenHdl::del(std::string & agent)
- {
- std::unique_lock<std::mutex>lock(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;
- }
- }
- }
|