var ws, n = 0, timer,hidTel,hidCallID,hidActionID; var lockReconnect = false;//避免重复连接 var obj = {}; var cls = 0; var lasttime = new Date().getTime(); //创建scoket连接 function createWebSocket() { try { $("#top-search li i").removeClass("active"); ws = new WebSocket("ws://" + huayi.config.socket_ip + ":" + huayi.config.socket_port); Connect(); } catch (e) { reconnect(); } } //连接 function Connect() { try { ws.onopen = function () { console.log(new Date() + " " + "建立连接"); //心跳检测重置 heartCheck.reset().start(); cls = 0; $(".Login").addClass("active"); //自动签入 //lasttime = new Date().getTime(); //obj.Type = "Login"; //obj.AgentType = "0"; Send(); }; //接收到消息的回调方法 ws.onmessage = function (evt) { //如果获取到消息,心跳检测重置 //拿到任何消息都说明当前连接是正常的 heartCheck.reset().start(); var myDate = new Date(); console.log(myDate + " receive " + evt.data); var data = JSON.parse(evt.data)[0]; if (data) { var rlt = data.Result; if (rlt == true) { var type = data.Type; switch (type.toLowerCase()) { //case "heart": HeartBack(); break;//心跳 case "login": LoginBack(); break;//签入 case "logout": LogoutBack(); break;//签出 case "dropcall": DropCallBack(); break;//挂断 case "makecall": MakeCallBack(); break;//外呼 case "setstate": SetState(data); break;//置忙置闲 //case "saybusy": SayBusyBack(data); break; //case "sayfree": SayFreeBack(data); break; case "meeting": MeetingBack(); break;//多方通话 case "transfer": TransferBack(); break;//转移 case "hold": HoldBack(); break;//保持 case "retrieve": RetrieveBack(); break;//接回 case "incoming": IncomingBack(data); break;//来电 case "subscribe": SubScribeBack(); break;//监测 case "subscribecancel": SubScribeCancelBack(); break;//停止监测 case "agentstate": AgentStateBack(data); break;//坐席状态 case "linestate": LineStateBack(data); break;//线路状态 case "motorsetstate": SayFreeBack(); break;//班长置闲 case "linestateagent": LineStateAgentBack(data); break;//线路状态通知 case "callid": CallIDBack(data); break;//获取callid case "recordpath": RecordPathBack(data); break;//录音返回 } } else { if (rlt == false) { //layer.confirm('操作失败!', { // btn: ['确定'] //}); $(".hwzt").text('操作失败!'); } else { $(".hwzt").text(rlt); //layer.confirm(rlt, { // btn: ['确定'] //}); } } } }; //连接关闭的回调方法 ws.onclose = function (evt) { if (cls == 0) { cls = 1; //console.log("连接关闭!"); //layer.confirm('连接关闭!', { // btn: ['确定'] //}); $(".hwzt").text('连接关闭!'); $("#top-search li i").removeClass("active"); reconnect(); } }; //连接发生错误的回调方法 ws.onerror = function (evt) { //产生异常 $(".hwzt").text('连接出现异常!'); console.log(ws); if (ws==null||ws.readyState != ws.OPEN) { console.log(new Date() + "开始重连"); reconnect(); } }; } catch (ex) { $(".hwzt").text('连接关闭 try-catch!'); $("#top-search li i").removeClass("active"); reconnect(); } } //重连 function reconnect() { if (lockReconnect) return; lockReconnect = true; //没连接上会一直重连,设置延迟避免请求过多 setTimeout(function () { console.log(new Date() + " " + "重连中……"); createWebSocket("ws://" + huayi.config.socket_ip + ":" + huayi.config.socket_port); lockReconnect = false; }, 2000); } //发送 function Send() { if (ws.readyState != ws.OPEN) { reconnect(); } if (ws.readyState == ws.OPEN) { console.log(new Date() + " send " + JSON.stringify(obj)); ws.send(JSON.stringify(obj)); } } //心跳检测 var heartCheck = { timeout: 25000,//25秒 timeoutObj: null, serverTimeoutObj: null, reset: function () { clearTimeout(this.timeoutObj); clearTimeout(this.serverTimeoutObj); return this; }, start: function () { var self = this; this.timeoutObj = setTimeout(function () { //这里发送一个心跳,后端收到后,返回一个心跳消息, //onmessage拿到返回的心跳就说明连接正常 obj.Type = "Heart"; Send(); self.serverTimeoutObj = setTimeout(function () {//如果超过一定时间还没重置,说明后端主动断开了 ws.close();//如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次 }, self.timeout) }, this.timeout) } } //签入 function LoginBack() { $("#top-search li i").removeClass("active"); $(".Logout").addClass("active"); $(".SayBusy").addClass("active"); $(".MakeCall").addClass("active"); $(".zxzt").removeClass("br").addClass("bl"); $(".fwzt").removeClass("br").addClass("bl"); $(".hwzt").text(''); } //签出 function LogoutBack() { $("#top-search li i").removeClass("active"); $(".Login").addClass("active"); $(".zxzt").removeClass("bl").addClass("br"); $(".fwzt").removeClass("bl").addClass("br"); $(".hwzt").text(''); } //来电 function IncomingBack(data) { var p = '来电弹屏' + data.Number + ' '; $(".J_menuTab").removeClass("active"); // var nif = ''; var nif = ''; $(".J_mainContent").find("iframe.J_iframe").hide().parents(".J_mainContent").append(nif); $(".J_menuTabs .page-tabs-content").append(p); hidTel=data.Number; hidCallID=data.CallID; hidActionID=data.ActionID; //获取callid //$.ajaxSettings.async = false; //$.getJSON(huayi.config.callcenter_url + 'CallInScreen/GetCallIdByPhone', { "tel": $(".hidTel").val(), "token": $.cookie("token") }, function (result) { // $.ajaxSettings.async = true; // if (result.state.toLowerCase() == "success") { // $(".hidCallID").val(result.data.CallId); // } //}) } function CallIDBack(data) { //$(".hidCallID").val(data.CurrID); } //挂断 function DropCallBack() { $("#top-search li i").removeClass("active"); $(".Logout").addClass("active"); $(".SayBusy").addClass("active"); $(".MakeCall").addClass("active"); var obj = $("iframe:visible") if (obj.attr("data-id") == './callScreen/callScreen.html?tel=' + hidTel + '&CallID=' + hidCallID + '') { window.frames[obj.attr("name")].$(".td-call").hide(); } } //线路状态 function LineStateAgentBack(data) { var obj = $("iframe:visible") //0分机不可用,1空闲,2摘机等待拨号,3正在拨号,4呼出振铃,5来电振铃,6通话中,7播放忙音中,8移除IP分机,9通话保持中 if (data.State == '0') { $(".hwzt").text('分机不可用');//左下角状态显示 } if (data.State == '1') { $(".hwzt").text('空闲');//左下角状态显示 $(".fwzt").removeClass("br").addClass("bl"); // clearInterval(timer); if (obj.attr("data-id") == './callScreen/callScreen.html?tel=' + hidTel + '&CallID=' + hidCallID + '') { window.frames[obj.attr("name")].clearInter(); } if (hidTel && hidCallID) { $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateGJ', { callid: hidCallID, actionid: hidActionID, "token": $.cookie("token") }, function (result) { result = JSON.parse(result); if (result.state.toLowerCase() == "success") { } }) } $("#top-search li i").removeClass("active"); $(".Logout").addClass("active"); $(".SayBusy").addClass("active"); $(".MakeCall").addClass("active"); if (obj.attr("data-id") == './callScreen/callScreen.html?tel=' + hidTel + '&CallID=' + hidCallID + '') { window.frames[obj.attr("name")].$(".td-call").hide(); } } if (data.State == '2') { $(".hwzt").text('摘机等待拨号');//左下角状态显示 } if (data.State == '3') { $(".hwzt").text('正在拨号');//左下角状态显示 } if (data.State == '4') { $(".hwzt").text('呼出振铃');//左下角状态显示 } if (data.State == '5') { $(".hwzt").text('来电振铃');//左下角状态显示 $(".fwzt").removeClass("bl").addClass("br"); if (hidTel && hidCallID) { $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateZL', { callid: hidCallID, actionid: hidActionID, "token": $.cookie("token") }, function (result) { result = JSON.parse(result); if (result.state.toLowerCase() == "success") { } }) } } if (data.State == '6') { $(".hwzt").text('通话中');//左下角状态显示 $(".fwzt").removeClass("bl").addClass("br"); if (hidTel && hidCallID) { $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateZJ', { callid: hidCallID, actionid: hidActionID, "token": $.cookie("token") }, function (result) { result = JSON.parse(result); if (result.state.toLowerCase() == "success") { } }) } $("#top-search li i").removeClass("active"); $(".DropCall").addClass("active"); $(".Hold").addClass("active"); $(".Transfer").addClass("active"); $(".Meeting").addClass("active"); if (obj.attr("data-id") == './callScreen/callScreen.html?tel=' + hidTel + '&CallID=' + hidCallID + '') { window.frames[obj.attr("name")].calling(); } } if (data.State == '7') { $(".hwzt").text('播放忙音中');//左下角状态显示 } if (data.State == '8') { $(".hwzt").text('移除IP分机');//左下角状态显示 } if (data.State == '9') { $(".hwzt").text('通话保持中');//左下角状态显示 } } function toDub(i) { return i < 10 ? "0" + i : "" + i; } //外呼 function MakeCallBack() { $("#top-search li i").removeClass("active"); $(".DropCall").addClass("active"); $(".Meeting").addClass("active"); //$(".Transfer").addClass("active"); //$(".Hold").addClass("active"); } //置忙置闲 function SetState(obj) { if (obj.State == '5') { $(".SayBusy").removeClass("active"); $(".SayFree").addClass("active"); $(".zxzt").removeClass("bl").addClass("br"); $(".hwzt").text('置忙'); } if (obj.State == '2') { $(".SayBusy").addClass("active"); $(".SayFree").removeClass("active"); $(".zxzt").removeClass("br").addClass("bl"); $(".hwzt").text('空闲'); } } //置忙 function SayBusyBack() { $(".SayBusy").removeClass("active"); $(".SayFree").addClass("active"); } //置闲 function SayFreeBack() { $(".SayBusy").addClass("active"); $(".SayFree").removeClass("active"); } //多方通话 function MeetingBack() { } //转移 function TransferBack() { $("#top-search li i").removeClass("active"); $(".Logout").addClass("active"); $(".SayBusy").addClass("active"); $(".MakeCall").addClass("active"); } //保持 function HoldBack() { $(".Hold").removeClass("active"); $(".Retrieve").addClass("active"); } //接回 function RetrieveBack() { $(".Hold").addClass("active"); $(".Retrieve").removeClass("active"); } //监测 function SubScribeBack() { var obj = $("iframe:visible") if (obj.attr("data-id") == "./TelCall/SeatMonitor.html") { window.frames[obj.attr("name")].Start(); } } //取消监测 function SubScribeCancelBack() { var obj = $("iframe:visible") if (obj.attr("data-id") == "./TelCall/SeatMonitor.html") { window.frames[obj.attr("name")].Stop(); } } //班长监测返回状态 //坐席状态 function AgentStateBack(data) { var obj = $("iframe:visible") if (obj.attr("data-id") == "./TelCall/SeatMonitor.html") { window.frames[obj.attr("name")].UpdateAgentState(data.AgentID, data.State); } } //线路状态 function LineStateBack(data) { var obj = $("iframe:visible") if (obj.attr("data-id") == "./TelCall/SeatMonitor.html") { window.frames[obj.attr("name")].UpdateLineState(data.AgentID, data.State); } } //录音返回 function RecordPathBack(data) { //if ($(".hidTel").val() && $(".hidCallID").val()) { // $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateLY', { callid: $(".hidCallID").val(),path:data.RecPath, "token": $.cookie("token") }, function (result) { // result = JSON.parse(result); // if (result.state.toLowerCase() == "success") { // } // }) //} if (hidTel) { $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateLY', { callid: data.CallID, actionid: hidActionID, path: data.RecPath, "token": $.cookie("token") }, function (result) { result = JSON.parse(result); if (result.state.toLowerCase() == "success") { } }) } } //获取当前的日期时间 格式“yyyy-MM-dd HH:mm:ss” function getNowFormatDate() { var date = new Date(); var seperator1 = "-"; var seperator2 = ":"; var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9) { month = "0" + month; } if (strDate >= 0 && strDate <= 9) { strDate = "0" + strDate; } var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + " " + date.getHours() + seperator2 + date.getMinutes() + seperator2 + date.getSeconds(); return currentdate; }