| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- // ServerDlg.h : header file
- //
- #pragma once
- #include <regex>
- #include <vector>
- #include <atomic>
- #include <set>
- #include <mutex>
- #include <memory>
- #include <boost/multi_index_container.hpp>
- #include <boost/multi_index/member.hpp>
- #include <boost/multi_index/ordered_index.hpp>
- #include <boost/algorithm/string.hpp>
- #include <sstream>
- #include "WebSocketServer.h"
- using namespace boost;
- using namespace boost::multi_index;
- using namespace std;
- struct agent_id {};
- struct agent_exten {};
- struct hdl_id{};
- typedef struct tagAgent {
- int AgentID;
- int ExtenID;
- int HdlID;
-
- tagAgent(int AgentID, int ExtenID, int hdlId = 0) {
- this->AgentID = AgentID;
- this->ExtenID = ExtenID;
- this->HdlID = hdlId;
- std::cout << __FUNCTION__ << " " << toString() << std::endl;
- }
- ~tagAgent() {
- std::cout << __FUNCTION__ << " " << toString() << std::endl;
- this->AgentID = 0;
- this->ExtenID = 0;
- this->HdlID = 0;
- }
- friend std::ostream& operator<<(std::ostream& out, const tagAgent& a) {
- char str[100];
- snprintf(str,100, "坐席[%d],分机[%d],标识[%d]", a.AgentID , a.ExtenID , a.HdlID);
- out << str;
- return out;
- }
- std::string toString() {
- char str[100];
- snprintf(str,100, "坐席[%d],分机[%d],标识[%d]",AgentID ,ExtenID , HdlID);
- return str;
- }
- }Agent;
- typedef multi_index_container<
- Agent, indexed_by<
- ordered_unique<tag<agent_id>, member<Agent, int, &Agent::AgentID>>,
- ordered_unique<tag<agent_exten>, member<Agent, int, &Agent::ExtenID>>,
- ordered_unique<tag<hdl_id>, member<Agent, int, &Agent::HdlID>>
- >
- > AgentMap;
- class CLineStateUpdateInfo
- {
- public:
- int ExternID;
- int Externstate;
- int CallIDDD;
- int ActionID;
- int AgentIDDDD;
- std::string caller;
- std::string callee;
- std::string AssoData;
- int Line;
- int InfoEx;
- int FinalExt;
- int OpType;
- std::string Dropcall;
- CLineStateUpdateInfo()
- {
- caller="";
- callee="";
- AssoData="";
- }
- };
- // CServerDlg dialog
- class CServerDlg : public CDialogEx
- {
- // Construction
- public:
- CServerDlg(CWnd* pParent = NULL); // standard constructor
- ~CServerDlg(); // standard destructor
- // Dialog Data
- enum { IDD = IDD_SERVER_DIALOG };
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- // Implementation
- protected:
- HICON m_hIcon;
- // Generated message map functions
- virtual BOOL OnInitDialog();
- afx_msg void OnPaint();
- afx_msg HCURSOR OnQueryDragIcon();
- DECLARE_MESSAGE_MAP()
- public:
- void StartServer();
- //
- private:
- std::string JsonParser(const string &strInput);
- void StringSplit(string s,char splitchar,vector<string>& vec) ;
- char* GetType();
- int GetAgentID();
- char* GetAgentGroup();
- int GetAgentType();
- int GetAgentExten();
- CString GetAgentNumber();
- int GetOpType();
- CString GetMakeCallDestinationNumber();
- CString GetTransferOrMeetingDestinationNumber();
- CString GetTransferType();
-
- CString GetNumberHeader();
- CString GetVisitStr();
- int GetBusyCode();
- int GetRecivedState();
- int GetTargetAgentID();
- int GetTargetAgentState();
- int GetSubType();
- int GetSubParmer();
- CString GetConsultCallee();
- CString GetConsultCaller();
- int GetEndParmer();
- CString GetIvrName();
- int GetIvrPos();
- CString GetSendDtmf();
- CString GetTurnTagNum();
- CString GetTurnTagData();
- string CreateJson(int AgentID,string AgentState);
- string CreateJson2(string str,bool reslut);
- string CreateJson2(string str, int waitCount);
- string CreateJson2(string str, bool b, int extenID);
- string CreateJson2(string str, bool b, int extenID,std::string pwd);
- string CreateJson3(string strtype,string str);
- string CreateJson4(string strType,bool b);
- string CreateJson5(string strType,bool b,int a);
- string CreateJson6(string strType,bool b,string str,string calleeStr,long callID,int ActionId);
- string CreateJson6(string strType, bool b, string str, string calleeStr, long callID, int ActionId,string trunkId); // 7.29 添加中继号参数
- string CreateJson7(string strType,bool b,int AgentID,int AgentState,int LineState); //分机状态
- string CreateJson7(string strType, bool b, int AgentID, int AgentState, int LineState, int PeerLineType,string strDirection);//分机状态,增加呼入呼出方向in,out
- string CreateJson8(string strType,bool b,int AgentID,string state); //座席状态
- string CreateJson8(string strType, bool b, int AgentID, int ExtenID, string state, string ExtenState, string Caller, string Callee, string ManageAgentId, string Group);
- string CreateJson9(string strType,bool b,int AgentID,long CallID); //CallID
- string CreateJson9(string strType, bool b, int AgentID, long CallID, string strDirection); // 2020-01-13 CallID 追加呼入呼出方向
- string CreateJson9(string strType, bool b, int AgentID, long CallID, string strDirection,int ActionID); // 2021-03-22 CallID 追加actionid
- string CreateJson10(string strType,bool b,string RecPath,long CallId); //录音
- string CreateJson11(string strType,bool b,string strAgentList); //坐席列表
- string CreateJson12(string strType, bool b, string PduString); // ych 2018.6.4 商丘添加监控命令
- string CreateJson13(string strType, bool b, const CLineStateUpdateInfo& LineStateUpdateInfo); // ych 2018.6.7 商丘添加监控命令
- string CreateJson14(string strType, bool b, int AgentID, int ExternID, int AgentState, int ExtenState); // ych 2018.6.7 商丘添加监控命令
- string CreateJson15(string strtype, int ErrorCode);
- string CreateJson16(string strType, bool b, int AgentID, int AgentState, int LineState,string Type); // 县级12345 by 8/20
- std::string CreateJson17(string strType, bool b, string PduString); // 坐席详情,签入,通话中,闲,忙,话后处理数量
- std::string CreateJson18(std::string strType, bool b, std::string SkillGroupDetail); // 技能组排队详情详情
- std::string DropCallJson(bool b, std::string CallerNum);
- std::string CreateJsonZmdExtStateList(std::string strType, bool b,std::string extStateList); // 2022-09-01 驻马店专用,分机状态列表
- void OnLineStateChange(CPduEntity* Pduenity);
- void SendMessageToClientByAgentId(std::string MsgStr, int AgentId, bool isDelAgent = false);
- bool SendMessageToClientByExtenId(std::string MsgStr, int ExtenId);
- void SendMessageToClientByHdlId(std::string MsgStr, int CondId);
- void SendMessageToAllAgentClient(std::string MsgStr);
- bool SendMessageToClient(std::string MsgStr, long ConId);
-
- private:
- // websocket 事件
- void __recvMsgFun(const long conID, const std::string &msg, const std::string &ip);
- void __closeFun(const long conID);
- void __recovLogin(); // 回复签入 2022-09-07
- void OnAcdmsgRecmsg(CPduEntity* Pduenity); // 该方法代替sendmessages调用得到方法
- private:
- CWebSocketServer m_Server;
- vector<string> m_VecAgentAttributeStr;
-
- AgentMap m_agentMap; // 签入坐席集合, AgentID与AgentExtern,连接标识 键值对,
- std::mutex m_agentMapLock; // 坐席集合锁
- std::unordered_map<int, long> m_MapLoginAgentConID; //签入时临时存放AgentID与ConID键值对
- std::mutex m_MapLoginAgentConIDLock; //map锁
- std::unordered_map<int, long> m_ConIdVec; // 监控订阅,不需先签入
- std::unordered_map<int, long> m_SubScribed_ConID; //已订阅的连接ID Vec; 订阅坐席状态,需先签入
- char* TranslateErrorCode(int ErrorCode); //翻译错误码
-
- bool IsAvailableConID(int CondId); //当前连接是否有效
- atomic<bool> m_IsVideo;
- std::unordered_map<int, long> m_agentDetailConIDs; // 获取坐席详情id集合
- std::mutex m_agentDetailConIDLock; // set锁
- public:
- CListCtrl m_CtrlList;
- afx_msg void OnClose();
- afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnMenuLogStop();
- afx_msg void OnUpdateMenuLogStop(CCmdUI *pCmdUI);
- afx_msg void OnMenuLogStart();
- afx_msg void OnUpdateMenuLogStart(CCmdUI *pCmdUI);
- afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
- };
|