| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140 |
-
- // ServerDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "Server.h"
- #include "ServerDlg.h"
- #include "afxdialogex.h"
- #include "NetworkClient.h"
- HWND hwndd;
- // CServerDlg dialog
- CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)
- : CDialogEx(CServerDlg::IDD, pParent)
- {
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- CServerDlg::~CServerDlg()
- {
- // 日志关闭
- ILogger::getInstance().close();
- }
- void CServerDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_LIST1, m_CtrlList);
- }
- BEGIN_MESSAGE_MAP(CServerDlg, CDialogEx)
- ON_WM_PAINT()
- ON_WM_VKEYTOITEM()
- ON_WM_QUERYDRAGICON()
- ON_WM_CLOSE()
- ON_WM_SYSCOMMAND()
- ON_WM_SIZE()
- ON_COMMAND(ID_MENU_LOG_STOP, &CServerDlg::OnMenuLogStop)
- ON_UPDATE_COMMAND_UI(ID_MENU_LOG_STOP, &CServerDlg::OnUpdateMenuLogStop)
- ON_COMMAND(ID_MENU_LOG_START, &CServerDlg::OnMenuLogStart)
- ON_UPDATE_COMMAND_UI(ID_MENU_LOG_START, &CServerDlg::OnUpdateMenuLogStart)
- ON_WM_INITMENUPOPUP()
- END_MESSAGE_MAP()
- BOOL CServerDlg::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- // TODO: Add extra initialization here
- // 设置主窗口标记
- ::SetProp(m_hWnd, AfxGetApp()->m_pszAppName, (HANDLE)1);
- hwndd = this->GetSafeHwnd();
- m_IsVideo = false;
- ILogger::getInstance().init(&m_CtrlList, LOG_DEV_SERVER, "./Data/Log");
- //ILogger::getInstance().filterShow(LOG_CLASS_GENERAL, LOG_LEVEL_ERROR); // 2021-02-04日志过滤
- ILogger::getInstance().start();
- // 2022-09-06 重启httpserver,清空回复签入坐席
- clearOnlineAgentGroupDetail();
- CNetworkClient::GetInstance().setAcdRecMsgFun(std::bind((void(CServerDlg::*)(CPduEntity*))&CServerDlg::OnAcdmsgRecmsg,this,std::placeholders::_1));
- CNetworkClient::GetInstance().init();
- StartServer();
- return TRUE; // return TRUE unless you set the focus to a control
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CServerDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialogEx::OnPaint();
- }
- }
- // The system calls this function to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CServerDlg::OnQueryDragIcon()
- {
- return static_cast<HCURSOR>(m_hIcon);
- }
- void CServerDlg::StartServer()
- {
- YamlConfig* cfg = YamlConfig::GetInstance();
- CString strTitle;
- int port = cfg->GetHttpServerPort();
- strTitle.Format("127.0.0.1 : %d", port);
- SetWindowText(strTitle);
- m_Server.setCallbackRecvMsg(std::bind(&CServerDlg::__recvMsgFun, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
- m_Server.setCallbackClose(std::bind(&CServerDlg::__closeFun, this, std::placeholders::_1));
- if (!m_Server.init(port, cfg->GetWssPort(),cfg->GetWssSSLFilePath(),cfg->GetWssPwd()))
- {
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "HttpServer服务初始化失败");
- }
- else
- {
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "HttpServer服务开启");
- m_Server.asyncRun();
- }
- }
- WCHAR* ConvertUtf8ToGBK(char* szUtf8)
- {
- int len = MultiByteToWideChar(CP_UTF8, 0, szUtf8, -1, NULL, 0);
- WCHAR* wszUCD = new WCHAR[len + 1];
- memset(wszUCD, 0, len);
- MultiByteToWideChar(CP_UTF8, 0, szUtf8, -1, wszUCD, len);
- return wszUCD;
- }
- void Wchar_tToString(std::string& szDst, wchar_t *wchar)
- {
- wchar_t * wText = wchar;
- DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, wText, -1, NULL, 0, NULL, FALSE);// WideCharToMultiByte的运用
- char *psText; // psText为char*的临时数组,作为赋值给std::string的中间变量
- psText = new char[dwNum];
- WideCharToMultiByte(CP_OEMCP, NULL, wText, -1, psText, dwNum, NULL, FALSE);// WideCharToMultiByte的再次运用
- szDst = psText;// std::string赋值
- delete[]psText;// psText的清除
- }
- char* UnicodeToUtf8(WCHAR* wszUtf8)
- {
- int len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
- char* szUtf8 = new char[len + 1];
- memset(szUtf8, 0, len + 1);
- WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL, NULL);
- return szUtf8;
- }
- char* CStringTochar(CString strInput)
- {
- USES_CONVERSION;
- //调用函数,T2A和W2A均支持ATL和MFC中的字符转换
- char * szStr = (LPSTR)(LPCTSTR)strInput;
- char* pszMultiByte = szStr; //strlen(pwsUnicode)=5
- int iSize;
- wchar_t* pwszUnicode = NULL;
- //返回接受字符串所需缓冲区的大小,已经包含字符结尾符'\0'
- iSize = MultiByteToWideChar(CP_ACP, 0, pszMultiByte, -1, NULL, 0); //iSize =wcslen(pwsUnicode)+1=6
- pwszUnicode = (wchar_t *)malloc(iSize * sizeof(wchar_t)); //不需要 pwszUnicode = (wchar_t *)malloc((iSize+1)*sizeof(wchar_t))
- MultiByteToWideChar(CP_ACP, 0, pszMultiByte, -1, pwszUnicode, iSize);
- char* by = NULL;
- by = UnicodeToUtf8(pwszUnicode);
- if (pwszUnicode != NULL)
- {
- free(pwszUnicode);
- pwszUnicode = NULL;
- }
- return by;
- }
- void UnicodeToUtf8(WCHAR* wszUtf8, std::string& strUtf8)
- {
- int len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
- char* szUtf8 = new char[len + 1];
- memset(szUtf8, 0, len + 1);
- WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL, NULL);
- strUtf8 = szUtf8;
- delete[]szUtf8;
- szUtf8 = NULL;
- }
- void AnsiToUtf8(std::string& strInput)
- {
- USES_CONVERSION;
- //调用函数,T2A和W2A均支持ATL和MFC中的字符转换
- const char* pszMultiByte = strInput.c_str();; //strlen(pwsUnicode)=5
- int iSize;
- wchar_t* pwszUnicode;
- //返回接受字符串所需缓冲区的大小,已经包含字符结尾符'\0'
- iSize = MultiByteToWideChar(CP_ACP, 0, pszMultiByte, -1, NULL, 0); //iSize =wcslen(pwsUnicode)+1=6
- pwszUnicode = (wchar_t *)malloc(iSize * sizeof(wchar_t)); //不需要 pwszUnicode = (wchar_t *)malloc((iSize+1)*sizeof(wchar_t))
- MultiByteToWideChar(CP_ACP, 0, pszMultiByte, -1, pwszUnicode, iSize);
- UnicodeToUtf8(pwszUnicode, strInput);
- if (pwszUnicode != NULL)
- {
- free(pwszUnicode);
- pwszUnicode = NULL;
- }
- }
- std::string CServerDlg::JsonParser(const string &strInput)
- {
- Json::Reader reader;
- Json::Value root;
- string ResultStr;
- if (reader.parse(strInput, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
- {
- std::string TypeStr = root["Type"].asString(); // 访问节点,upload_id = "UP000000"
- //县级12345中间件 by 8/20
- if (0 == strcmp(TypeStr.c_str(), "Dropcall"))
- {
- std::string AgentID = root["AgentID"].asString();
- std::string AgentState = root["AgentState"].asString();
- std::string State = root["State"].asString();
- std::string Type = "Dropcall";
- std::string Result = root["Result"].asString();
- ResultStr = "Dropcall@" + AgentID + "@" + AgentState + "@" + Result + "@" + State + "@" + Type;
- }
- if (0 == strcmp(TypeStr.c_str(), "GetAgentDetail"))
- {
- ResultStr = "GetAgentDetail";
- }
- if (0 == strcmp(TypeStr.c_str(), "VideoReqExten"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "VideoReqExten@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "VideoReqIdeAgent"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "VideoReqIdeAgent@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "VideoReqBindAgent"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "VideoReqBindAgent@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "VideoDesExten"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "VideoDesExten@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Login"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string AgentGroupStr = root["AgentGroup"].asString();
- std::string AgentTypeStr = root["AgentType"].asString();
- ResultStr = "Login@" + AgentIDStr + "@" + AgentExtenStr + "@" + AgentTypeStr + "@" + AgentGroupStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Monitor")) // ych 2018.6.4 商丘添加监控命令
- {
- ResultStr = "Monitor";
- }
- if (0 == strcmp(TypeStr.c_str(), "SubScribeMonitor")) // ych 2018.6.7 商丘添加监控命令
- {
- ResultStr = "SubScribeMonitor";
- }
- if (0 == strcmp(TypeStr.c_str(), "SubScribeMonitorCancel")) // ych 2018.6.7 商丘添加监控命令
- {
- ResultStr = "SubScribeMonitorCancel";
- }
- if (0 == strcmp(TypeStr.c_str(), "Logout"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "Logout@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "SayBusy"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "SayBusy@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "SayFree"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "SayFree@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Reset"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "Reset@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "MakeCall"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string DestinationHeader = root["Header"].asString();
- std::string DestinationNumStr = root["DestinationNumber"].asString();
- std::string optVisit = root["TaskType"].asString();
- std::string optVisitTelID = root["TaskPhoneID"].asString();
- std::string optVisitCode = root["TaskID"].asString();
- ResultStr = "MakeCall@" + AgentIDStr + "@" + AgentExtenStr + "@" + DestinationHeader + "@" + DestinationNumStr + "@" + optVisit + "@" + optVisitTelID + "@" + optVisitCode;
- }
- if (0 == strcmp(TypeStr.c_str(), "AnswerCall"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "AnswerCall@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "DropCall"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string IvrNameStr = root["IvrName"].asString();
- std::string IvrPosStr = root["IvrPos"].asString();
- ResultStr = "DropCall@" + AgentIDStr + "@" + AgentExtenStr + "@" + IvrNameStr + "@" + IvrPosStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Hold"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "Hold@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Retrieve"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "Retrieve@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Mute"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string OpType = root["OpType"].asString();
- ResultStr = "Mute@" + AgentIDStr + "@" + AgentExtenStr+"@"+ OpType;
- }
- if (0 == strcmp(TypeStr.c_str(), "Transfer"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string DestinationNumStr = root["DestinationNumber"].asString();
- std::string TransferType = root["TransferType"].asString();
- ResultStr = "Transfer@" + AgentIDStr + "@" + AgentExtenStr + "@" + DestinationNumStr + "@" + TransferType;
- }
- if (0 == strcmp(TypeStr.c_str(), "Meeting"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string DestinationNumStr = root["DestinationNumber"].asString();
- ResultStr = "Meeting@" + AgentIDStr + "@" + AgentExtenStr + "@" + DestinationNumStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "MeetingTakeBack"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "MeetingTakeBack@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Listen"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TargetAgentID = root["TargetAgentID"].asString();
- ResultStr = "Listen@" + AgentIDStr + "@" + AgentExtenStr + "@" + TargetAgentID;
- }
- if (0 == strcmp(TypeStr.c_str(), "Insert"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TargetAgentID = root["TargetAgentID"].asString();
- ResultStr = "Insert@" + AgentIDStr + "@" + AgentExtenStr + "@" + TargetAgentID;
- }
- if (0 == strcmp(TypeStr.c_str(), "Intercept"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TargetAgentID = root["TargetAgentID"].asString();
- ResultStr = "Intercept@" + AgentIDStr + "@" + AgentExtenStr + "@" + TargetAgentID;
- }
- if (0 == strcmp(TypeStr.c_str(), "Break"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TargetAgentID = root["TargetAgentID"].asString();
- ResultStr = "Break@" + AgentIDStr + "@" + AgentExtenStr + "@" + TargetAgentID;
- }
- if (0 == strcmp(TypeStr.c_str(), "ForceAgentLogOut"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TargetAgentID = root["TargetAgentID"].asString();
- ResultStr = "ForceAgentLogOut@" + AgentIDStr + "@" + AgentExtenStr + "@" + TargetAgentID;
- }
- if (0 == strcmp(TypeStr.c_str(), "ForceAgentState"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TargetAgentID = root["TargetAgentID"].asString();
- std::string TargetAgentState = root["TargetAgentState"].asString();
- ResultStr = "ForceAgentState@" + AgentIDStr + "@" + AgentExtenStr + "@" + TargetAgentID + "@" + TargetAgentState;
- }
- if (0 == strcmp(TypeStr.c_str(), "Instead"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TargetAgentID = root["TargetAgentID"].asString();
- ResultStr = "Instead@" + AgentIDStr + "@" + AgentExtenStr + "@" + TargetAgentID;
- }
- if (0 == strcmp(TypeStr.c_str(), "SubScribe"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string SubType = root["SubType"].asString();
- std::string SubParmer = root["SubParmer"].asString();
- ResultStr = "SubScribe@" + AgentIDStr + "@" + AgentExtenStr + "@" + SubParmer + "@" + SubType;
- }
- if (0 == strcmp(TypeStr.c_str(), "SubScribeCancel"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string SubType = root["SubType"].asString();
- std::string SubParmer = root["SubParmer"].asString();
- ResultStr = "SubScribeCancel@" + AgentIDStr + "@" + AgentExtenStr + "@" + SubParmer + "@" + SubType;
- }
- if (0 == strcmp(TypeStr.c_str(), "GetAgentList"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "GetAgentList@" + AgentIDStr + "@" + AgentExtenStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "Consult"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string CalleeStr = root["Callee"].asString();
- std::string CallerStr = root["Caller"].asString();
- ResultStr = "Consult@" + AgentIDStr + "@" + AgentExtenStr + "@" + CalleeStr + "@" + CallerStr;
- }
- if (0 == strcmp(TypeStr.c_str(), "ConfirmTransfer"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string EndParmer = root["EndParmer"].asString();
- ResultStr = "ConfirmTransfer@" + AgentIDStr + "@" + AgentExtenStr + "@" + EndParmer;
- }
- if (0 == strcmp(TypeStr.c_str(), "TurnIvr"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string IvrName = root["IvrName"].asString();
- std::string IvrPos = root["IvrPos"].asString();
- ResultStr = "TurnIvr@" + AgentIDStr + "@" + AgentExtenStr + "@" + IvrName + "@" + IvrPos;
- }
-
- if (0 == strcmp(TypeStr.c_str(), "SendDtmf"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string Dtmf = root["Dtmf"].asString();
- ResultStr = "SendDtmf@" + AgentIDStr + "@" + AgentExtenStr + "@" + Dtmf;
- }
-
- if (0 == strcmp(TypeStr.c_str(), "Heart"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "Heart@" + AgentIDStr + "@" + AgentExtenStr;
- }
- // 获取分机状态列表,驻马店专用
- if (0 == strcmp(TypeStr.c_str(), "GetExtenList"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- ResultStr = "GetExtenList@" + AgentIDStr + "@" + AgentExtenStr ;
- }
- if (0 == strcmp(TypeStr.c_str(), "TurnMsg"))
- {
- std::string AgentIDStr = root["AgentID"].asString();
- std::string AgentExtenStr = root["AgentExten"].asString();
- std::string TagNum = root["TagNum"].asString();
- std::string TagData = root["TagData"].asString();
- ResultStr = "TurnMsg@" + AgentIDStr + "@" + AgentExtenStr + "@" + TagNum + "@" + TagData;
- }
-
- return ResultStr;
- }
- else
- {
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "JSON字符串解析失败: %s", strInput.c_str());
- }
- return "";
- }
- void CServerDlg::StringSplit(string s, char splitchar, vector<string>& vec)
- {
- if (vec.size() > 0)//保证vec是空的
- vec.clear();
- std::string str;
- str = splitchar;
- boost::split(vec, s, boost::is_any_of(str));
- return; // 使用boost分割库,
- int length = s.length();
- int start = 0;
- for (int i = 0; i < length; i++)
- {
- if (s[i] == splitchar && i == 0)//第一个就遇到分割符
- {
- start += 1;
- }
- else if (s[i] == splitchar)
- {
- vec.push_back(s.substr(start, i - start));
- start = i + 1;
- }
- else if (i == length - 1)//到达尾部
- {
- vec.push_back(s.substr(start, i + 1 - start));
- }
- }
- }
- char Request_Type[100] = "";
- char* CServerDlg::GetType()
- {
- ZeroMemory(Request_Type, 100);
- string str = m_VecAgentAttributeStr.at(0);
- memcpy(Request_Type, str.c_str(), str.length());
- return Request_Type;
- }
- int CServerDlg::GetAgentID()
- {
- if (m_VecAgentAttributeStr.size() < 2)
- {
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(1);
- int id = atoi(str.c_str());
- return id;
- }
- int CServerDlg::GetAgentExten()
- {
- if (m_VecAgentAttributeStr.size() < 3)
- {
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(2);
- int exten = atoi(str.c_str());
- return exten;
- }
- int CServerDlg::GetAgentType()
- {
- if (m_VecAgentAttributeStr.size() < 4)
- {
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(3);
- int type = atoi(str.c_str());
- return type;
- }
- char groupch[100] = "";
- char* CServerDlg::GetAgentGroup()
- {
- if (m_VecAgentAttributeStr.size() < 5)
- {
- return "0";
- }
- ZeroMemory(groupch, 100);
- string str = m_VecAgentAttributeStr.at(4);
- memcpy(groupch, str.c_str(), str.length());
- return groupch;
- }
- CString CServerDlg::GetAgentNumber()
- {
- if (m_VecAgentAttributeStr.size() < 3)
- {
- return "";
- }
- string str = m_VecAgentAttributeStr.at(2);
- CString sttr = str.c_str();
- return sttr;
- }
- int CServerDlg::GetOpType()
- {
- if (m_VecAgentAttributeStr.size() < 4)
- {
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(3);
- int opType = atoi(str.c_str());
- return opType;
- }
- CString CServerDlg::GetNumberHeader()
- {
- if (m_VecAgentAttributeStr.size() < 4) return "";
- string str = m_VecAgentAttributeStr.at(3);
- CString sttr = str.c_str();
- return sttr;
- }
- CString CServerDlg::GetVisitStr()
- {
- if (m_VecAgentAttributeStr.size() < 8) return "";
- string strVisit = m_VecAgentAttributeStr.at(5);
- string strVisitTel = m_VecAgentAttributeStr.at(6);
- string strVisitCode = m_VecAgentAttributeStr.at(7);
- string strVisitAll = strVisit + "|" + strVisitTel + "|" + strVisitCode;
- return strVisitAll.c_str(); //回访字符串
- }
- CString CServerDlg::GetMakeCallDestinationNumber()
- {
- if (m_VecAgentAttributeStr.size() < 4) return "";
- string str = m_VecAgentAttributeStr.at(4);
- CString sttr = str.c_str();
- return sttr;
- }
- CString CServerDlg::GetTransferOrMeetingDestinationNumber()
- {
- if (m_VecAgentAttributeStr.size() < 3) return "";
- string str = m_VecAgentAttributeStr.at(3);
- CString sttr = str.c_str();
- return sttr;
- }
- CString CServerDlg::GetTransferType()
- {
- if (m_VecAgentAttributeStr.size() < 4) return "";
- string str = m_VecAgentAttributeStr.at(4);
- CString sttr = str.c_str();
- return sttr;
- }
- int CServerDlg::GetBusyCode()
- {
- if (m_VecAgentAttributeStr.size() < 3)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, "属性获取失败[%s] ", "GetBusyCode");
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(2);
- int code = atoi(str.c_str());
- return code;
- }
- int CServerDlg::GetRecivedState()
- {
- if (m_VecAgentAttributeStr.size() < 3)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, "属性获取失败[%s] ", "GetRecivedState");
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(2);
- int state = atoi(str.c_str());
- return state;
- }
- int CServerDlg::GetTargetAgentID()
- {
- if (m_VecAgentAttributeStr.size() < 4)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, "属性获取失败[%s] ", "GetTargetAgentID");
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(3);
- int id = atoi(str.c_str());
- return id;
- }
- int CServerDlg::GetTargetAgentState()
- {
- if (m_VecAgentAttributeStr.size() < 5) // 2021-03-05 <4 改为 <5
- return 2;
- string str = m_VecAgentAttributeStr.at(4);
- int id = atoi(str.c_str());
- return id;
- }
- int CServerDlg::GetSubType()
- {
- if (m_VecAgentAttributeStr.size() < 4)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, "属性获取失败[%s] ", "GetSubType");
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(3);
- int id = atoi(str.c_str());
- return id;
- }
- int CServerDlg::GetSubParmer()
- {
- if (m_VecAgentAttributeStr.size() < 5)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, "属性获取失败[%s] ", "GetSubParmer");
- return 0;
- }
- string str = m_VecAgentAttributeStr.at(4);
- int id = atoi(str.c_str());
- return id;
- }
- CString CServerDlg::GetIvrName()
- {
- if (m_VecAgentAttributeStr.size() <= 3) return "";
- string str = m_VecAgentAttributeStr.at(3);
- CString sttr = str.c_str();
- return sttr;
- }
- int CServerDlg::GetIvrPos()
- {
- if (m_VecAgentAttributeStr.size() <= 4) return -1;
- string str = m_VecAgentAttributeStr.at(4);
- int pos = atoi(str.c_str());
- return pos;
- }
- CString CServerDlg::GetSendDtmf()
- {
- if (m_VecAgentAttributeStr.size() <= 3) return "";
- string str = m_VecAgentAttributeStr.at(3);
- CString sttr = str.c_str();
- return sttr;
- }
- CString CServerDlg::GetTurnTagNum()
- {
- if (m_VecAgentAttributeStr.size() <= 3) return "";
- string str = m_VecAgentAttributeStr.at(3);
- CString sttr = str.c_str();
- return sttr;
- }
- CString CServerDlg::GetTurnTagData()
- {
- if (m_VecAgentAttributeStr.size() <= 4) return "";
- string str = m_VecAgentAttributeStr.at(4);
- CString sttr = str.c_str();
- return sttr;
- }
- int GetAgentIDInVec(CString AgentInfoStr)
- {
- int index = AgentInfoStr.Find('|');
- CString AgentIDInVecStr = AgentInfoStr.Mid(0, index);
- int AgentIDInVec = atoi(AgentIDInVecStr);
- return AgentIDInVec;
- }
- int GetAgentExternInVec(CString AgentInfoStr)
- {
- int index = AgentInfoStr.Find('|');
- int Len = AgentInfoStr.GetLength();
- CString StrLeft = AgentInfoStr.Mid(index + 1, Len);
- int index2 = StrLeft.Find('|');
- CString strExtern = StrLeft.Mid(0, index2);
- int AgentExternInVec = atoi(strExtern);
- return AgentExternInVec;
- }
- CString CServerDlg::GetConsultCallee()
- {
- if (m_VecAgentAttributeStr.size() < 5) return "";
- string str = m_VecAgentAttributeStr.at(3);
- return str.c_str();
- }
- CString CServerDlg::GetConsultCaller()
- {
- if (m_VecAgentAttributeStr.size() < 5) return "";
- string str = m_VecAgentAttributeStr.at(4);
- return str.c_str();
- }
- int CServerDlg::GetEndParmer()
- {
- if (m_VecAgentAttributeStr.size() < 4) return -1;
- string str = m_VecAgentAttributeStr.at(3);
- int endParmer = atoi(str.c_str());
- return endParmer;
- }
- string CServerDlg::CreateJson(int AgentID, string AgentState)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["AgentID"] = AgentID;
- person["AgentState"] = AgentState;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson2(string str, bool reslut)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Result"] = reslut;
- person["Type"] = str;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson2(string str, int waitCount)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["WaitCount"] = waitCount;
- person["Type"] = str;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson2(string str, bool b, int extenID)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = str;
- person["Result"] = b;
- person["AgentExten"] = extenID;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson2(string str, bool b, int extenID, std::string pwd)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = str;
- person["Result"] = b;
- person["AgentExten"] = extenID;
- person["ExtenPwd"] = pwd;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson3(string strtype, string str)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strtype;
- person["Result"] = str;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson15(string strtype, int ErrorCode)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strtype;
- person["Result"] = ErrorCode == 0 ? true : false;
- person["ErrorCode"] = ErrorCode;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- //by 8/20 县级12345中间件
- string CServerDlg::CreateJson16(string strType, bool b, int AgentID, int AgentState, int LineState, string Type)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["AgentID"] = AgentID;
- person["AgentState"] = AgentState;
- person["Result"] = b;
- person["State"] = LineState;
- person["TypeStr"] = Type;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- std::string CServerDlg::CreateJson17(string strType, bool b, string PduString)
- {
- vector<string> VecStringList;
- StringSplit(PduString, '|', VecStringList);
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- for (std::size_t i = 0; i < VecStringList.size(); i++)
- {
- if (i == 0)
- person["AgentSpeakCount"] = atoi(VecStringList.at(0).c_str());
- else if (i == 1)
- person["AgentOnlineCount"] = atoi(VecStringList.at(1).c_str());
- else if (i == 2)
- person["AgentReposeCount"] = atoi(VecStringList.at(2).c_str());
- else if (i == 3)
- person["WaiteCallCount"] = atoi(VecStringList.at(3).c_str());
- else if (i == 4)
- person["AgentFreeCount"] = atoi(VecStringList.at(4).c_str());
- else if (i == 5)
- person["AgentProcessingCount"] = atoi(VecStringList.at(5).c_str());
- else if (i == 6)
- person["AgentRingCount"] = atoi(VecStringList.at(6).c_str());
- else if (i == 7)
- person["AgentCallOutCount"] = atoi(VecStringList.at(7).c_str());
- else if (i == 8)
- person["TrunkCallInCount"] = atoi(VecStringList.at(8).c_str());
- }
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- std::string CServerDlg::CreateJson18(std::string strType, bool b, std::string SkillGroupDetail)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
-
- std::string str = SkillGroupDetail;
- std::vector<std::string> vec;
- boost::split(vec, str, boost::is_any_of("#"));
-
- for (std::size_t i = 0; i < vec.size(); ++i)
- {
- if (vec[i].empty())continue;
- std::vector<std::string> kv;
- boost::split(kv, vec[i], boost::is_any_of("|"));
- if (kv.size() < 2)continue;
- Json::Value groupCount;
- groupCount["Group"] = kv[0];
- groupCount["WaitCount"] = kv[1];
- person["data"].append(groupCount);
- }
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- std::string CServerDlg::DropCallJson(bool b, std::string CallerNum)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = "DropCall";
- person["Result"] = b;
- person["CallerNum"] = CallerNum;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- std::string CServerDlg::CreateJsonZmdExtStateList(std::string strType, bool b, std::string extStateList)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["ExtenList"] = extStateList;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson4(string strType, bool b)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson5(string strType, bool b, int a)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["State"] = a;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson6(string strType, bool b, string str, string calleeStr, long callID, int ActionId)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["Number"] = str;
- person["CalleeNumber"] = calleeStr;
- person["CallID"] = callID;
- person["ActionID"] = ActionId;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson6(string strType, bool b, string str, string calleeStr, long callID, int ActionId, string trunkId)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["Number"] = str;
- person["CalleeNumber"] = calleeStr;
- person["CallID"] = callID;
- person["ActionID"] = ActionId;
- person["TrunkNumber"] = trunkId;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson7(string strType, bool b, int AgentID, int AgentState, int state)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["AgentState"] = AgentState;
- person["State"] = state;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson7(string strType, bool b, int AgentID, int AgentState, int state, int PeerLineType, string strDirection)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["AgentState"] = AgentState;
- person["State"] = state;
- person["CallDirection"] = strDirection;
- person["PeerLineType"] = PeerLineType;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson8(string strType, bool b, int AgentID, string state)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["State"] = state;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson8(string strType, bool b, int AgentID, int ExtenID, string state, string ExtenState, string Caller, string Callee, string ManageAgentId, string Group)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["State"] = state;
- person["ExtenID"] = ExtenID;
- person["ExtenState"] = ExtenState;
- person["Caller"] = Caller;
- person["Callee"] = Callee;
- person["ManageAgentId"] = ManageAgentId;
- person["Group"] = Group;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson9(string strType, bool b, int AgentID, long CallID)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["CurrID"] = CallID;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson9(string strType, bool b, int AgentID, long CallID, string strDirection)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["CurrID"] = CallID;
- person["CallDirection"] = strDirection;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson9(string strType, bool b, int AgentID, long CallID, string strDirection, int ActionID)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["CurrID"] = CallID;
- person["ActionID"] = ActionID;
- person["CallDirection"] = strDirection;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson10(string strType, bool b, string RecPath, long CallId)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["RecPath"] = RecPath;
- person["CallID"] = CallId;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson11(string strType, bool b, string strAgentList)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value Header;
- Json::Value Parent;
- Json::Value Body;
- Header["Type"] = strType;
- Header["Result"] = true;
- vector<string> VecStringList;
- vector<string> VecStringItem;
- StringSplit(strAgentList, '|', VecStringList);
- for (auto i = VecStringList.begin(); i < VecStringList.end(); i++)
- {
- StringSplit(*i, ',', VecStringItem);
- if (VecStringItem.size() >= 4)
- {
- string AgentID = VecStringItem.at(0);
- string AgentExten = VecStringItem.at(1);
- string AgentState = VecStringItem.at(2);
- string AgentGroup = VecStringItem.at(3);
- Body["AgentID"] = AgentID;
- Body["AgentExten"] = AgentExten;
- Body["State"] = AgentState;
- Body["Group"] = AgentGroup;
- Parent.append(Body);
- }
- }
- Header["AgentList"] = Parent;
- root.append(Header);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson12(string strType, bool b, string PduString)
- {
- vector<string> VecStringList;
- StringSplit(PduString, '|', VecStringList);
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentSpeakCount"] = atoi(VecStringList.at(0).c_str());
- person["AgentOnlineCount"] = atoi(VecStringList.at(1).c_str());
- person["AgentReposeCount"] = atoi(VecStringList.at(2).c_str());
- person["WaiteCallCount"] = atoi(VecStringList.at(3).c_str());
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson13(string strType, bool b, const CLineStateUpdateInfo& LineStateUpdateInfo)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- std::string strTemp = "";
- CString cstrTemp = "";
- person["Type"] = strType;
- person["Result"] = b;
- person["ExternID"] = LineStateUpdateInfo.ExternID;
- person["Externstate"] = LineStateUpdateInfo.Externstate;
- person["CallIDDD"] = LineStateUpdateInfo.CallIDDD;
- person["AgentIDDDD"] = LineStateUpdateInfo.AgentIDDDD;
- person["caller"] = LineStateUpdateInfo.caller;
- person["callee"] = LineStateUpdateInfo.callee;
- person["AssoData"] = LineStateUpdateInfo.AssoData;
- person["Line"] = LineStateUpdateInfo.Line;
- person["InfoEx"] = LineStateUpdateInfo.InfoEx;
- person["FinalExt"] = LineStateUpdateInfo.FinalExt;
- person["OpType"] = LineStateUpdateInfo.OpType;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- string CServerDlg::CreateJson14(string strType, bool b, int AgentID, int ExternID, int AgentState, int ExtenState)
- {
- Json::Value root;
- Json::FastWriter writer;
- Json::Value person;
- person["Type"] = strType;
- person["Result"] = b;
- person["AgentID"] = AgentID;
- person["ExternID"] = ExternID;
- person["AgentState"] = AgentState;
- person["ExternState"] = ExtenState;
- root.append(person);
- string json_file = writer.write(root);
- return json_file;
- }
- bool CServerDlg::IsAvailableConID(int CondId)
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- if (m_agentMap.get<hdl_id>().find(CondId) != m_agentMap.get<hdl_id>().end()) return true;
- return false;
- }
- void CServerDlg::OnAcdmsgRecmsg(CPduEntity * Pduenity)
- {
- //CPduEntity* Pduenity = a_pPduEntity;
- PDU_CMD_TYPE Type = Pduenity->GetCmdType();
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_TRACE, "OnAcdmsgRecmsg.PDU_TYPE= %d ", Type);
- switch (Type)
- {
- case PDU_CMD_DEV_ONLINE_LIST:
- //if (CNetworkClient::GetInstance().isAcdConnected() && CNetworkClient::GetInstance().isCtiConnected()) {
- // __recovLogin(); // 恢复签入
- //} 2023-11-1 屏蔽,不使用恢复签入
- break;
- case PDU_CMD_LISTEN:
- break;
- case PDU_CMD_AGENT_DETAIL:
- {
- bool bSuccess = Pduenity->GetDataBool(0);
- int ConID = Pduenity->GetDataInt(1);
- string strJsonRet = CreateJson17("GetAgentDetail", bSuccess, Pduenity->GetDataString(2).operator LPCSTR());
- if (ConID > 0)
- {
- std::unique_lock<std::mutex> lock(m_agentDetailConIDLock);
- auto it = m_agentDetailConIDs.find(ConID);
- if (it == m_agentDetailConIDs.end()) break;
- auto conID = it->second;
- lock.unlock();
- if (!SendMessageToClient(strJsonRet, conID))
- m_agentDetailConIDs.erase(it);
- }
- else
- {
- std::unique_lock<std::mutex> lock(m_agentDetailConIDLock);
- auto it = m_agentDetailConIDs.begin();
- while (it!=m_agentDetailConIDs.end())
- {
- if (!SendMessageToClient(strJsonRet, it->second))
- it = m_agentDetailConIDs.erase(it);
- else
- ++it;
- }
- }
- break;
- }
- case PDU_CMD_MONITOR_START: // ych 2018.6.4 商丘监控添加命令
- {
- bool bSuccess = Pduenity->GetDataBool(0);
- int ConID = Pduenity->GetDataInt(1);
- string strJsonRet = CreateJson12("Monitor", bSuccess, Pduenity->GetDataString(2).operator LPCSTR());
- SendMessageToClient(strJsonRet, ConID);
- break;
- }
- case PDU_CMD_SUBSCRIBE_START: // ych 2018.6.4 商丘订阅添加命令
- {
- bool bSuccess = Pduenity->GetDataBool(0);
- int ConID = Pduenity->GetDataInt(1);
- string strAgentList = Pduenity->GetDataString(2).operator LPCSTR();
- vector<string> VecStringList;
- vector<string> VecStringItem;
- StringSplit(strAgentList, '|', VecStringList);
- for (auto i = VecStringList.begin(); i < VecStringList.end(); i++)
- {
- StringSplit(*i, ',', VecStringItem);
- if (VecStringItem.size() < 4)
- continue;
- string AgentID = VecStringItem.at(0);
- string AgentExten = VecStringItem.at(1);
- string AgentState = VecStringItem.at(2);
- string AssoExtState = VecStringItem.at(3);
- string strSendAgent = CreateJson14("AgentStateMonitor", bSuccess, atoi(AgentID.c_str()), atoi(AgentExten.c_str()), atoi(AgentState.c_str()), atoi(AssoExtState.c_str())); // ych 2018.11.27
-
- SendMessageToClient(strSendAgent, ConID);
- }
- break;
- }
- case PDU_CMD_AGENT_LOGIN: //签入
- {
- bool IsSuccess = Pduenity->GetDataBool(0);
- int ErrorCode = Pduenity->GetDataUInt(6);
- char* StrReturn = TranslateErrorCode(ErrorCode);
- int t_agent_id = Pduenity->GetDataUInt(2);
- ////2022-09-06
- //int recov = Pduenity->GetDataUInt(8);
- //if (recov == 1) { // 如果是恢复签入,不进行回复
- // return;
- //}
- long conID = 0;
-
- {
- std::unique_lock<std::mutex>lock(m_MapLoginAgentConIDLock);
- auto it = m_MapLoginAgentConID.find(t_agent_id);
- if (it != m_MapLoginAgentConID.end())
- {
- conID = it->second;
- m_MapLoginAgentConID.erase(it);
- }
- else
- {
- break;
- }
- }
-
- if (IsSuccess)
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_id>().find(t_agent_id);
- if (it != m_agentMap.get<agent_id>().end())
- {
- int hdlId = conID;
- int old_hdlId = it->HdlID;
- if (hdlId != old_hdlId)
- {
- //logout
- std::string strSend = CreateJson2("Logout", true);
- SendMessageToClient(strSend, old_hdlId);
- }
- m_agentMap.get<agent_id>().erase(it);
- }
- m_agentMap.insert(Agent(t_agent_id, Pduenity->GetDataUInt(1), conID));
-
- std::string strSend = CreateJson2("Login", true);
- SendMessageToClient(strSend, conID);
- }
- else
- {
- std::string strSend = CreateJson3("Login", StrReturn);
- SendMessageToClient(strSend, conID);
- }
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "Server->Agent[%d],签入[%s] ", t_agent_id, IsSuccess ? "成功" : "失败");
- break;
- }
- case PDU_CMD_AGENT_LOGOUT: //签出
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_id>().find(t_agent_id);
- if (it != m_agentMap.get<agent_id>().end())
- {
- long conID = it->HdlID;
- std::string strSend;
- if (IsSuccess)
- {
- strSend = CreateJson2("Logout", true);
- m_agentMap.get<agent_id>().erase(it);
- }
- else
- {
- strSend = CreateJson2("Logout", false);
- }
- SendMessageToClient(strSend, conID);
- }
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "Server->Agent[%d],签出[%s] ", t_agent_id, IsSuccess ? "成功" : "失败");
- break;
- }
- case PDU_CMD_AGENT_SETSTATE: //设置座席状态
- {
- bool IsSuccess = Pduenity->GetDataBool(0);
- int AgentState = Pduenity->GetDataUInt(3);
- int t_agent_id = Pduenity->GetDataUInt(2);
- std::string strSend = CreateJson5("SetState", IsSuccess, AgentState);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_RESET: //重置
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- SendMessageToClientByAgentId("RESET", t_agent_id);
- //SendMessageToClient("RESET",G_ConID);
- break;
- }
- case PDU_CMD_AGENT_MAKECALL: // 外呼 PDU_CMD_CTI_DEV_CALL 设备外呼
- {
- int currentAgentID = Pduenity->GetDataUInt(2);
-
- #ifndef ANTUMIDDLEWARE
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("MakeCall", IsSuccess);
- #else
- int ErrorCode = Pduenity->GetDataInt(0);
- std::string strSend = CreateJson15("MakeCall", ErrorCode);
- #endif
- SendMessageToClientByAgentId(strSend, currentAgentID);
- //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, "{OnMymsgRecmsg},外呼返回错误码=%d", ErrorCode);
- break;
- }
- case PDU_CMD_AGENT_ANSWER: //应答
- {
- bool IsSuccess = Pduenity->GetDataBool(0);
- int t_agent_id = Pduenity->GetDataUInt(2);
- std::string strSend = CreateJson2("Answer", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_HANGUP: //挂机
-
- case PDU_CMD_AGENT_TURN_TO_IVR:
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- CString CallerNum = Pduenity->GetDataString(3);
- std::string strSend;
- //strSend = CreateJson2("DropCall", IsSuccess); // 2021-12-31
- if (CallerNum.IsEmpty() || CallerNum == "")
- strSend = DropCallJson(IsSuccess, "");
- else
- strSend = DropCallJson(IsSuccess, CallerNum.GetBuffer(0));
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_HOLD: //保持
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Hold", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_TAKEBACK: //接回
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Retrieve", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_MUTE: // 静音
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Mute", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- }
- break;
- case PDU_CMD_AGENT_TRANSTALK: //转移
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Transfer", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_THREETALK: //Meeting三方通话
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- CString callerNum = Pduenity->GetDataString(4); // 主叫号码/呼入的号码
- CString tagNum = Pduenity->GetDataString(3); // 拉去的第三方号码
- std::string strSend = CreateJson2("Meeting", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- if (m_IsVideo)
- {
- std::regex pattern("^[0-9]{1,}$");
- if (std::regex_match(callerNum.GetBuffer(0), pattern))
- {
- callerNum.ReleaseBuffer();
- SendMessageToClientByExtenId(strSend, _ttoi(callerNum));
- }
- if (std::regex_match(tagNum.GetBuffer(0), pattern))
- {
- tagNum.ReleaseBuffer();
- SendMessageToClientByExtenId(strSend, _ttoi(tagNum));
- }
- }
- break;
- }
- case PDU_CMD_AGENT_THREETALK_TAKEBACK:
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("MeetingTakeBack", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_MONI_LISTEN: //班长 监听
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Listen", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_MONI_INSERT: //班长 强插
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Insert", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_MONI_INTERCEPT: //班长 强截
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Intercept", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_MONI_CUT: //班长 强拆
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Cut", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_MONI_FORCE_LOGOUT: // 强制坐席签出
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("ForceLogOut", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- if (IsSuccess)//通知被控制座席
- {
- std::string t_trg_strSend = CreateJson5("MotorLogOut", IsSuccess, Pduenity->GetDataUInt(5));
- int t_trg_agent_id = Pduenity->GetDataUInt(4);
- SendMessageToClientByAgentId(t_trg_strSend, t_trg_agent_id,true);
- }
- break;
- }
- case PDU_CMD_AGENT_MONI_FORCE_STATE: //班长 强制控制座席状态
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("ForceState", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- if (IsSuccess)//通知被控制座席
- {
- std::string t_trg_strSend = CreateJson5("MotorSetState", IsSuccess, Pduenity->GetDataUInt(5));
- int t_trg_agent_id = Pduenity->GetDataUInt(4);
- SendMessageToClientByAgentId(t_trg_strSend, t_trg_agent_id);
- }
- break;
- }
- case PDU_CMD_AGENT_MONI_REPLACE: //班长 代接
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Replace", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_ACD_SUBMIT_DATA: //座席状态发生变化
- {
- std::string State = Pduenity->GetDataString(3);
- int AgentID = Pduenity->GetDataUInt(0);
- int ExtenID = Pduenity->GetDataUInt(1);
- std::string Group = Pduenity->GetDataString(6);
- int t_sub_AgentID = Pduenity->GetDataUInt(5);
- int DataType = Pduenity->GetDataUInt(2);
- std::string state;
- // 2023-03-24 State超过511通过rcf获取
- if (State.length() >= 511) {
- if (getSubmitData(AgentID, DataType, state)) {
- State=state;
- }
- }
-
- std::string strSend;
- if (DataType == 0) //座席状态
- {
- std::string t_extend_state = "";
- std::string t_agent_state = "";
- std::string t_caller = "";
- std::string t_callee = "";
- std::string t_m_agent = "";
- vector<string> VecStringList;
- StringSplit(State, '|', VecStringList);
- if (VecStringList.size() > 4)
- {
- t_agent_state = VecStringList.at(0);
- t_extend_state = VecStringList.at(1);
- t_caller = VecStringList.at(2);
- t_callee = VecStringList.at(3);
- t_m_agent = VecStringList.at(4);
- strSend = CreateJson8("AgentState", true, AgentID, ExtenID, t_agent_state, t_extend_state, t_caller, t_callee, t_m_agent, Group);
- }
- else
- {
- t_agent_state = State;
- strSend = CreateJson8("AgentState", true, AgentID, t_agent_state);
- }
- }
- else if (DataType == 1) //线路状态
- {
- strSend = CreateJson8("LineState", true, AgentID, State);
- }
- //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, "Server->Agent : 通知座席状态转发至坐席 [%s]", strSend);
- if (t_sub_AgentID == 0) // ych 2018.6.5 依据订阅者ID是否有效决定是否群发
- {
- auto it = m_SubScribed_ConID.begin();
- while (it!= m_SubScribed_ConID.end())
- {
- if (!SendMessageToClient(strSend, it->first))
- it = m_SubScribed_ConID.erase(it);
- else
- ++it;
- }
- }
- else
- {
- bool bOK = false;
- auto it = m_SubScribed_ConID.begin();
- while (it != m_SubScribed_ConID.end())
- {
- if (it->second == t_sub_AgentID)
- {
- if (SendMessageToClient(strSend, it->first))
- {
- bOK = true;
- break;
- }
- }
- ++it;
- }
- if(!bOK)
- SendMessageToClientByAgentId(strSend, t_sub_AgentID);
- }
- break;
- }
- case PDU_CMD_CTI_LINE_STATE: //线路状态
- {
- OnLineStateChange(Pduenity);
- int Exten = Pduenity->GetDataUInt(0);
- int AgentID = Pduenity->GetDataUInt(3);
- int AgentState = Pduenity->GetDataUInt(12);
- int ExtenState = Pduenity->GetDataUInt(1);
- //string m_strDropcall = Pduenity->GetDataString(14);
- //string strSendAgent = CreateJson7("AgentStateAgent", true, AgentID, AgentState, ExtenState);
- //SendMessageToClientByAgentId(strSendAgent, AgentID); // 2021-11-09 屏蔽,
- break;
- }
- case PDU_CMD_ACD_AGENT_STATE:
- {
- int Exten = Pduenity->GetDataUInt(0);
- int AgentID = Pduenity->GetDataUInt(1);
- int AgentState = Pduenity->GetDataUInt(2);
- int ExtenState = Pduenity->GetDataUInt(3);
- string strSendAgent = CreateJson7("AgentStateAgent", true, AgentID, AgentState, ExtenState);
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- strSendAgent = CreateJson14("AgentStateMonitor", true, AgentID, Exten, AgentState, ExtenState); // ych 2018.6.6
-
- auto it = m_ConIdVec.begin();
- while (it != m_ConIdVec.end())
- {
- if (!SendMessageToClient(strSendAgent, it->second))
- it = m_ConIdVec.erase(it);
- else
- ++it;
- }
- }
- break;
- case PDU_CMD_CTI_RECORD:
- {
- int RecExtern = Pduenity->GetDataUInt(0);
- long CallID = Pduenity->GetDataULong(1);
- CString RecPath = Pduenity->GetDataString(2);
- std::string strSendAgent = CreateJson10("RecordPath", true, RecPath.GetBuffer(0), CallID);
- RecPath.ReleaseBuffer();
- SendMessageToClientByExtenId(strSendAgent, RecExtern);
- break;
- }
- case PDU_CMD_IVR_WAITER_COUNT: // 排队人数
- {
- int count = Pduenity->GetDataUInt(0);
- std::string strSend = CreateJson2("WaitCount", count);
- SendMessageToAllAgentClient(strSend);
- break;
- }
- case PDU_CMD_AGENT_GET_AGENTLIST:
- {
- //??2018.5.23 NotFound
- //CString AgentListStr = Pduenity->GetDataString(2);
- int t_agent_id = Pduenity->GetDataUInt(1);
- std::string agentList;
- CString AgentListStr;
- if (getAgentList(t_agent_id, agentList)) // 2022-01-20 从rcfserver获取,防止坐席太多,造成字符串超过限制
- AgentListStr.Format("%s", agentList.c_str());
- else
- AgentListStr = Pduenity->GetDataString(2);
- std::string strSendAgent = CreateJson11("GetAgentList", true, AgentListStr.GetBuffer(0));
- AgentListStr.ReleaseBuffer();
- SendMessageToClientByAgentId(strSendAgent, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_CONSULTATION_CALL:
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- std::string strSend = CreateJson2("Consult", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_CONFIRM_TRANSFER:
- {
- int t_agent_id = Pduenity->GetDataUInt(2);
- bool IsSuccess = Pduenity->GetDataBool(0);
- int EndParmer = Pduenity->GetDataUInt(3);
- std::string strSend = CreateJson5("ConfirmTransfer", IsSuccess, EndParmer);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- break;
- }
- case PDU_CMD_AGENT_VIDEO_REQ_EXTEN: // 请求注册视频分机号
- {
- bool ret = Pduenity->GetDataBool(0);
- uint32_t agentId = Pduenity->GetDataUInt(1);
- uint32_t extenId = Pduenity->GetDataUInt(2);
- CString pwd = Pduenity->GetDataString(3);
- long conID = 0;
- {
- std::unique_lock<std::mutex>lock(m_MapLoginAgentConIDLock);
- auto it = m_MapLoginAgentConID.find(agentId);
- if (it != m_MapLoginAgentConID.end())
- {
- conID = it->second;
- m_MapLoginAgentConID.erase(it);
- }
- else
- {
- break;
- }
- }
- if (ret)
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_id>().find(agentId);
- if (it != m_agentMap.get<agent_id>().end())
- m_agentMap.get<agent_id>().erase(it);
- Agent agent(agentId, extenId, conID);
- m_agentMap.insert(agent);
- }
- std::string strSend = CreateJson2("VideoReqExten", ret, extenId, pwd.GetBuffer(0));
- pwd.ReleaseBuffer();
- SendMessageToClient(strSend, conID);
- }
- break;
- case PDU_CMD_AGENT_VIDEO_REQ_AGENT: // 请求空闲坐席
- {
- bool ret = Pduenity->GetDataBool(0);
- uint32_t agentId = Pduenity->GetDataUInt(1);
- uint32_t extenId = Pduenity->GetDataUInt(2);
- std::string strSend = CreateJson2("VideoReqIdeAgent", ret, extenId);
- SendMessageToClientByAgentId(strSend, agentId);
- }
- break;
- case PDU_CMD_AGENT_VIDEO_RECOVER_EXTEN: // 释放请求的视频分机号
- {
- uint32_t agentId = Pduenity->GetDataUInt(1);
- std::string strSend = CreateJson2("VideoDesExten", true);
- SendMessageToClientByAgentId(strSend, agentId);
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_id>().find(agentId);
- if (it != m_agentMap.get<agent_id>().end())
- m_agentMap.get<agent_id>().erase(it);
- }
- }
- break;
- case PDU_CMD_AGENT_SKILL_GROUP_WAIT_COUNT:
- {
- CString sCount = Pduenity->GetDataString(0);
- std::string strSend = CreateJson18("SkillGroupWaitCount", true, sCount.GetBuffer(0));
- SendMessageToAllAgentClient(strSend);
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "ACD->HttpServer SkillGroupWaitCount[%s] ", sCount);
- }
- break;
- case PDU_CMD_AGENT_SEND_DTMF:
- {
- bool IsSuccess = Pduenity->GetDataBool(0);
- int t_agent_id = Pduenity->GetDataUInt(2);
- std::string strSend = CreateJson2("SendDtmf", IsSuccess);
- SendMessageToClientByAgentId(strSend, t_agent_id);
- }
- break;
- case PDU_CMD_EXTEN_STATE_LIST_ZMD: // 驻马店专用, 获取分机状态
- {
- int t_agent_id = Pduenity->GetDataUInt(1);
- std::string extList;
- bool ret = getZmdExtenStateList(extList);
- std::string strSendAgent = CreateJsonZmdExtStateList("GetExtenList", ret, extList);
- SendMessageToClientByAgentId(strSendAgent, t_agent_id);
- }
- break;
- default:
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_WARNING, "OnMymsgRecmsg,UnSupportPduCmd=%d", Type);
- }
- }
- void CServerDlg::OnLineStateChange(CPduEntity* Pduenity)
- {
- CLineStateUpdateInfo LineStateUpdateInfo;
- memset(&LineStateUpdateInfo, 0, sizeof(CLineStateUpdateInfo));
- LineStateUpdateInfo.ExternID = Pduenity->GetDataUInt(0);
- LineStateUpdateInfo.Externstate = Pduenity->GetDataUInt(1);
- LineStateUpdateInfo.CallIDDD = Pduenity->GetDataULong(2);
- LineStateUpdateInfo.ActionID = Pduenity->GetDataInt(11);
- LineStateUpdateInfo.AgentIDDDD = Pduenity->GetDataUInt(3);
- CString strCaller = Pduenity->GetDataString(4);
- CString strCallee = Pduenity->GetDataString(5);
- CString strAssoData = Pduenity->GetDataString(6);
- LineStateUpdateInfo.Line = Pduenity->GetDataUInt(7);
- LineStateUpdateInfo.InfoEx = Pduenity->GetDataUInt(8);
- LineStateUpdateInfo.FinalExt = Pduenity->GetDataUInt(9);
- LineStateUpdateInfo.OpType = Pduenity->GetDataUInt(10);
- LineStateUpdateInfo.Dropcall = Pduenity->GetDataUInt(14);
- //int AgentState = Pduenity->GetDataUInt(12);
- char TempChar[512] = { 0 };
- memcpy(TempChar, strCaller, strCaller.GetLength());
- LineStateUpdateInfo.caller = std::string(TempChar);
- memset(TempChar, 0, 512);
- memcpy(TempChar, strCallee, strCallee.GetLength());
- LineStateUpdateInfo.callee = std::string(TempChar);
- memset(TempChar, 0, 512);
- memcpy(TempChar, strAssoData, strAssoData.GetLength());
- LineStateUpdateInfo.AssoData = std::string(TempChar);
- int LineState = Pduenity->GetDataUInt(1);
- int AgentID = Pduenity->GetDataUInt(3);
- int AgentState = Pduenity->GetDataUInt(12);
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "座席号=%d, 座席状态=%d, 线路状态=%d, caller=%s, callee=%s",
- AgentID, AgentState, LineStateUpdateInfo.Externstate, LineStateUpdateInfo.caller.c_str(), LineStateUpdateInfo.callee.c_str());
- std::string strSendAgent = "";
- switch (Pduenity->GetDataUInt(1))
- {
- case INNER_STATE_FREE: //挂机
- {
- strSendAgent = CreateJson7("LineStateAgent", true, AgentID, AgentState, LineState);
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_TRACE, " 线路状态: %s ", strSendAgent.c_str());
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- //strSendAgent = CreateJson16("dropCall", true, AgentID, AgentState, LineState, "dropcall"); // by 8/20
- strSendAgent = DropCallJson(true, ""); // 2021-12-22 代替上面一行,如有问题再更换回去
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_TRACE, " 线路状态: %s ", strSendAgent.c_str());
- strSendAgent = CreateJson13("LineStateMonitor", true, LineStateUpdateInfo); // ych 2018.6.6
- auto it = m_ConIdVec.begin();
- while (it != m_ConIdVec.end())
- {
- SendMessageToClient(strSendAgent, it->second);
- ++it;
- }
- }
- break;
- case INNER_STATE_TALKING: //通话中
- {
- //电话接通后,发送CallID
- unsigned long CallID = Pduenity->GetDataULong(2);
- int PeerLineType = Pduenity->GetDataUInt(7); //0 -> 内线,1 -> 外线
- if (CallID == 0)
- {
- return;
- }
- // 2020-01-13 移动到下面,添加呼入呼出方向字段
- /*strSendAgent = CreateJson9("CallID", true, AgentID, CallID);
- SendMessageToClient(strSendAgent.c_str(), AgentConId);*/
- std::string strDirection;
- CString t_ExternID;
- int t_eid = Pduenity->GetDataUInt(0);
- t_ExternID.Format(_T("%d"), t_eid);
- CString t_Caller = Pduenity->GetDataString(4);
- CString t_Callee = Pduenity->GetDataString(5);
- if (t_ExternID == t_Caller)
- {
- strDirection = "out";
- }
- else
- {
- strDirection = "in";
- }
- // 2020-01-13 移添加呼入呼出方向字段,代替上面发送的callid, 2021-03-22 添加actionid
- strSendAgent = CreateJson9("CallID", true, AgentID, CallID, strDirection, LineStateUpdateInfo.ActionID);
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- strSendAgent = CreateJson7("LineStateAgent", true, AgentID, AgentState, LineState, PeerLineType, strDirection);
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- strSendAgent = CreateJson13("LineStateMonitor", true, LineStateUpdateInfo); // ych 2018.6.6
- auto it = m_ConIdVec.begin();
- while (it != m_ConIdVec.end())
- {
- SendMessageToClient(strSendAgent, it->second);
- ++it;
- }
- }
- break;
- case INNER_STATE_ALERTING: //来电振铃
- {
- unsigned long CallID = Pduenity->GetDataULong(2);
- int TargetAgentID = Pduenity->GetDataUInt(3);
- CString outNumber = Pduenity->GetDataString(4);
- CString calleeNumber = Pduenity->GetDataString(5);
- CString trunkNumber = Pduenity->GetDataString(13); // 7.29 中继号
- int ActionID = Pduenity->GetDataInt(11);
- // int ConID;
- // m_MapAgentConID.Lookup(TargetAgentID,ConID);
- // std::string strSend = CreateJson6("Incoming", true, outNumber.GetBuffer(0), calleeNumber.GetBuffer(0), CallID, ActionID);
- std::string strSend = CreateJson6("Incoming", true, outNumber.GetBuffer(0), calleeNumber.GetBuffer(0), CallID, ActionID, trunkNumber.GetBuffer(0));
- outNumber.ReleaseBuffer();
- calleeNumber.ReleaseBuffer();
- trunkNumber.ReleaseBuffer();
- SendMessageToClientByAgentId(strSend, AgentID);
- strSendAgent = CreateJson7("LineStateAgent", true, AgentID, AgentState, LineState);
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- strSendAgent = CreateJson13("LineStateMonitor", true, LineStateUpdateInfo);// ych 2018.6.6
- auto it = m_ConIdVec.begin();
- while (it != m_ConIdVec.end())
- {
- SendMessageToClient(strSendAgent, it->second);
- ++it;
- }
- }
- break;
- case INNER_STATE_RING_BACK: //回铃
- {
- strSendAgent = CreateJson7("LineStateAgent", true, AgentID, AgentState, LineState);
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- strSendAgent = CreateJson13("LineStateMonitor", true, LineStateUpdateInfo);// ych 2018.6.6
- auto it = m_ConIdVec.begin();
- while (it != m_ConIdVec.end())
- {
- SendMessageToClient(strSendAgent, it->second);
- ++it;
- }
- }
- break;
- case INNER_STATE_INIT:
- case INNER_STATE_DIALING:
- case INNER_STATE_PLAY_BUSYTONE:
- case INNER_STATE_REMOVE:
- case INNER_STATE_HELD:
- {
- strSendAgent = CreateJson7("LineStateAgent", true, AgentID, AgentState, LineState);
- SendMessageToClientByAgentId(strSendAgent, AgentID);
- strSendAgent = CreateJson13("LineStateMonitor", true, LineStateUpdateInfo);// ych 2018.6.6
- auto it = m_ConIdVec.begin();
- while (it != m_ConIdVec.end())
- {
- SendMessageToClient(strSendAgent, it->second);
- ++it;
- }
- }
- break;
- default:
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_WARNING, "OnLineStateChange.AgentID= %d,AgentState=%d,UnKnownLineState=%d ", AgentID, AgentState, LineState);
- }
- }
- void CServerDlg::SendMessageToClientByAgentId(std::string MsgStr, int AgentId, bool isDelAgent)
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_id>().find(AgentId);
- if (it == m_agentMap.get<agent_id>().end()) { return; }
- auto conID = it->HdlID;
- bool ret = m_Server.sendMsg(conID, MsgStr);
- if (!ret)
- {
- CString strShow;
- strShow.Format("Server->Agent : 执行结果转发至坐席 [%d] 失败 ConId = %d ; %s", AgentId, it->HdlID, MsgStr.c_str()); // 2020-1-3 打印发送内容
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- m_agentMap.get<agent_id>().erase(it);
- return;
- }
- if (isDelAgent) {
- m_agentMap.get<agent_id>().erase(it);
- }
- CString strShow;
- strShow.Format("Server->Agent : 执行结果已转发至坐席 [%d] ConId = %d ; %s", AgentId, it->HdlID, MsgStr.c_str()); // 2020-1-3 打印发送内容
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- }
- bool CServerDlg::SendMessageToClientByExtenId(std::string MsgStr, int ExtenId)
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_exten>().find(ExtenId);
- if (it == m_agentMap.get<agent_exten>().end()) { return false; }
- auto conID = it->HdlID;
- bool ret = m_Server.sendMsg(conID, MsgStr);
- if (!ret)
- {
- CString strShow;
- strShow.Format("Server->Agent : 执行结果转发至坐席 [%d] 失败 ConId = %d ; %s", it->AgentID, it->HdlID, MsgStr.c_str()); // 2020-1-3 打印发送内容
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- m_agentMap.get<agent_exten>().erase(it);
- return false;
- }
- CString strShow;
- strShow.Format("Server->Agent : 执行结果已转发至坐席 [%d] ConId = %d ; %s", it->AgentID, it->HdlID, MsgStr.c_str()); // 2020-1-3 打印发送内容
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- return true;
- }
- void CServerDlg::SendMessageToClientByHdlId(std::string MsgStr, int CondId)
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<hdl_id>().find(CondId);
- if (it == m_agentMap.get<hdl_id>().end()) { return; }
- bool ret = m_Server.sendMsg(CondId, MsgStr);
- if (!ret)
- {
- CString strShow;
- strShow.Format("Server->Agent : 执行结果转发至坐席 [%d] 失败 ConId = %d ; %s", it->AgentID, it->HdlID, MsgStr.c_str()); // 2020-1-3 打印发送内容
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- m_agentMap.get<hdl_id>().erase(it);
- return;
- }
- CString strShow;
- strShow.Format("Server->Agent : 执行结果已转发至坐席 [%d] ConId = %d ; %s", it->AgentID, it->HdlID, MsgStr.c_str()); // 2020-1-3 打印发送内容
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- }
- void CServerDlg::SendMessageToAllAgentClient(std::string MsgStr)
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.begin();
- while (it != m_agentMap.end())
- {
- if (m_Server.sendMsg(it->HdlID, MsgStr))
- ++it;
- else
- it = m_agentMap.erase(it);
- }
- }
- bool CServerDlg::SendMessageToClient(std::string MsgStr, long ConId)
- {
- return m_Server.sendMsg(ConId, MsgStr);
- }
- void CServerDlg::__recvMsgFun(const long conID, const std::string &msg, const std::string &ip)
- {
- int Curr_ConID = conID;
- std::string ch = JsonParser(msg);
- if (ch == "")return;
- StringSplit(ch, '@', m_VecAgentAttributeStr);
- if (m_VecAgentAttributeStr.empty())
- {
- return;
- }
- char* TypeStr = GetType();
- bool t_isAcdConnect = CNetworkClient::GetInstance().isAcdConnected();
- if (0 == strcmp(TypeStr, "Heart")) //心跳
- {
- string strSend = CreateJson4("Heart", true);
- SendMessageToClient(strSend, Curr_ConID);
- if (t_isAcdConnect == false)
- {
- string strSend = CreateJson4("AcdConnectNotify", false);
- SendMessageToClient(strSend, Curr_ConID);
- CString strShow;
- strShow.Format("Agent->Server : 收到【 %s 】命令 AgentID=%d Exten=%d ConID =%d ", TypeStr, GetAgentID(), GetAgentExten(), Curr_ConID);
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- ; ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_TRACE, "%s", ch.c_str());
- }
- return ;
- }
- if (t_isAcdConnect == false) // 2018.6.11
- {
- string strSend = CreateJson4("AcdConnectNotify", false);
- SendMessageToClient(strSend, Curr_ConID);
- CString strShow;
- strShow.Format("Agent->Server : 收到【 %s 】命令 AgentID=%d Exten=%d ConID =%d ", TypeStr, GetAgentID(), GetAgentExten(), Curr_ConID);
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_TRACE, "%s", ch.c_str());
- //m_agentDetailConIDs.clear();
- //m_agentMap.clear();
- //m_SubScribed_ConID.clear();
- //m_ConIdVec.clear();
- //m_MapLoginAgentConID.clear();
- return ;
- }
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_TRACE, "收到消息 %s", msg.c_str());
- if (0 == strcmp(TypeStr, "Monitor")) // ych 2018.6.7
- {
- CString strShow;
- strShow.Format("Agent->Server : 收到【 %s 】命令 ConID =%d", TypeStr, Curr_ConID);
- CPduEntity cmd(PDU_CMD_MONITOR_START);
- cmd.SetDataInt(1, Curr_ConID);
- CNetworkClient::GetInstance().send2ACD(&cmd);
- return ;
- }
- if (0 == strcmp(TypeStr, "SubScribeMonitor")) // ych 2018.6.7
- {
- CPduEntity cmd(PDU_CMD_SUBSCRIBE_START);
- cmd.SetDataInt(1, Curr_ConID);
- CNetworkClient::GetInstance().send2ACD(&cmd);
- // ych 2018.6.6 监控订阅保存连接ID
- m_ConIdVec[Curr_ConID] = Curr_ConID;
-
- std::string strJson = CreateJson2("SubScribeMonitor", true);
- SendMessageToClient(strJson, Curr_ConID);
- return ;
- }
- if (0 == strcmp(TypeStr, "SubScribeMonitorCancel")) // ych 2018.6.7 取消监控订阅
- {
- std::string strJson = CreateJson2("SubScribeMonitorCancel", true);
- SendMessageToClient(strJson, Curr_ConID);
- auto it = m_ConIdVec.find(Curr_ConID);
- if (it != m_ConIdVec.end())
- m_ConIdVec.erase(it);
- return ;
- }
- CString strShow;
- strShow.Format("Agent->Server : 收到【 %s 】命令 AgentID=%d Exten=%d ConID =%d IP[%s]", TypeStr, GetAgentID(), GetAgentExten(), Curr_ConID, ip);
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, strShow.GetBuffer(0));
- strShow.ReleaseBuffer();
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_TRACE, "%s",ch.c_str());
- if (0 == strcmp(TypeStr, "SubScribe")) // 订阅座席状态
- {
- CPduEntity cmd(PDU_CMD_AGENT_SUBSCRIBE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataInt(3, GetSubType()); // 0坐席状态1分机状态2空闲列表3忙列表4来电列表5通话列表6排队数量7技能媒体
- cmd.SetDataUInt(4, GetSubParmer()); //参数 既座席工号
- bool result = CNetworkClient::GetInstance().send2ACD(&cmd);
- string strSend = CreateJson4("SubScribe", result);
- SendMessageToClient(strSend, Curr_ConID);
- m_SubScribed_ConID[Curr_ConID] = GetAgentID();
- }
- if (0 == strcmp(TypeStr, "SubScribeCancel")) //取消订阅
- {
- CPduEntity cmd(PDU_CMD_AGENT_CANCEL_SUBSCRIBE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataInt(3, GetSubType()); // 0坐席状态1分机状态2空闲列表3忙列表4来电列表5通话列表6排队数量7技能媒体
- cmd.SetDataUInt(4, GetSubParmer()); //参数 既座席工号
- bool result = CNetworkClient::GetInstance().send2ACD(&cmd);
- string strSend = CreateJson4("SubScribeCancel", result);
- SendMessageToClient(strSend, Curr_ConID);
- auto it = m_SubScribed_ConID.find(Curr_ConID);
- if (it != m_SubScribed_ConID.end())
- m_SubScribed_ConID.erase(Curr_ConID);
- }
- if (0 == strcmp(TypeStr, "VideoReqExten")) // 请求可以注册的分机号
- {
- m_IsVideo = true;
-
- CPduEntity cmd(PDU_CMD_AGENT_VIDEO_REQ_EXTEN);
- cmd.SetDataUInt(1, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- {
- std::unique_lock<std::mutex>lock(m_MapLoginAgentConIDLock);
- m_MapLoginAgentConID[GetAgentID()] = Curr_ConID; // 保存连接标识
- }
- }
- if (0 == strcmp(TypeStr, "VideoReqIdeAgent")) // 请求空闲坐席
- {
- m_IsVideo = true;
- CPduEntity cmd(PDU_CMD_AGENT_VIDEO_REQ_AGENT);
- cmd.SetDataUInt(1, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- // 2021-10-15 督办专员 VideoReqBindAgent代替保存
- /*{
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_exten>().find(GetAgentExten());
- if (it != m_agentMap.get<agent_exten>().end())
- {
- m_agentMap.get<agent_exten>().erase(it);
- }
- m_agentMap.insert(Agent(GetAgentID(), GetAgentExten(), conID));
- }*/
- }
- if (0 == strcmp(TypeStr, "VideoDesExten")) // 销毁/回收请求的分机号
- {
- m_IsVideo = true;
- CPduEntity cmd(PDU_CMD_AGENT_VIDEO_RECOVER_EXTEN);
- cmd.SetDataUInt(1, GetAgentID());
- cmd.SetDataUInt(2, GetAgentExten());
- cmd.SetDataString(3, "123456");
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "VideoReqBindAgent")) {
- m_IsVideo = true;
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<agent_exten>().find(GetAgentExten());
- if (it != m_agentMap.get<agent_exten>().end())
- {
- m_agentMap.get<agent_exten>().erase(it);
- }
- m_agentMap.insert(Agent(GetAgentID(), GetAgentExten(), conID));
- std::string strSend = CreateJson2(TypeStr, true);
- SendMessageToClient(strSend, Curr_ConID);
- }
- if (0 == strcmp(TypeStr, "GetAgentDetail")) // 获取坐席详情
- {
- CPduEntity cmd(PDU_CMD_AGENT_DETAIL);
- cmd.SetDataInt(1, Curr_ConID);
- CNetworkClient::GetInstance().send2ACD(&cmd);
- std::unique_lock<std::mutex> lock(m_agentDetailConIDLock);
- m_agentDetailConIDs[Curr_ConID] = Curr_ConID;
- }
- if (0 == strcmp(TypeStr, "Login")) //签入
- {
- int t_agent_id = GetAgentID();
- if (t_agent_id == 0) // 2022-01-06 坐席工号不能为0
- {
- std::string strSend = CreateJson3("Login", "坐席工号不能为0");
- SendMessageToClient(strSend, Curr_ConID);
- return;
- }
- if (GetAgentExten() == 0)
- {
- std::string strSend = CreateJson3("Login", "坐席分机号不能为0");
- SendMessageToClient(strSend, Curr_ConID);
- return;
- }
- CPduEntity cmd(PDU_CMD_AGENT_LOGIN);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, t_agent_id);
- cmd.SetDataString(3, GetAgentGroup());
- cmd.SetDataUInt(4, GetAgentType());
- //2018.5.17
- {
- std::unique_lock<std::mutex>lock(m_MapLoginAgentConIDLock);
- m_MapLoginAgentConID[t_agent_id] = Curr_ConID;
- }
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (!IsAvailableConID(Curr_ConID))
- return ;
- if (0 == strcmp(TypeStr, "Logout")) //签出
- {
- CPduEntity cmd(PDU_CMD_AGENT_LOGOUT);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "SayBusy")) //置忙
- {
- CPduEntity cmd(PDU_CMD_AGENT_SETSTATE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(3, AGENT_STATE_REPOSE);
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "SayFree")) //置闲
- {
- CPduEntity cmd(PDU_CMD_AGENT_SETSTATE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(3, AGENT_STATE_FREE);
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Reset")) //重置
- {
- string strSend = CreateJson2("Reset", false);
- CPduEntity cmd(PDU_CMD_AGENT_RESET);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- if (CNetworkClient::GetInstance().send2ACD(&cmd))
- strSend = CreateJson2("Reset", true);
- SendMessageToClient(strSend, Curr_ConID);
- }
- if (0 == strcmp(TypeStr, "MakeCall")) //外呼
- {
- // baiyang 被叫号码由分机号改为正确的被叫号码
- // 有前端的CallId,传回主叫号码,相关的Json解析
- //ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, "收到消息MakeCall 坐席:%d,分机:%d,目的号:%s ", GetAgentID(), GetAgentExten(), GetMakeCallDestinationNumber());
- //int Number = GetAgentExten();
- //CString strCallerNumber;
- //strCallerNumber.Format("%d", Number);
- CPduEntity cmd(PDU_CMD_AGENT_MAKECALL);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataString(4, GetMakeCallDestinationNumber());
- // cmd.SetDataString(5, strCallerNumber);
- cmd.SetDataString(7, GetNumberHeader());
- cmd.SetDataString(8, GetVisitStr());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "AnswerCall")) //应答
- {
- CPduEntity cmd(PDU_CMD_AGENT_ANSWER);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "DropCall")) //挂断
- {
- CPduEntity cmd(PDU_CMD_AGENT_HANGUP);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Hold")) //保持
- {
- CPduEntity cmd(PDU_CMD_AGENT_HOLD);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Retrieve")) //接回保持
- {
- CPduEntity cmd(PDU_CMD_AGENT_TAKEBACK);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Mute")) // 静音操作(0开始静音,1结束静音)
- {
- CPduEntity cmd(PDU_CMD_AGENT_MUTE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(3, GetOpType());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Transfer")) //转移
- {
- CPduEntity cmd(PDU_CMD_AGENT_TRANSTALK);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataString(3, GetTransferOrMeetingDestinationNumber());
- cmd.SetDataString(4, "");
- cmd.SetDataString(5, GetTransferType()); //添加转移类型,0指定号码转移,1转移技能组
-
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Meeting")) //多方通话
- {
- CPduEntity cmd(PDU_CMD_AGENT_THREETALK);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataString(3, GetTransferOrMeetingDestinationNumber());
- cmd.SetDataString(4, "");
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "MeetingTakeBack")) //多方通话接回主叫
- {
- CPduEntity cmd(PDU_CMD_AGENT_THREETALK_TAKEBACK);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Listen")) // 监听
- {
- CPduEntity cmd(PDU_CMD_AGENT_MONI_LISTEN);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(4, GetTargetAgentID());
- int bb = CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Insert")) // 强插
- {
- CPduEntity cmd(PDU_CMD_AGENT_MONI_INSERT);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(4, GetTargetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Intercept")) // 强截
- {
- CPduEntity cmd(PDU_CMD_AGENT_MONI_INTERCEPT);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(4, GetTargetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Break")) // 强拆
- {
- CPduEntity cmd(PDU_CMD_AGENT_MONI_CUT);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(4, GetTargetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "ForceAgentLogOut")) // 强制坐席退出
- {
- CPduEntity cmd(PDU_CMD_AGENT_MONI_FORCE_LOGOUT);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(4, GetTargetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "ForceAgentState")) // 强制更改座席状态
- {
- CPduEntity cmd(PDU_CMD_AGENT_MONI_FORCE_STATE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(4, GetTargetAgentID()); //目标座席工号
- //cmd.SetDataUInt(5, 2); //状态码 2:置闲 5:置忙
- cmd.SetDataUInt(5, GetTargetAgentState());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Instead")) // 代接
- {
- CPduEntity cmd(PDU_CMD_AGENT_MONI_REPLACE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(4, GetTargetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- /* 改到判断是否签入之前,不签入也可订阅
- if (0 == strcmp(TypeStr, "SubScribe")) // 订阅座席状态
- {
- CPduEntity cmd(PDU_CMD_AGENT_SUBSCRIBE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataInt(3, GetSubType()); // 0坐席状态1分机状态2空闲列表3忙列表4来电列表5通话列表6排队数量7技能媒体
- cmd.SetDataUInt(4, GetSubParmer()); //参数 既座席工号
- bool result = CNetworkClient::GetInstance().send2ACD(&cmd);
- string strSend = CreateJson4("SubScribe", result);
- SendMessageToClient(strSend, Curr_ConID);
- m_SubScribed_ConID[Curr_ConID] = Curr_ConID;
- }
- if (0 == strcmp(TypeStr, "SubScribeCancel")) //取消订阅
- {
- CPduEntity cmd(PDU_CMD_AGENT_CANCEL_SUBSCRIBE);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataInt(3, GetSubType()); // 0坐席状态1分机状态2空闲列表3忙列表4来电列表5通话列表6排队数量7技能媒体
- cmd.SetDataUInt(4, GetSubParmer()); //参数 既座席工号
- bool result = CNetworkClient::GetInstance().send2ACD(&cmd);
- string strSend = CreateJson4("SubScribeCancel", result);
- SendMessageToClient(strSend, Curr_ConID);
- auto it = m_SubScribed_ConID.find(Curr_ConID);
- if (it != m_SubScribed_ConID.end())
- m_SubScribed_ConID.erase(Curr_ConID);
- }
- */
- if (0 == strcmp(TypeStr, "GetAgentList"))
- {
- CPduEntity cmd(PDU_CMD_AGENT_GET_AGENTLIST);
- cmd.SetDataUInt(0, GetAgentExten());
- cmd.SetDataUInt(1, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "Consult"))
- {
- CPduEntity cmd(PDU_CMD_AGENT_CONSULTATION_CALL);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataString(4, GetConsultCallee());
- cmd.SetDataString(5, GetConsultCaller());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "ConfirmTransfer"))
- {
- CPduEntity cmd(PDU_CMD_AGENT_CONFIRM_TRANSFER);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataUInt(3, GetEndParmer());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "TurnIvr"))
- {
- CPduEntity cmd(PDU_CMD_AGENT_TURN_TO_IVR);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(5, GetIvrPos());
- cmd.SetDataString(6, GetIvrName());
- cmd.SetDataBool(8, true); // true 回访,不kill通道,false->true
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- if (0 == strcmp(TypeStr, "SendDtmf")) //发送按键信息
- {
- CPduEntity cmd(PDU_CMD_AGENT_SEND_DTMF);
- cmd.SetDataUInt(1, GetAgentExten());
- cmd.SetDataUInt(2, GetAgentID());
- cmd.SetDataString(3, GetSendDtmf());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
-
- // 驻马店专用
- if (0 == strcmp(TypeStr, "GetExtenList")) {
- CPduEntity cmd(PDU_CMD_EXTEN_STATE_LIST_ZMD);
- cmd.SetDataUInt(0, GetAgentExten());
- cmd.SetDataUInt(1, GetAgentID());
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- // 转发消息,替坐席转发消息给其它已签入坐席/分机
- if (0 == strcmp(TypeStr, "TurnMsg")) {
- CString tagNum = GetTurnTagNum();
- CString tagData = GetTurnTagData();
- bool ret= SendMessageToClientByExtenId(tagData.GetBuffer(0), atoi(tagNum));
- std::string strSend = CreateJson2(TypeStr, ret);
- SendMessageToClient(strSend, conID);
- }
- }
- void CServerDlg::__closeFun(const long conID)
- {
- int DisconIDRec = conID;
- {
- auto it = m_SubScribed_ConID.find(DisconIDRec);
- if (it != m_SubScribed_ConID.end())
- m_SubScribed_ConID.erase(it);
- }
- int KeyAgentID = 0;
- int AgentExtern = 0;
- {
- std::unique_lock<std::mutex>lock(m_agentMapLock);
- auto it = m_agentMap.get<hdl_id>().find(DisconIDRec);
- if (it != m_agentMap.get<hdl_id>().end()) {
- KeyAgentID = it->AgentID;
- AgentExtern = it->ExtenID;
- m_agentMap.get<hdl_id>().erase(it);
- }
- }
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, "连接断开ConID = %d Agent = %d Exten = %d ", DisconIDRec, KeyAgentID, AgentExtern);
- // 该断开连接标识有绑定坐席发送签出命令
- if (KeyAgentID > 0)
- {
- CPduEntity cmd(PDU_CMD_AGENT_LOGOUT);
- cmd.SetDataUInt(1, AgentExtern);
- cmd.SetDataUInt(2, KeyAgentID);
- cmd.SetDataUInt(3, 3); // 3签出原因是连接断开,正常是默认0(非3)
- CNetworkClient::GetInstance().send2ACD(&cmd);
- // 视频请求分机 连接断开自动释放分机
- if (m_IsVideo)
- {
- CPduEntity cmd(PDU_CMD_AGENT_VIDEO_RECOVER_EXTEN);
- cmd.SetDataUInt(1, KeyAgentID);
- cmd.SetDataUInt(2, AgentExtern);
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- }
- {
- std::unique_lock<std::mutex>lock(m_MapLoginAgentConIDLock);
- auto it = m_MapLoginAgentConID.find(DisconIDRec);
- if (it != m_MapLoginAgentConID.end())
- m_MapLoginAgentConID.erase(it);
- }
- {
- // 连接断开删除坐席详情连接标识
- std::unique_lock<std::mutex> lock(m_agentDetailConIDLock);
- auto it = m_agentDetailConIDs.find(DisconIDRec);
- if (it != m_agentDetailConIDs.end())
- {
- m_agentDetailConIDs.erase(it);
- }
- }
- }
- void CServerDlg::__recovLogin()
- {
- std::vector<std::string> groupVecs;
- getOnlineAgentGroupDetail(groupVecs); // 获取断开之前的坐席,
- if (groupVecs.empty())return;
- // 当有需要恢复签入的坐席时,判断acd,cti是否正常,等正常的时候再发送签入
- if (!CNetworkClient::GetInstance().isAcdConnected() || !CNetworkClient::GetInstance().isCtiConnected()) {
- return;
- }
- std::vector<std::string> agentVecs;
- std::vector<std::string> agentDetailVec;
- for (auto groupVec : groupVecs) {
- boost::split(agentVecs, groupVec, boost::is_any_of("#"));
- for (auto agentVec : agentVecs) {
- boost::split(agentDetailVec, agentVec, boost::is_any_of("|"));
- if (agentDetailVec.size() > 3) {
- int t_agent_id = atoi(agentDetailVec[0].c_str()); // 坐席号
- int exten_no = atoi(agentDetailVec[1].c_str()); // 分机号
- const char* group = agentDetailVec[2].c_str(); // 组号
- int agent_type = atoi(agentDetailVec[3].c_str()); // 坐席类型
- CPduEntity cmd(PDU_CMD_AGENT_LOGIN);
- cmd.SetDataUInt(1, exten_no);
- cmd.SetDataUInt(2, t_agent_id);
- cmd.SetDataString(3, group);
- cmd.SetDataUInt(4, agent_type);
- cmd.SetDataUInt(8, 1); // 1恢复签入
- CNetworkClient::GetInstance().send2ACD(&cmd);
- }
- }
- }
- }
- char* CServerDlg::TranslateErrorCode(int ErrorCode)
- {
- char* StrError = "0";
- switch (ErrorCode)
- {
- case ERR_NO_CTI: // CTI未启动
- StrError = "CTI未启动";
- break;
- case ERR_NO_ACD: // ACD未启动
- StrError = "ACD未启动";
- break;
- case ERR_NO_IP: // IP地址错误
- StrError = "IP地址错误";
- break;
- case ERR_NO_EXT: // 分机号不存在
- StrError = "分机号不存在";
- break;
- case ERR_BIND_EXT: // 分机号已绑定
- StrError = "分机号已绑定";
- break;
- case ERR_BIND_AGENT: // 坐席号已绑定
- StrError = "座席号已绑定";
- break;
- case ERR_SAY_BUSY: // ACD不能置该座席为忙
- StrError = "ACD不能置该座席为忙";
- break;
- case ERR_SAY_FREE: // ACD不能置该座席为闲
- StrError = "ACD不能置该座席为闲";
- break;
- case ERR_RESET_AGENT: // CTI重置该座席失败
- StrError = "CTI重置该座席失败";
- break;
- case ERR_MAKE_CALL: // CTI执行外呼失败
- StrError = "CTI执行外呼失败";
- break;
- case ERR_ANSWER_CALL: // CTI执行应答失败
- StrError = "CTI执行应答失败";
- break;
- case ERR_DROP_CALL: // CTI执行挂机失败
- StrError = "CTI 执行挂机失败";
- break;
- case ERR_HOLD: // CTI执行保持失败
- StrError = "CTI执行保持失败";
- break;
- case ERR_UN_HOLD: // CTI执行接回失败
- StrError = "CTI执行接回失败";
- break;
- case ERR_TRANSFER: // CTI执行转移失败
- StrError = "CTI执行转移失败";
- break;
- case ERR_CANCEL_TRANSFER: // CTI执行取消转移失败
- StrError = "CTI执行取消转移失败";
- break;
- case ERR_CANCEL_THREETALK: // CTI执行取消三方失败
- StrError = "CTI执行取消第三方失败";
- break;
- case ERR_CANCEL: // CTI执行取消失败
- StrError = "CTI执行取消失败";
- break;
- case ERR_CONSULTATION_CALL: // CTI执行协商呼叫失败
- StrError = "CTI执行协商呼叫失败";
- break;
- case ERR_CONFIRM_TRANSFER: // CTI执行确认转移失败
- StrError = "CTI 执行确认转移失败";
- break;
- case ERR_THREE_TALK: // CTI执行加三方通话失败
- StrError = "CTI执行加三方通话失败";
- break;
- case ERR_LISTEN_AGENT: // CTI执行监听座席失败
- StrError = "CTI执行监听座席失败";
- break;
- case ERR_INSERT_AGENT: // CTI执行强插座席失败
- StrError = "CTI执行强插座席失败";
- break;
- case ERR_INSTEAD: // CTI执行代接座席失败
- StrError = "CTI执行代接座席失败";
- break;
- case ERR_CUT_AGENT: // CTI执行强拆座席失败
- StrError = "CTI 执行强拆座席失败";
- break;
- case ERR_INTERCEPT_AGENT: // CTI执行强截座席失败
- StrError = "CTI执行强截座席失败";
- break;
- case ERR_FORCE_LOGOUT_AGENT: // 强制签出
- StrError = "强制签出";
- break;
- case ERR_FORCE_CONTROL_AGENT: // CTI执行强制控制座席失败
- StrError = "CTI执行强制控制座席失败";
- break;
- case ERR_TRANSFER_TO_IVR: // CTI执行转移到IVR失败
- StrError = "CTI 执行转移到IVR失败";
- break;
- case ERR_MAKECALL_BY_SELF: // 自己呼自己
- StrError = "呼叫自己";
- break;
- case ERR_TARGET_NUMBER_TOO_LONG:
- StrError = "号码太长"; // 目标号码太长
- break;
- case ERR_IVR_FILE_PATH_TOO_LONG: // ivr文件路径太长
- StrError = "IVR文件路径过长";
- break;
- case ERR_FAX_FILE_PATH_TOO_LONG: // fax文件路径太长
- StrError = "Fax文件路径太长";
- break;
- case ERR_NO_AGENT_EVENT_MANAGER: // 座席事件管理类为NULL
- StrError = "座席事件管理类为NULL";
- break;
- case ERR_NO_AGENT_LOG: // 座席日志类为NULL
- StrError = "座席日志类为NULL";
- break;
- case ERR_PREVIEW_MAKECALL: // CTI平台暂不支持 预览外拨
- StrError = "CTI平台暂不支持 预览外拨";
- break;
- case ERR_BEGIN_MUTE: // 开始静音失败
- StrError = "开始静音失败";
- break;
- case ERR_END_MUTE: // 结束静音失败
- StrError = "结束静音失败";
- break;
- case ERR_STOP_RECORD: // CTI停止录音失败
- StrError = "CTI停止录音失败";
- break;
- case ERR_SEND_FAX: // CTI发送传真失败
- StrError = "CTI发送传真失败";
- break;
- case ERR_RECV_FAX: // CTI接收传真失败
- StrError = " CTI接收传真失败";
- break;
- case ERR_CREATE_TIMER: // 创建定时器失败
- StrError = "创建定时器失败";
- break;
- case ERR_SUB_AGENT: // 订阅坐席失败
- StrError = "订阅坐席失败";
- break;
- case ERR_CANCEL_SUB_AGENT: // 取消订阅坐席失败
- StrError = "取消订阅座席失败";
- break;
- case ERR_DESTNUM_SPACIL: // 包含特殊字符
- StrError = "包含特殊字符串";
- break;
- case ERR_LOGIN_AGIN: // 重复签入
- StrError = "重复签入";
- break;
- case ERR_AUTH_FAILED: // 授权验证失败
- StrError = "授权验证失败";
- break;
- default:
- StrError = "未知错误";
- break;
- }
- return StrError;
- }
- void CServerDlg::OnClose()
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- CNetworkClient::GetInstance().release();
- //ILogger::getInstance().close();
- CDialogEx::OnClose();
- }
- void CServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- if (nID == SC_CLOSE)
- {
- if (MessageBox(_T("确定要退出HttpServer系统吗?"), _T("提示"), MB_OKCANCEL) != IDOK)
- return;
- ILogger::getInstance().stop();
- }
- CDialogEx::OnSysCommand(nID, lParam);
- }
- void CServerDlg::OnSize(UINT nType, int cx, int cy)
- {
- CDialogEx::OnSize(nType, cx, cy);
- // TODO: 在此处添加消息处理程序代码
- auto pWnd = GetDlgItem(IDC_LIST1);
- if (pWnd&&nType != 1) {
- CRect rc;
- GetClientRect(&rc);
- pWnd->MoveWindow(rc);
- CRect mRect;
- m_CtrlList.GetClientRect(&mRect);
- int length = mRect.right - mRect.left - 240;
- m_CtrlList.SetColumnWidth(3,length);
- }
- }
- void CServerDlg::OnMenuLogStop()
- {
- // TODO: 在此添加命令处理程序代码
- ILogger::getInstance().stop();
- }
- void CServerDlg::OnUpdateMenuLogStop(CCmdUI *pCmdUI)
- {
- // TODO: 在此添加命令更新用户界面处理程序代码
- if (ILogger::getInstance().isStart())
- pCmdUI->SetCheck(0);
- else
- pCmdUI->SetCheck(1);
- }
- void CServerDlg::OnMenuLogStart()
- {
- // TODO: 在此添加命令处理程序代码
- ILogger::getInstance().start();
- }
- void CServerDlg::OnUpdateMenuLogStart(CCmdUI *pCmdUI)
- {
- // TODO: 在此添加命令更新用户界面处理程序代码
- if (ILogger::getInstance().isStart())
- pCmdUI->SetCheck();
- else
- pCmdUI->SetCheck(0);
- }
- void CServerDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
- {
- CDialogEx::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
- // TODO: 在此处添加消息处理程序代码
- if (!bSysMenu && pPopupMenu)
- {
- CCmdUI cmdUI;
- cmdUI.m_pOther = NULL;
- cmdUI.m_pMenu = pPopupMenu;
- cmdUI.m_pSubMenu = NULL;
- UINT count = pPopupMenu->GetMenuItemCount();
- cmdUI.m_nIndexMax = count;
- for (UINT i = 0; i < count; i++)
- {
- UINT nID = pPopupMenu->GetMenuItemID(i);
- if (-1 == nID || 0 == nID)
- {
- continue;
- }
- cmdUI.m_nID = nID;
- cmdUI.m_nIndex = i;
- cmdUI.DoUpdate(this, FALSE);
- }
- }
- }
|