var ws, n = 0,
timer,hidTel,hidCallID,hidActionID;
var lockReconnect = false; //避免重复连接
var obj = {};
var directType;
var sendType;
var mesCont;
var cls = 0;
var lasttime = new Date().getTime();
//创建scoket连接
function createWebSocket() {
try {
$("#top-search li i").removeClass("active");
Connect();
} catch(e) {
reconnect();
}
}
//连接
function Connect() {
ws = new WebSocket("ws://" + huayi.config.socket_ip + ":" + huayi.config.socket_port);
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(); /*2018-05-19zhangshaungnan注释*/
};
//接收到消息的回调方法
ws.onmessage = function(evt) {
//如果获取到消息,心跳检测重置
//拿到任何消息都说明当前连接是正常的
heartCheck.reset().start();
var myDate = new Date();
console.log(myDate + " receive " + evt.data);
var data = JSON.parse(evt.data)[0];
//打印日志
directType="recive";
sendType=data.Type; //JSON.stringify(data)
mesCont=JSON.stringify(data);
debuggerLog()
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) {
var data = JSON.parse(evt.data)[0];
directType="recive";
sendType="close"; //JSON.stringify(data)
mesCont=JSON.stringify(data);
debuggerLog();
if(cls == 0) {
cls = 1;
//console.log("连接关闭!");
//layer.confirm('连接关闭!', {
// btn: ['确定']
//});
$(".hwzt").text('连接关闭!');
$("#top-search li i").removeClass("active");
reconnect();
}
};
//连接发生错误的回调方法
ws.onerror = function(evt) {
var data = JSON.parse(evt.data)[0];
directType="recive";
sendType="连接错误 "; //JSON.stringify(data)
mesCont=JSON.stringify(data);
debuggerLog();
//产生异常
$(".hwzt").text('连接出现异常!');
console.log(ws);
if(ws == null || ws.readyState != ws.OPEN) {
console.log(new Date() + "开始重连");
reconnect();
}
};
}
//重连
function reconnect() {
if(lockReconnect) return;
lockReconnect = true;
//没连接上会一直重连,设置延迟避免请求过多
setTimeout(function() {
directType="send";
sendType="重连中 "; //JSON.stringify(data)
mesCont="重连中";
debuggerLog();
console.log(new Date() + " " + "重连中……");
createWebSocket("ws://" + huayi.config.socket_ip + ":" + huayi.config.socket_port);
lockReconnect = false;
}, 2000);
}
function debuggerLog(){
$.post(huayi.config.callcenter_url + 'Log/CallOpt', {
direct: directType,
type: sendType,
cont: mesCont,
"token": $.cookie("token")
}, function(result) {
result = $.parseJSON(result);
if(result.state.toLowerCase() == "warning") {
//layer.msg("创建工单成功");
}
})
}
//发送
function Send() {
if(ws.readyState != ws.OPEN) {
reconnect();
}
if(ws.readyState == ws.OPEN) {
console.log(new Date() + " send " + JSON.stringify(obj));
if (obj.Type) {
directType="send";
sendType=obj.Type;
mesCont=JSON.stringify(obj);
debuggerLog()
}else{
directType="send";
sendType="建立连接";
mesCont=JSON.stringify(obj);
debuggerLog()
}
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) {
if(data.CallID!=0){
var p = '';
$(".J_menuTab").removeClass("active");
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;
}else{
var timestamp = Date.parse(new Date());
var p = '';
$(".J_menuTab").removeClass("active");
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=timestamp;
}
}
//***************************************************
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();
// window.frames['iframe'+ hidCallID +''].$(".td-call").hide();
// }
if(window.frames['iframe'+ hidCallID +'']){
window.frames['iframe'+ hidCallID +''].$(".td-call").hide();
}
}
//线路状态通知
function LineStateAgentBack(data) {
var objiframe = $("iframe:visible")
//0分机不可用,1空闲,2摘机等待拨号,3正在拨号,4呼出振铃,5来电振铃,6通话中,7播放忙音中,8移除IP分机,9通话保持中
if(data.State == '0') {
$(".hwzt").text('分机不可用'); //左下角状态显示
//$(".fwzt").removeClass("br").removeClass("bl");
$(".fwzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加话机状态灯
$(".zxzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加坐席状态灯
}
if(data.State == '1') {
$(".hwzt").text('空闲'); //左下角状态显示
$(".fwzt").removeClass("br").addClass("bl");
$(".zxzt").removeClass("br").addClass("bl");//20180509 by fanlongfei 增加坐席状态灯
if(window.frames['iframe'+ hidCallID +'']){
window.frames['iframe'+ hidCallID +''].clearInter();
}
if (hidTel && hidCallID) {
$.post(huayi.config.callcenter_url + 'CallInScreen/UpdateGJ', {
callid: hidTel,
"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(window.frames['iframe'+ hidCallID +'']){
window.frames['iframe'+ hidCallID +''].$(".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");
$(".fwzt").removeClass("br").addClass("bl");//20180509 by fanlongfei 增加话机状态灯
$(".zxzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加坐席状态灯
if (hidTel && hidCallID) {
$.post(huayi.config.callcenter_url + 'CallInScreen/UpdateZL', {
callid: hidCallID,
"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");
$(".zxzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加坐席状态灯
if(hidTel && hidCallID) {
$.post(huayi.config.callcenter_url + 'CallInScreen/UpdateZJ', {
callid: hidCallID,
"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");
var aaa=data.CallDirection;
if(data.CallDirection=="in"){
// if (objiframe.attr("data-id") == './callScreen/callScreen.html?tel=' + hidTel + '&CallID=' + hidCallID + '') {
setTimeout(window.frames['iframe'+ hidCallID +''].calling(),500);/*2018-05-19 zhangshuangnan 修改 ps: 因软电话设置为 自动应答 通话时间不计时问题*/
// }
}
}
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");
// alert('1');
// window.frames[obj.attr("name")].calling();
}
//置忙置闲
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");
$(".zxzt").removeClass("br").addClass("bl"); // 2018/05/09 by fanlongfei 增加坐席状态指示
$(".hwzt").text('空闲');// 2018/05/09 by fanlongfei 增加坐席状态指示
}
//多方通话
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() {
$('#content-main .J_iframeNew').each(function(i,n){
if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
window.frames[$(this).attr("name")].Start();
}
})/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
}
//取消监测
function SubScribeCancelBack() {
// var obj = $("iframe:visible")
// if(obj.attr("data-id") == "./TelCall/SeatMonitor.html") {
// window.frames[obj.attr("name")].();
// }
$('#content-main .J_iframeNew').each(function(i,n){
if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
window.frames[$(this).attr("name")].Stop();
}
})/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
}
//班长监测返回状态
//坐席状态
function AgentStateBack(data) {
$('#content-main .J_iframeNew').each(function(i,n){
if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
window.frames[$(this).attr("name")].UpdateAgentState(data.AgentID, data.State);
}
})/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
}
//线路状态
function LineStateBack(data) {
$('#content-main .J_iframeNew').each(function(i,n){
if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
window.frames[$(this).attr("name")].UpdateLineState(data.AgentID, data.State);
}
})/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
}
//录音返回
function RecordPathBack(data) {
$(".hidCallID").val(data.CallID);
//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,
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;
}