1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882 |
- import Vue from 'vue'
- import ReconnectingWebSocket from './reconnecting-websocket'
- export var vm = new Vue({
- data: {
- state: '', // 坐席状态
- radystate: ''// 通话状态
- },
- methods: {
- // 存放实例方法
- }
- })
- window.o_socket = null
- window.o_socket_ipps = null
- window.o_socket_mo = null
- $.extend({
- QYAgent: {
- m_TerminalType: 2, //
- m_AgentType: 1, // 坐席类型(1 – 外线 2 - voip 3 - 内线)
- m_AgentCode: '',
- m_ExtPhone: '',
- m_Caller: '',
- m_Called: '',
- m_bDebug: 0,
- m_EnableHeart: true,
- m_ServerIp: '127.0.0.1', // WebSocket服务器连接地址
- m_ServerIp_mo: '127.0.0.1', // WebSocket服务器连接地址
- m_log_enable: true,
- m_log_simple: true, // 20141019
- CurrentState: 0,
- OldState: 0,
- m_Timeout_Count: 0,
- // m_Timeout_Work: false,
- m_Timeout_Handle: 0,
- m_LoginFlag: 'login_none', // 登陆标志,login_none -- 未登陆 login_ing -- 正在登录 login_ed -- 已经登陆
- m_LoginParam: {}, // 登陆参数
- m_EventMode: 1, // 1 -- js调用方式 2 -- 扩展调用方式
- o_Notification: null, // 该变量是new出来的对象,不要用this
- m_Count_Notification: 0,
- m_WindowId: -1,
- m_TabId: -1,
- m_pseudo: '', // 20140930 握手名称
- m_pseudo_ipps: '',
- m_pseudo_mo: '',
- m_HeartCount: 0, // 20150326 心跳增加计数
- m_bSa: false, // 20150427 是否为sa
- m_ipps_ports: [80, 8080, 8081, 8089], // 20171023
- m_ipps_port_index: 0,
- o_socket: null, // 该变量是new出来的对象,不要用this
- o_socket_ipps: null, // 20151012 ipp = IPPhoneServer
- o_socket_mo: null, // 20160906 监控
- m_port: '81', // 连接端口
- m_port_ipps: '',
- m_port_mo: '1231',
- m_mo_gen_session_id: 0,
- m_mo_ui_id: 0,
- m_Timeout_Handle_ipps: 0,
- // 20170719
- openDB: function(dbname, dbremark, dbsize) {
- // 打开数据库连接
- var db = openDatabase(dbname, '1.0', dbremark, dbsize)
- return db
- },
- createTable: function(db, tableName) {
- db.transaction(function(tx) {
- // unique 唯一
- // text 文本字段 null可以为空
- tx.executeSql('CREATE TABLE IF NOT EXISTS ' + tableName + ' (addTime text, log text null)')
- })
- },
- OutputLog: function(msg) {
- if (this.m_log_enable) {
- console.info(this.dateFormatter() + ' ' + msg)
- var db = this.openDB('QYLog', '日志系统', 1024 * 1024)
- this.createTable(db, 'logs')
- db.transaction(function(tx) {
- var time = $.QYAgent.dateFormatter()
- var msgTrans = msg.replace(/"/g, '`') // 20170831 对字符串的引号进行转义
- var strSql = 'INSERT INTO logs (addTime, log) VALUES ("' + time + '", "' + msgTrans + '")'
- tx.executeSql(strSql)
- })
- }
- },
- // 20170814
- num2: function(v) {
- var _v = parseInt(v)
- if (_v < 10) {
- _v = '0' + _v
- }
- return _v
- },
- num3: function(v) {
- var _v = parseInt(v)
- if (_v < 10) {
- _v = '00' + _v
- } else if (_v < 100) {
- _v = '0' + _v
- }
- return _v
- },
- dateFormatter: function(value) {
- var date
- if (value) {
- date = new Date(value)
- } else {
- date = new Date()
- }
- return date.getFullYear() + '-' +
- this.num2(date.getMonth() + 1) + '-' +
- this.num2(date.getDate()) + ' ' +
- this.num2(date.getHours()) + ':' +
- this.num2(date.getMinutes()) + ':' +
- this.num2(date.getSeconds()) + ':' +
- this.num3(date.getMilliseconds())
- },
- sendmsg: function(packet) {
- var s = JSON.stringify(packet)
- if (packet.opcode === 'C_Heart' && this.m_log_simple === true) {
- // console.log(123)
- } else {
- this.OutputLog('sendmsg: ' + s)
- }
- window.o_socket.send('1' + s)
- // if(window.o_socket.readyState == 1)
- // window.o_socket.send('1' + s);
- // else {
- // eventTarget.trigger('On_AbnormalReadyState', window.o_socket.readyState);
- // this.connect(this.m_LoginParam);
- // }
- },
- // 20151012
- sendmsg_ipps: function(packet) {
- // console.log(213124134, window.o_socket_ipps)
- if (window.o_socket_ipps === null) {
- return
- }
- if (typeof window.o_socket_ipps === 'undefined') {
- return
- }
- if (window.o_socket_ipps.readyState !== 1) {
- return
- }
- var s = JSON.stringify(packet)
- if (packet.opcode == 'C_Heart' && this.m_log_simple == true) {
- return
- } else {
- this.OutputLog('sendmsg_ipps: ' + s)
- }
- window.o_socket_ipps.send('1' + s)
- },
- // 20160906
- sendmsg_mo: function(packet) {
- if (window.o_socket_mo === null) {
- return
- }
- if (typeof window.o_socket_mo === 'undefined') {
- return
- }
- if (window.o_socket_mo.readyState != 1) {
- return
- }
- var s = JSON.stringify(packet)
- if (packet.opcode == 'C_Heart' && this.m_log_simple == true) {
- } else {
- this.OutputLog('sendmsg_mo: ' + s)
- }
- window.o_socket_mo.send('1' + s)
- },
- closesocket: function() {
- // 20140930 修改
- if (window.o_socket !== null) {
- // console.log(window.o_socket.close)
- window.o_socket.close()
- // delete window.o_socket;
- // $.QYAgent.m_Timeout_Handle = 0;
- }
- // 20170605
- if (window.o_socket_ipps !== null) {
- window.o_socket_ipps.close()
- }
- },
- // 20151012
- closesocket_ipps: function() {
- if (window.o_socket_ipps !== null) {
- window.o_socket_ipps.close()
- // delete window.o_socket;
- // $.QYAgent.m_Timeout_Handle = 0;
- }
- },
- // 20160906
- closesocket_mo: function() {
- if (window.o_socket_mo !== null) {
- window.o_socket_mo.close()
- // delete window.o_socket;
- // $.QYAgent.m_Timeout_Handle = 0;
- }
- },
- // 心跳
- OnTimerHeart: function() {
- var p = $.QYAgent
-
- p.m_Timeout_Count++
- if (p.m_Timeout_Count >= 30) {
- if (p.m_EnableHeart) {
- // this.OutputLog('==== OnTimerHeart begin');
- p.m_Timeout_Count = 0
- p.Heart()
- // this.OutputLog('==== OnTimerHeart end');
- }
- }
- p.m_Timeout_Handle = setTimeout(function() {
- $.QYAgent.OnTimerHeart()
- }, 1000)
- },
- OnTimerClear: function() {
- var p = $.QYAgent
- var millisecondsPerWeek = 1000 * 60 * 60 * 24
- var oneDayAgo = (new Date()).getTime() - millisecondsPerWeek
- chrome.browsingData.remove({ 'since': oneDayAgo }, {
- 'appcache': true,
- 'cache': true,
- 'cookies': true,
- 'downloads': true,
- 'fileSystems': true,
- 'formData': true,
- 'history': true,
- 'indexedDB': true,
- 'localStorage': true,
- 'serverBoundCertificates': true,
- 'pluginData': true,
- 'passwords': true,
- 'webSQL': true
- }, function() {
- chrome.tabs.query({ active: true }, function(tab) {
- chrome.tabs.sendMessage(tab[0].id, { msg: 'clearCacheOK', callback: request.callback }, null)
- })
- })
- },
- GetFunctionInfo: function(funcobj, funcobjname) {
- var numargs = funcobj.arguments.length // 获取实际被传递参数的数值。
- var expargs = funcobj.length // 获取期望参数的数值,函数定义时的预期参数个数。
- var s = funcobjname + '('
- for (i = 0; i < numargs; i++) { // 获取参数内容。
- s += funcobj.arguments[i] + ','
- }
- s += ')'
- return (s) // 返回函数信息。
- },
- GetParamsInfo: function(params, funcobjname) {
- var str_Params = ''
- if (params != null) { str_Params = JSON.stringify(params) }
- var s = funcobjname + '('
- s += str_Params + ')'
- return (s) // 返回函数信息。
- },
- Internal_Trigger_DoLogin_R: function(Result, SubResult, ErrorInfo) {
- var packet = {}
- packet.Result = Result
- packet.SubResult = SubResult
- packet.ErrorInfo = ErrorInfo
- // eventTarget.trigger('On_DoLogin_R', packet)
- this.On_DoLogin_R(packet)
- },
- mo_Internal_Trigger_DoLogin_R: function(result, error_info, ui_id) {
- var packet = {}
- packet.result = result
- packet.error_info = error_info
- packet.ui_id = ui_id
- eventTarget.trigger('On_Mo_DoLogin_R', packet)
- },
- Internal_Trigger_S_AgentState: function(Code) {
- var p = this
- var packet = {}
- packet.Channel = -1
- packet.Code = Code
- packet.State = p.CurrentState
- packet.Time = 0
- eventTarget.trigger('On_S_AgentState', packet)
- p.On_S_AgentState(packet)
- },
- UpdateCurrentState: function(params) {
- var p = this
- var Code
- if (p.CurrentState == 0) {
- Code = ''
- } else {
- Code = p.m_AgentCode
- }
- p.Internal_Trigger_S_AgentState(Code)
- },
- // 20170714
- SetTabId: function(tabId, _where) {
- var p = this
- p.m_TabId = tabId
- p.OutputLog('设置tabid: ' + p.m_TabId + ', where = ' + _where)
- },
- DoLogin: function(params) {
- // console.log(params, 'params')
- var p = this
- if (p.m_LoginFlag === 'login_ed') {
- p.Internal_Trigger_DoLogin_R(0, 0, '登陆成功:话务员已经登录')
- p.Internal_Trigger_S_AgentState(params.Code)
- // console.log(2, params)
- return
- }
- // console.log('text', params)
- p.m_LoginFlag = 'login_ing'
- // p.m_LoginParam = params.LoginParam ? params.LoginParam : params.e ? params.e : params.t
- p.m_LoginParam = params.LoginParam
- p.connect(p.m_LoginParam)
- },
- connect: function(params) {
- var p = this
- p.OutputLog('操作: ' + p.GetParamsInfo(params, 'connect'))
- p.m_ServerIp = params.ip
- p.m_port = params.port
- p.m_bSa = false
- // 连接方法
- var host = 'ws://' + p.m_ServerIp + ':' + p.m_port + '/test'
- try {
- if (typeof window.o_socket !== 'undefined' &&
- window.o_socket != null) {
- p.closesocket()
- }
- // window.o_socket = new WebSocket(host);
- window.o_socket = new ReconnectingWebSocket(host)
- // 20141014 增加clearTimeout,并不做p.m_Timeout_Handle的0判断
- clearTimeout(p.m_Timeout_Handle)
- p.m_Timeout_Handle = setTimeout(function() {
- $.QYAgent.OnTimerHeart()
- }, 1000)
- p.OutputLog('Socket Status: ' + window.o_socket.readyState)
- // 20141016 服务器退出会导致onerror事件
- window.o_socket.onerror = function() {
- p.OutputLog('网络错误: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- // p.connect(params);
- }
- // 20141016 ReconnectingWebSocket对象提供的事件接口
- window.o_socket.onconnecting = function() {
- p.OutputLog('网络正在连接: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- p.m_LoginFlag = 'login_ing'
- }
- window.o_socket.onopen = function() {
- p.OutputLog('坐席网络连接成功: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- window.o_socket.send('0aaaa')
- // 20141014 增加clearTimeout,并不做p.m_Timeout_Handle的0判断
- clearTimeout(p.m_Timeout_Handle)
- p.m_Timeout_Handle = setTimeout(function() {
- $.QYAgent.OnTimerHeart()
- }, 1000)
- }
- window.o_socket.onclose = function(evt) {
- if (window.o_socket.m_pseudo != p.m_pseudo) {
- p.OutputLog('网络断开旧有链接: readystate = ' + window.o_socket.readyState + '(' + window.o_socket.m_pseudo + ',' + p.m_pseudo + ')')
- var debug = 1
- } else {
- p.OutputLog('网络断开链接: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- // 自动测试代码 (晏权注释)
- if (window.o_socket_mo.readyState === 0 && p.m_LoginFlag == 'login_ing') {
- // eventTarget.trigger('On_ServerNetInfo', 0)
- p.On_ServerNetInfo(0)
- p.m_LoginFlag = 'login_none'
- p.Internal_Trigger_DoLogin_R(2, 1, '连接坐席服务器失败')
- }
- }
- }
- // 接收到消息
- // console.log(window.o_socket)
- window.o_socket.onmessage = function(msg) {
- // console.log('msg', msg)
- var str = ''
- str = msg.data
- var id = str.substr(0, 1)
- var separator = str.indexOf('|')
- var arg1 = ''
- var arg2 = ''
- // console.log(params, 3, id)
- // 20161201 解决数据中包含'|'时,会错误分割的bug
- if (id == '0' && separator != -1) {
- arg1 = str.substr(1, separator - 1)
- arg2 = str.substr(separator + 1)
- } else { arg1 = str.substr(1) }
- // 握手信息
- if (id == '0') {
- p.OutputLog('握手: ' + arg1)
- p.m_pseudo = arg1
- window.o_socket.m_pseudo = arg1
- if (p.m_LoginFlag == 'login_ed') {
- // eventTarget.trigger('On_ServerNetInfo', 2)
- p.On_ServerNetInfo(2)
- } else {
- // eventTarget.trigger('On_ServerNetInfo', 1)
- p.On_ServerNetInfo(1)
- if (p.m_LoginFlag == 'login_ing') {
- p.Register(p.m_LoginParam)
- }
- }
- }
- // 消息
- if (id == '1') {
- // console.log('0000')
- var packet = jQuery.parseJSON(arg1)
- console.log(packet)
- if (packet == null) {
- eventTarget.trigger('On_ErrorJsonMsg', arg1)
- } else {
- // 20141019简化S_GetAgentInfo_R的日志打印
- var bPrintLogRecvMsg = true
- if (p.m_log_simple == true) {
- if (packet.opcode == 'S_GetAgentInfo_R' || packet.opcode == 'S_Heart_R') {
- bPrintLogRecvMsg = false
- }
- }
- if (bPrintLogRecvMsg) { p.OutputLog('recvmsg: ' + arg1.substr(0, arg1.length - 1)) }
- if (packet.opcode == 'S_ChatEvent') {
- var debug = 1
- }
- if (packet.opcode == 'S_ConnectAS') {
- if (p.m_LoginFlag == 'login_ing') {
- p.Register(p.m_LoginParam)
- }
- }
- if (packet.opcode == 'S_VoipRelogin') {
- p.m_LoginFlag = 'login_ing'
- p.CurrentState = 0
- p.OldState = 0
- p.Internal_Trigger_S_AgentState(p.m_AgentCode)
- p.Internal_Trigger_DoLogin_R(2, 2, '网络异常,重新登录坐席和启动GW程序')
- }
- if (packet.opcode == 'S_DisconnectAS') {
- p.m_LoginFlag = 'login_ing'
- p.CurrentState = 0
- p.OldState = 0
- p.Internal_Trigger_S_AgentState(p.m_AgentCode)
- p.Internal_Trigger_DoLogin_R(2, 2, 'AgnetServer服务器无法连接')
- }
- if (packet.opcode == 'S_AgentState') {
- console.log(packet.State, '被指忙')
- p.OldState = p.CurrentState
- p.CurrentState = packet.State
- // eventTarget.trigger('On_S_AgentState_Internal', packet.State);
- p.Internal_Trigger_S_AgentState(p.m_AgentCode)
- if (packet.State == '1') {
- // 20170215 重置标志
- p.IPPS_SetMakeCallOutFlag(0)
- }
- }
- if (packet.opcode == 'S_NeedAgentLogout') {
- p.Logout()
- return
- }
- if (packet.opcode == 'S_Register_R') {
- if (packet.Result != 0) {
- p.Internal_Trigger_DoLogin_R(3, packet.Result, packet.ErrorInfo)
- } else {
- p.Login(p.m_LoginParam)
- }
- return
- }
- if (packet.opcode == 'S_Login_R') {
- if (packet.Result != 0) {
- p.Internal_Trigger_DoLogin_R(4, packet.Result, packet.ErrorInfo)
- } else {
- p.m_LoginFlag = 'login_ed'
- p.Internal_Trigger_DoLogin_R(0, 0, 'pc成功登陆')
- // 20171114
- if (p.m_LoginParam.EnableIpps) {
- // 20171023
- p.connect_ipps()
- }
- }
- return
- }
- if (packet.opcode == 'S_LoginOut_R') {
- if (packet.Result == 1) {
- p.m_LoginFlag = 'login_none'
- }
- return
- }
- if (packet.opcode == 'S_MakeCallingOut') {
- if (packet.CallInfo == '') {
- packet.CallInfo = p.m_Caller + '$' + p.m_Called
- }
- }
- if (packet.opcode == 'S_GetAgentInfo_R') {
- var i
- var a = packet['array']
- for (i = 0; i < a.length; i++) {
- // eslint-disable-next-line no-array-constructor
- var s = new Array()
- s = a[i].FormatStr.split('$')
- a[i].Fields = s
- // console.log('数据', packet)
- p.On_S_GetAgentInfo_Rs(packet)
- }
- }
- // 20170705
- if (packet.opcode == 'S_StartRing') {
- p.On_S_StartRing(packet)
- if (p.m_port_ipps != 0) {
- packet.bShowClientAnswer = true
- }
- }
- // 20170217
- // if (packet.opcode == 'S_GetIPPhonePort_R') {
- // if(p.m_port_ipps != packet.Port){
- // p.m_port_ipps = packet.Port;
- // if(packet.Port != 0) {
- // p.connect_ipps(packet.Port);
- // }else {
- // p.closesocket_ipps();
- // }
- // }
- // }
- eventTarget.trigger('On_' + packet.opcode, packet)
- if (packet.opcode === 'S_SetBusy_R') {
- p.On_S_SetBusy_R(packet)
- }
- if (packet.opcode === 'S_SetFree_R') {
- p.On_S_SetFree_R(packet)
- }
- if (packet.opcode === 'S_Rest_R') {
- p.On_S_Rest_R(packet)
- }
- if (packet.opcode === 'S_InManager_R') {
- p.On_S_InManager_R(packet)
- }
- if (packet.opcode === 'S_OutManager_R') {
- p.On_S_OutManager_R(packet)
- }
- if (packet.opcode === 'S_Listen_R') {
- p.On_S_Listen_R(packet)
- }
- if (packet.opcode === 'S_ExitListen_R') {
- p.On_S_ExitListen_R(packet)
- }
- if (packet.opcode === 'S_ForceInsert_R') {
- p.On_S_ForceInsert_R(packet)
- }
- if (packet.opcode === 'S_ExitForceInsert_R') {
- p.On_S_ExitForceInsert_R(packet)
- }
- if (packet.opcode === 'S_ForceSetBusy_R') {
- p.On_S_ForceSetBusy_R(packet)
- }
- if (packet.opcode === 'S_ForceSetFree_R') {
- p.On_S_ForceSetFree_R(packet)
- } if (packet.opcode === 'S_ForceLogout_R') {
- p.On_S_ForceLogout_R(packet)
- } if (packet.opcode === 'C_GetAgentInfo') {
- p.On_C_GetAgentInfo(packet)
- } if (packet.opcode === 'S_Transing') {
- p.On_Massage(packet.State)
- } if (packet.opcode === 'S_Trans_R') {
- p.On_Massage(packet.State)
- } if (packet.opcode === 'S_TransCancel_R') {
- p.On_Massage(packet.State)
- }
- }
- }
- }
- } catch (e) {
- // TODO: handle exception
- // alert(e);
- }
- },
- // 20161116
- // is_need_connect_ipps: function(params) {
- // //没有传递port_ipps参数,表示不用这个通讯
- // if("undefined" == typeof params.port_ipps)
- // return false;
- // if("" == params.port_ipps || 0 == params.port_ipps)
- // return false;
- //
- // return true;
- // },
- //
- // OnTimer_connect_ipps: function() {
- // var p = this;
- // clearTimeout(p.m_Timeout_Handle_ipps);
- // p.Internal_Trigger_DoLogin_R(2, 3, '连接软电话超时30s(Port:' + p.m_LoginParam.port_ipps + ')');
- //
- // },
- // 20151012
- connect_ipps: function() {
- var p = this
- var port = p.m_ipps_ports[p.m_ipps_port_index]
- p.OutputLog('操作: ' + 'connect_ipps' + '(' + port + ')')
- p.m_port_ipps = port
- // p.m_Timeout_Handle_ipps = setTimeout(function() {
- // $.QYAgent.OnTimer_connect_ipps();
- // },30000);
- //
- // 连接方法
- var host = 'ws://localhost:' + p.m_port_ipps + '/test'
- try {
- if (typeof window.o_socket_ipps !== 'undefined' &&
- window.o_socket_ipps != null) {
- p.closesocket_ipps()
- }
- window.o_socket_ipps = new WebSocket(host)
- // window.o_socket_ipps = new ReconnectingWebSocket(host);
- p.OutputLog('Socket_ipps Status: ' + window.o_socket_ipps.readyState)
- window.o_socket_ipps.onopen = function() {
- clearTimeout(p.m_Timeout_Handle_ipps)
- p.OutputLog('网络ipps连接成功: readystate = ' + window.o_socket_ipps.readyState + ' pseudo = ' + window.o_socket_ipps.m_pseudo)
- window.o_socket_ipps.send('0aaaa')
- }
- window.o_socket_ipps.onclose = function(evt) {
- if (typeof window.o_socket_ipps.m_pseudo !== 'undefined' && window.o_socket_ipps.m_pseudo != p.m_pseudo_ipps) {
- p.OutputLog('网络ipps断开旧有链接: readystate = ' + window.o_socket_ipps.readyState + '(' + window.o_socket_ipps.m_pseudo + ',' + p.m_pseudo_ipps + ')')
- } else {
- p.OutputLog('网络ipps断开链接: readystate = ' + window.o_socket_ipps.readyState + ' pseudo = ' + window.o_socket_ipps.m_pseudo)
- if (window.o_socket_ipps.readyState == 0 || window.o_socket_ipps.readyState == 3) {
- p.m_ipps_port_index++
- if (p.m_ipps_port_index > p.m_ipps_ports.length - 1) { p.m_ipps_port_index = 0 }
- if (p.m_ipps_port_index == 0) {
- p.OutputLog('网络ipps断开链接: 连接软电话失败')
- p.Internal_Trigger_DoLogin_R(2, 3, '连接软电话失败')
- }
- var delay = p.m_ipps_port_index == 0 ? 20000 : 2000
- setTimeout(function() {
- p.connect_ipps()
- }, delay)
- }
- }
- }
- // 接收到消息
- window.o_socket_ipps.onmessage = function(msg) {
- var str = ''
- str = msg.data
- var id = str.substr(0, 1)
- var separator = str.indexOf('|')
- var arg1 = ''
- var arg2 = ''
- // 20161201 解决数据中包含'|'时,会错误分割的bug
- if (id == '0' && separator != -1) {
- arg1 = str.substr(1, separator - 1)
- arg2 = str.substr(separator + 1)
- } else { arg1 = str.substr(1) }
- // 握手信息
- if (id == '0') {
- p.OutputLog('握手: ' + arg1)
- p.m_pseudo_ipps = arg1
- window.o_socket_ipps.m_pseudo = arg1
- p.IPPS_Version() // 发送版本信息
- }
- // 消息
- if (id == '1') {
- var packet = jQuery.parseJSON(arg1)
- if (packet == null) {
- eventTarget.trigger('On_ErrorJsonMsg', arg1)
- } else {
- if (packet.opcode == 'S_Version_R') {
- if (packet.errorcode == 0) {
- p.Internal_Trigger_DoLogin_R(0, 1, packet.errorinfo)
- } else {
- p.Internal_Trigger_DoLogin_R(4, packet.errorcode, packet.errorinfo)
- // 错误信息
- // 8坐席分机不与软电话分机相匹配
- // 9分机号密码错误
- // 10连接sip服务器超时
- }
- }
- }
- }
- }
- } catch (e) {
- // TODO: handle exception
- // alert(e);
- }
- },
- // 20150427
- SAConnect: function(params) {
- var p = this
- p.OutputLog('操作: ' + p.GetParamsInfo(params, 'SAConnect'))
- p.m_ServerIp = params.Ip
- p.m_port = params.Port
- p.m_bSa = true
- // 连接方法
- var host = 'ws://' + p.m_ServerIp + ':' + p.m_port + '/test'
- try {
- if (typeof window.o_socket !== 'undefined' &&
- window.o_socket != null) {
- p.closesocket()
- }
- // window.o_socket = new WebSocket(host);
- window.o_socket = new ReconnectingWebSocket(host)
- // 20141014 增加clearTimeout,并不做p.m_Timeout_Handle的0判断
- clearTimeout(p.m_Timeout_Handle)
- p.m_Timeout_Handle = setTimeout(function() {
- $.QYAgent.OnTimerHeart()
- }, 1000)
- p.OutputLog('Socket Status: ' + window.o_socket.readyState)
- // 20141016 服务器退出会导致onerror事件
- window.o_socket.onerror = function() {
- p.OutputLog('网络错误: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- // p.connect(params);
- }
- // 20141016 ReconnectingWebSocket对象提供的事件接口
- window.o_socket.onconnecting = function() {
- p.OutputLog('网络正在连接: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- p.m_LoginFlag = 'login_ing'
- }
- window.o_socket.onopen = function() {
- p.OutputLog('SA网络连接成功: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- window.o_socket.send('0aaaa')
- // 20141014 增加clearTimeout,并不做p.m_Timeout_Handle的0判断
- clearTimeout(p.m_Timeout_Handle)
- p.m_Timeout_Handle = setTimeout(function() {
- $.QYAgent.OnTimerHeart()
- }, 1000)
- }
- window.o_socket.onclose = function(evt) {
- if (window.o_socket.m_pseudo != p.m_pseudo) {
- p.OutputLog('网络断开旧有链接: readystate = ' + window.o_socket.readyState + '(' + window.o_socket.m_pseudo + ',' + p.m_pseudo + ')')
- var debug = 1
- } else {
- p.OutputLog('网络断开链接: readystate = ' + window.o_socket.readyState + ' pseudo = ' + window.o_socket.m_pseudo)
- if (window.o_socket.readyState == 0 && p.m_LoginFlag == 'login_ing') {
- // eventTarget.trigger('On_ServerNetInfo', 0)
- p.On_ServerNetInfo(0)
- p.m_LoginFlag = 'login_none'
- p.Internal_Trigger_DoLogin_R(2, 1, '连接服务器失败')
- }
- }
- }
- // 接收到消息
- window.o_socket.onmessage = function(msg) {
- var str = ''
- str = msg.data
- var id = str.substr(0, 1)
- var separator = str.indexOf('|')
- var arg1 = ''
- var arg2 = ''
- // 20161201 解决数据中包含'|'时,会错误分割的bug
- if (id == '0' && separator != -1) {
- arg1 = str.substr(1, separator - 1)
- arg2 = str.substr(separator + 1)
- } else { arg1 = str.substr(1) }
- // 握手信息
- if (id == '0') {
- p.OutputLog('握手: ' + arg1)
- p.m_pseudo = arg1
- window.o_socket.m_pseudo = arg1
- if (p.m_LoginFlag == 'login_ed') {
- // eventTarget.trigger('On_ServerNetInfo', 2)
- p.On_ServerNetInfo(2)
- } else {
- // eventTarget.trigger('On_ServerNetInfo', 1)
- p.On_ServerNetInfo(1)
- if (p.m_LoginFlag == 'login_ing') {
- p.SALogin(p.m_LoginParam)
- }
- }
- }
- // 消息
- if (id == '1') {
- var packet = jQuery.parseJSON(arg1)
- if (packet == null) {
- eventTarget.trigger('On_ErrorJsonMsg', arg1)
- } else {
- // 20141019简化S_GetAgentInfo_R的日志打印
- var bPrintLogRecvMsg = true
- if (p.m_log_simple == true) {
- if (packet.opcode == 'S_GetAgentInfo_R' || packet.opcode == 'S_Heart_R') {
- bPrintLogRecvMsg = false
- }
- }
- if (bPrintLogRecvMsg) { p.OutputLog('recvmsg: ' + arg1.substr(0, arg1.length - 1)) }
- if (packet.opcode == 'S_DisconnectAS') {
- p.m_LoginFlag = 'login_ing'
- p.CurrentState = 0
- p.OldState = 0
- // p.Internal_Trigger_DoLogin_R(2, 2, 'AgnetServer服务器无法连接');
- }
- // if (packet.opcode == 'S_NeedAgentLogout') {
- // p.Logout();
- // return;
- // }
- // if (packet.opcode == 'S_Login_R') {
- // if (packet.Result != 0) {
- // p.Internal_Trigger_DoLogin_R(4, packet.Result, packet.ErrorInfo);
- // } else {
- // p.m_LoginFlag = 'login_ed';
- // p.Internal_Trigger_DoLogin_R(0, 0, "pc成功登陆");
- // }
- // return;
- // }
- eventTarget.trigger('On_' + packet.opcode, packet)
- }
- }
- }
- } catch (e) {
- // TODO: handle exception
- // alert(e);
- }
- },
- // 20160906
- MoGetPageHead: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MoGetPageHead'))
- this.m_mo_gen_session_id++
- var packet = { opcode: 'C_GetPageHead', session_id: this.m_mo_gen_session_id, module_name: params.module_name, page_index: params.page_index }
- this.sendmsg_mo(packet)
- },
- // 20160906
- MoPageSwitch: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MoPageSwitch'))
- this.m_mo_gen_session_id++
- var packet = { opcode: 'C_PageSwitch', session_id: this.m_mo_gen_session_id, module_name: params.module_name, page_index: params.page_index, search_value: params.search_value, switch_flag: params.switch_flag }
- this.sendmsg_mo(packet)
- },
- MoCommand: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MoCommand'))
- this.m_mo_gen_session_id++
- var packet = { opcode: 'C_Command', session_id: this.m_mo_gen_session_id, module_name: params.module_name, command: params.command, param: params.param }
- this.sendmsg_mo(packet)
- },
- // 20160906
- MoConnect: function(params) {
- var p = this
- p.OutputLog('操作: ' + p.GetParamsInfo(params, 'MoConnect'))
- p.m_ServerIp_mo = params.ip_mo
- p.m_port_mo = params.port_mo
- // 没有传递port_mo参数,表示不用这个通讯
- if (typeof params.port_mo === 'undefined') { return }
- if (params.port_mo == '' || params.port_mo == 0) { return }
- // 连接方法
- var host = 'ws://' + p.m_ServerIp_mo + ':' + p.m_port_mo + '/test'
- try {
- if (typeof window.o_socket_mo !== 'undefined' &&
- window.o_socket_mo != null) {
- p.closesocket_mo()
- }
- // window.o_socket_mo = new WebSocket(host);
- window.o_socket_mo = new ReconnectingWebSocket(host)
- p.OutputLog('Socket_mo Status: ' + window.o_socket_mo.readyState)
- window.o_socket_mo.onopen = function() {
- p.OutputLog('网络monitor连接成功: readystate = ' + window.o_socket_mo.readyState + ' pseudo = ' + window.o_socket_mo.m_pseudo)
- window.o_socket_mo.send('0aaaa')
- }
- window.o_socket_mo.onclose = function(evt) {
- if (window.o_socket_mo.m_pseudo != p.m_pseudo_mo) {
- p.OutputLog('网络monitor断开旧有链接: readystate = ' + window.o_socket_mo.readyState + '(' + window.o_socket_mo.m_pseudo + ',' + p.m_pseudo_mo + ')')
- } else {
- p.OutputLog('网络monitor断开链接: readystate = ' + window.o_socket_mo.readyState + ' pseudo = ' + window.o_socket_mo.m_pseudo)
- if (window.o_socket_mo.readyState == 0) { p.mo_Internal_Trigger_DoLogin_R(2, '连接服务器失败', 0) }
- }
- }
- // 接收到消息
- window.o_socket_mo.onmessage = function(msg) {
- var str = ''
- str = msg.data
- var id = str.substr(0, 1)
- var separator = str.indexOf('|')
- var arg1 = ''
- var arg2 = ''
- // 20161201 解决数据中包含'|'时,会错误分割的bug
- if (id == '0' && separator != -1) {
- arg1 = str.substr(1, separator - 1)
- arg2 = str.substr(separator + 1)
- } else { arg1 = str.substr(1) }
- // 握手信息
- if (id == '0') {
- p.OutputLog('握手: ' + arg1)
- p.m_pseudo_mo = arg1
- window.o_socket_mo.m_pseudo = arg1
- }
- // 消息
- if (id == '1') {
- // 20161021
- if (window.o_socket_mo.m_pseudo != p.m_pseudo_mo) {
- p.OutputLog('忽略接收旧有链接来的消息: old(' + window.o_socket_mo.m_pseudo + ') vs now(' + p.m_pseudo_mo + ')')
- } else {
- if (arg1.indexOf('AgentServer/模块信息') > 0) {
- var debug = 1
- }
- var packet = jQuery.parseJSON(arg1)
- if (packet == null) {
- eventTarget.trigger('On_ErrorJsonMsg', arg1)
- } else {
- if (packet._opcode == 'S_Verify') {
- var packet = { opcode: 'C_Verify_R', tag: 'MoUI', ui_id: '0', user_name: '', password: '' }
- p.sendmsg_mo(packet)
- } else if (packet._opcode == 'S_NotifyID') {
- p.mo_Internal_Trigger_DoLogin_R(packet.result, packet.error_info, packet.ui_id)
- }
- var bPrintLogRecvMsg = true
- if (p.m_log_simple == true) {
- if (packet._opcode == 'S_Heart_R') {
- bPrintLogRecvMsg = false
- }
- }
- if (bPrintLogRecvMsg) {
- var arg_print = arg1.substr(0, arg1.length - 1)
- var length_info = arg_print.length
- if (packet._opcode == 'S_ShowPage' && arg_print.length > 100 && p.m_log_simple == true) {
- arg_print = arg_print.substr(0, 100) + '...' + length_info + 'bytes' // 简化S_ShowPage的日志打印
- }
- p.OutputLog('recvmsg_mo: ' + arg_print)
- eventTarget.trigger('On_Mo_' + packet._opcode, packet)
- }
- }
- }
- }
- }
- } catch (e) {
- // TODO: handle exception
- // alert(e);
- }
- },
- on: function(eventname, handler) {
- // 注册事件
- eventTarget.on(eventname, handler)
- },
- un: function(eventname, handler) {
- // 注销事件
- eventTarget.un(eventname, handler)
- },
- SetDebug: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SetDebug'))
- // 调试方法
- this.m_bDebug = params.bDebug
- if (params.bDebug == true) {
- this.m_log_simple = false
- }
- },
- Heart: function(params) {
- if (this.m_log_simple == false) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Heart') + this.m_HeartCount)
- }
- // 发送心跳包
- var packet = { opcode: 'C_Heart', Count: this.m_HeartCount }
- this.sendmsg(packet)
- // 20151012
- this.sendmsg_ipps(packet)
- // 20160921
- this.sendmsg_mo(packet)
- this.m_HeartCount++
- },
- Register: function(params) { // _cid, _HotlineNumberList, _ExtPhone, _Password) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Register'))
- // 发送注册请求
- // 20170601
- var _ExtPhone
- {
- var ss = params.ExtPhone.split('$')
- _ExtPhone = ss[0]
- }
- var packet = { opcode: 'C_Register', cid: parseInt(params.cid), HotlineNumberList: params.HotlineNumberList, ExtPhone: _ExtPhone, Password: params.Password, bDebug: this.m_bDebug }
- this.sendmsg(packet)
- },
- genUUID: function() {
- var s = []
- var hexDigits = '0123456789abcdef'
- for (var i = 0; i < 36; i++) {
- s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)
- }
- s[14] = '4' // bits 12-15 of the time_hi_and_version field to 0010
- s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1) // bits 6-7 of the clock_seq_hi_and_reserved to 01
- s[8] = s[13] = s[18] = s[23] = '-'
- var _uuid = s.join('')
- return _uuid
- },
- Login: function(params) { // _TerminalType, _cid, _gid, _ExtPhone, _Code, _CodeName, _bLoginBusy, _Reserved) {
- var p = this
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Login'))
- // 发送登陆请求
- p.m_AgentCode = params.Code
- // 20170601
- {
- var ss = params.ExtPhone.split('$')
- p.m_ExtPhone = ss[0]
- }
- // old code
- // p.m_ExtPhone = params.ExtPhone;
- p.m_TerminalType = parseInt(params.TerminalType)
- switch (p.m_TerminalType) {
- case 0: p.m_AgentType = 3; break
- case 1: p.m_AgentType = 1; break
- case 2: p.m_AgentType = 1; break
- case 3: p.m_AgentType = 2; break
- }
- var _cid = params.cid + '$' + params.CidName
- // 20170829
- var _guid = window.localStorage.getItem('loginGuid')
- if (!_guid) {
- _guid = this.genUUID()
- window.localStorage.setItem('loginGuid', _guid)
- }
- var packet = {
- opcode: 'C_Login', cid: _cid, gid: params.gid, AgentType: p.m_AgentType,
- ExtPhone: params.ExtPhone, Code: params.Code, _Name: params.CodeName, Reserved: params.Reserved, bLoginBusy: parseInt(params.bLoginBusy),
- TerminalType: parseInt(params.TerminalType), bRelogin: 0, FileVersion: 'web', ProductVersion: 'web', bDebug: p.m_bDebug,
- guid: _guid
- }// 20170829 增加guid
- this.sendmsg(packet)
- },
- Logout: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Logout'))
- // 发送注销请求
- var packet = { opcode: 'C_Loginout', Channel: -1 }
- this.sendmsg(packet)
- // 20170728
- packet = { opcode: 'C_Logout' }
- this.sendmsg_ipps(packet)
- this.closesocket() // 注销就要断开网络
- this.m_LoginFlag = 'login_none'
- this.CurrentState = 0
- this.OldState = 0
- // 20170605
- this.m_port_ipps = 0
- this.Internal_Trigger_S_AgentState('')
- },
- // 发送置忙请求
- SetBusy: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SetBusy'))
- var packet = { opcode: 'C_SetBusy', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送置闲请求
- SetFree: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SetFree'))
- var packet = { opcode: 'C_SetFree', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送小休请求
- SetRest: function(params) { // CustomName) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SetRest'))
- var packet = { opcode: 'C_SetRest', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, CustomName: params.CustomName }
- this.sendmsg(packet)
- },
- // 发送抢接请求 20140804
- Snatch: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Snatch'))
- var packet = { opcode: 'C_Snatch', Channel: -1, nType: params.nType, FormatStr: params.FormatStr }
- this.sendmsg(packet)
- },
- // 发送获取坐席信息请求
- GetAgentInfo: function(params) { // _nType, _nFlag, _CodeList) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'GetAgentInfo'))
- var packet = { opcode: 'C_GetAgentInfo', Channel: -1, nType: parseInt(params.nType), nFlag: parseInt(params.nFlag), CodeList: params.CodeList }
- this.sendmsg(packet)
- },
- // 发送获取外线排队长度信息请求
- GetChannelQueueSize: function(params) { // _Gid, _nFlag) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'GetChannelQueueSize'))
- var packet = { opcode: 'C_GetChannelQueueSize', Channel: -1, Gid: parseInt(params.Gid), nFlag: params.nFlag }
- this.sendmsg(packet)
- },
- // 发送获取外线排队信息请求
- GetChannelQueueInfo: function(params) { // _Gid, _nFlag) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'GetChannelQueueInfo'))
- var packet = { opcode: 'C_GetChannelQueueInfo', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, Gid: parseInt(params.Gid), nFlag: params.nFlag }
- this.sendmsg(packet)
- },
- // 发送接听请求
- ClientAnswer: function(params) { // nType) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ClientAnswer'))
- var packet = { opcode: 'C_ClientAnswer', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, nType: parseInt(params.nType) }
- this.sendmsg(packet)
- // 20161027 增加判断
- var _type = parseInt(params.nType)
- if (_type == 0) {
- // 20151012
- this.IPPS_ClientAnswer()
- }
- },
- // 发送挂机请求
- Hangup: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Hangup'))
- var packet = { opcode: 'C_Hangup', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送话后处理请求
- EndProcessing: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'EndProcessing'))
- var packet = { opcode: 'C_EndProcessing', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送保持请求
- Keep: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Keep'))
- // 20160119 增加Mode
- var packet = { opcode: 'C_Keep', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 20160119
- // 发送静音请求
- Silence: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Silence'))
- var packet = { opcode: 'C_Silence', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送恢复请求
- Restore: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Restore'))
- var packet = { opcode: 'C_Restore', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送呼叫请求
- MakeCallOut: function(params) { // _CallerNo, _CalledNo, _BusinessCode, _Reserved) {
- console.log(params, '发起呼叫号码对象')
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MakeCallOut'))
- var _Direction
- if (this.m_AgentType == 3) { _Direction = 1 } else { _Direction = 4 }
- this.m_Caller = params.CallerNo
- this.m_Called = params.CalledNo
- var packet = { opcode: 'C_MakeCallOut', Channel: -1, Direction: _Direction, _Caller: params.CallerNo, _Called: params.CalledNo, BusinessCode: params.BusinessCode, Reserved: params.Reserved }
- // 20151012 在之前设置标志
- this.IPPS_SetMakeCallOutFlag(1)
- this.sendmsg(packet)
- },
- // 发送呼叫取消请求
- MakeCallOutCancel: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MakeCallOutCancel'))
- var packet = { opcode: 'C_MakeCallOutCancel', Channel: -1 }
- this.sendmsg(packet)
- },
- // 发送转移外线请求
- TransTel: function(params) { // _CallerNo, _CalledNo, _BusinessCode, _Reserved) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'TransTel'))
- var packet = { opcode: 'C_TransTel', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, nType: 0, _Caller: params.CallerNo, _Called: params.CalledNo, BusinessCode: params.BusinessCode, Reserved: params.Reserved }
- this.sendmsg(packet)
- },
- // 发送转移内线请求
- TransAgent: function(params) { // _nType, _FormatStr) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'TransAgent'))
- var packet = { opcode: 'C_TransAgent', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, nType: parseInt(params.nType), FormatStr: params.FormatStr }
- this.sendmsg(packet)
- },
- // 发送转移ivr请求
- TransIVR: function(params) { // _BusinessCode) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'transIVR'))
- var packet = { opcode: 'C_TransIVR', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, BusinessCode: params.BusinessCode }
- this.sendmsg(packet)
- },
- // 发送转移取消请求
- TransCancel: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'TransCancel'))
- var packet = { opcode: 'C_TransCancel', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送三方通话请求
- ConfStart: function(params) { // _CallerNo, _CalledNo, _BusinessCode) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'confStart'))
- var packet = { opcode: 'C_ConfStart', Channel: -1, nType: 1, _Caller: params.CallerNo, _Called: params.CalledNo, BusinessCode: params.BusinessCode }
- this.sendmsg(packet)
- },
- // 发送三方通话取消请求
- ConfStartCancel: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ConfStartCancel'))
- var packet = { opcode: 'C_ConfStartCancel', Channel: -1 }
- this.sendmsg(packet)
- },
- // 发送 转接成功待确认
- TransConfirm: function(params) { // _Response) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'TransConfirm'))
- var packet = { opcode: 'C_TransConfirm', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, Response: parseInt(params.Response) }
- this.sendmsg(packet)
- },
- // 发送 三方通话确认第三方
- ConfConfirm: function(params) { // _Response) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Confconfirm'))
- var packet = { opcode: 'C_ConfConfirm', Channel: -1, Response: parseInt(params.Response) }
- this.sendmsg(packet)
- },
- // 发送 进入管理状态
- InManager: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'InManager'))
- var packet = { opcode: 'C_InManager', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送 退出管理状态
- OutManager: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'OutManager'))
- var packet = { opcode: 'C_OutManager', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone }
- this.sendmsg(packet)
- },
- // 发送 监听
- Listen: function(params) { // _Code) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'Listen'))
- var packet = { opcode: 'C_Listen', Channel: -1, ExtPhone: this.m_ExtPhone, Code: params.Code }
- // 20170216 在之前设置标志
- this.IPPS_SetMakeCallOutFlag(1)
- this.sendmsg(packet)
- },
- // 发送 退出监听
- ExitListen: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ExitListen'))
- var packet = { opcode: 'C_ExitListen', Channel: -1 }
- this.sendmsg(packet)
- },
- // 发送 强插
- ForceInsert: function(params) { // _Code) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ForceInsert'))
- var packet = { opcode: 'C_ForceInsert', Channel: -1, Code: params.Code }
- this.sendmsg(packet)
- },
- // 发送 退出强插
- ExitForceInsert: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ExitForceInsert'))
- var packet = { opcode: 'C_ExitForceInsert', Channel: -1 }
- this.sendmsg(packet)
- },
- // 发送 强制拆线
- ForceRelease: function(params) { // _Code) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ForceRelease'))
- var packet = { opcode: 'C_ForceRelease', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, Code: params.Code }
- this.sendmsg(packet)
- },
- // 发送 强制置忙
- ForceSetBusy: function(params) { // _Code) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ForceSetBusy'))
- var packet = { opcode: 'C_ForceSetBusy', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, Code: params.Code }
- this.sendmsg(packet)
- },
- // 发送 强制置闲
- ForceSetFree: function(params) { // _Code) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ForceSetFree'))
- var packet = { opcode: 'C_ForceSetFree', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, Code: params.Code }
- this.sendmsg(packet)
- },
- // 发送 强制注销
- ForceLogout: function(params) { // _Code) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ForceLogout'))
- var packet = { opcode: 'C_ForceLogout', Channel: -1, AgentType: this.m_AgentType, ExtPhone: this.m_ExtPhone, Code: params.Code }
- this.sendmsg(packet)
- },
- // 发送会议发起请求
- MeetingStart: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MeetingStart'))
- var packet = { opcode: 'C_MeetingStart', Channel: -1, CalledList: '' }
- this.sendmsg(packet)
- },
- // 发送会议增加成员请求
- MeetingAdd: function(params) { // _CalledList) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MeetingAdd'))
- var packet = { opcode: 'C_MeetingAdd', Channel: -1, CalledList: params.CalledList }
- this.sendmsg(packet)
- },
- // 发送会议更改成员模式请求
- MeetingUpdateMode: function(params) { // _MeetingNumber, _nMode) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MeetingUpdateMode'))
- var packet = { opcode: 'C_MeetingUpdateMode', Channel: -1, MeetingNumber: params.MettingNumber, _Mode: parseInt(params.nMode) }
- this.sendmsg(packet)
- },
- // 发送会议成员挂断请求
- MeetingHangup: function(params) { // _MeetingNumber) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MeetingHangup'))
- var packet = { opcode: 'C_MeetingHangup', Channel: -1, MeetingNumber: params.MeetingNumber }
- this.sendmsg(packet)
- },
- // 发送会议结束会议请求
- MeetingEnd: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MeetingEnd'))
- var packet = { opcode: 'C_MeetingEnd', Channel: -1 }
- this.sendmsg(packet)
- },
- // 发送DTMF
- SendDTMF: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SendDTMF'))
- var packet = { opcode: 'C_SendDTMF', Keys: params.Keys }
- this.sendmsg(packet)
- },
- // 发送自定义命令
- CustomCommand: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'CustomCommand'))
- var packet = { opcode: 'C_CustomCommand', nType: parseInt(params.nType), sData: params.sData }
- this.sendmsg(packet)
- },
- // 20140924(前锋)
- // 获取当前空闲坐席个数
- GetFreeAgentCount: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'GetFreeAgentCount'))
- var packet = { opcode: 'C_GetFreeAgentCount', gid: parseInt(params.gid) }
- this.sendmsg(packet)
- },
- // 20141017
- // 申请电话登陆(仅适用于内线电话)
- ApplyTelLogin: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'ApplyTelLogin'))
- var packet = { opcode: 'C_ApplyTelLogin', Channel: parseInt(params.Channel) }
- this.sendmsg(packet)
- },
- // 20141124 增加GetBusyState()
- // 20141209 更改为SetBusyState()
- SetBusyState: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SetBusyState'))
- var packet = { opcode: 'C_SetBusyState', bBusy: parseInt(params.bBusy) }
- this.sendmsg(packet)
- },
- // 20150424
- // 综合的sa登录操作(包括连接as,SALogin两部分异步操作)
- DoSALogin: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'DoSALogin'))
- this.m_LoginFlag = 'login_ing'
- this.m_LoginParam = params
- this.SAConnect(params)
- },
- // sa登录
- SALogin: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SALogin'))
- var packet = { opcode: 'C_SALogin', CId: parseInt(params.CId), Code: params.Code }
- this.sendmsg(packet)
- },
- // 20150424
- // sa登出
- SALogout: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SALogout'))
- var packet = { opcode: 'C_SaLogout' }
- this.sendmsg(packet)
- this.closesocket() // 注销就要断开网络
- this.m_LoginFlag = 'login_none'
- },
- // 20160906
- DoMoLogin: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'DoMoLogin'))
- this.MoConnect(params)
- },
- // 20161021
- MoLogout: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'MoLogout'))
- var packet = { opcode: 'C_Logout' }
- this.sendmsg_mo(packet)
- this.closesocket() // 注销就要断开网络
- },
- // 20150424
- // 聊天信息
- SendChat: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SendChat'))
- var packet = { opcode: 'C_SendChat', MessageID: params.MessageID, Receiver: params.Receiver }
- this.sendmsg(packet)
- },
- // 20160108
- NotifyCodeList: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'NotifycodeList'))
- var packet = { opcode: 'C_NotifyCodeList' }
- this.sendmsg(packet)
- },
- // 20151012
- IPPS_Version: function() {
- var _Version = 'nothing'
- this.OutputLog('IPPS_Version: ' + _Version)
- // 20170602
- var _ExtPhone
- {
- var ss = this.m_LoginParam.ExtPhone.split('$')
- _ExtPhone = ss[0]
- }
- // 20170727 增加password
- var packet = {
- opcode: 'C_Version', Version: _Version, ExtPhone: _ExtPhone, Password: this.m_LoginParam.ExtPhonePassword,
- SipServerIPPort: this.m_LoginParam.SipServerIPPort
- }
- this.sendmsg_ipps(packet)
- },
- // 20151012
- IPPS_ClientAnswer: function() {
- this.OutputLog('IPPS_ClientAnswer: ')
- var packet = { opcode: 'C_ClientAnswer' }
- this.sendmsg_ipps(packet)
- },
- // 20170215 增加参数flag
- // 20151012
- IPPS_SetMakeCallOutFlag: function(_flag) {
- this.OutputLog('IPPS_SetMakeCallOutFlag: ' + _flag)
- var packet = { opcode: 'C_SetMakeCallOutFlag', flag: _flag }
- this.sendmsg_ipps(packet)
- },
- // 20160303
- PlayAudio: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'PlayAudio'))
- var packet = { opcode: 'C_PlayAudio', Channel: -1, Command: params.Command, Param1: params.Param1, Param2: params.Param2, Param3: params.Param3 }
- this.sendmsg(packet)
- },
- // 20170930
- SetUnloadState: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SetUnloadState'))
- var packet = { opcode: 'C_SetUnloadState', Channel: -1, UnloadState: params.unloadState }
- this.sendmsg(packet)
- },
- // 20171020
- GetPredialInfo: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'GetPredialInfo'))
- var packet = { opcode: 'C_GetPredialInfo', cid: params.cid, ids: params.ids }
- this.sendmsg(packet)
- },
- // 20171127
- SetPredialTaskInfo: function(params) {
- this.OutputLog('操作: ' + this.GetParamsInfo(params, 'SetPredialTaskInfo'))
- var packet = { opcode: 'C_SetPredialTaskInfo', taskid: params.taskid, taskname: params.taskname, operate: params.operate }
- this.sendmsg(packet)
- },
- //
- //
- //
- //
- //
- //
- //
- //
- //
- //
- //
- //
- //
- // 界面事件
- On_Massage: function(param) {
- console.log(param, '界面事件')
- window.setAgentState(param)
- if (window.setAgentStates) {
- window.setAgentStates(param)
- }
- },
- // 登录消息事件
- On_DoLogin_R: function(packet) {
- packet.Result // 结果值
- packet.SubResult // 二级结果值
- packet.ErrorInfo // 错误信息
- // document.all.label_otherinfo.innerText = packet.ErrorInfo
- this.radystate = packet.ErrorInfo
- // 开始接受坐席状态广播
- // $.QYProxy.GetAgentInfo(2, 0, '')
- this.GetAgentInfo(2, 0, '')
- window.JsWatch(this.radystate)
- var debug = 1
- },
- // 网络消息事件
- On_ServerNetInfo: function(state) {
- console.log('成功', state)
- var s = '成功'
- if (state === 0) { s = '失败' }
- this.radystate = '网络连接' + s
- window.JsWatch(this.radystate)
- },
- On_S_AgentState: function(packet) {
- console.log('text', packet)
- packet.Channel // 通道号
- packet.Code // 工号
- packet.State // 坐席状态
- packet.time // 状态时间点
- this.On_Massage(packet.State)
- },
- // 坐席置忙操作
- On_S_SetBusy_R: function(packet) {
- packet.Channel // 通道号
- packet.Result // 是否成功
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- // 坐席置闲操作
- On_S_SetFree_R: function(packet) {
- packet.Channel // 通道号
- packet.Result // 是否成功
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_Rest_R: function(packet) {
- packet.Channel // 通道号setAgentState
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_InManager_R: function(packet) {
- packet.Channel // 通道号setAgentState
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_OutManager_R: function(packet) {
- packet.Channel // 通道号setAgentState
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_Listen_R: function(packet) {
- packet.Channel
- packet.Result // 结果(0-成功 1-失败)
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_ExitListen_R: function(packet) {
- packet.Channel
- packet.Result // 结果(0-成功 1-失败)
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_ForceInsert_R: function(packet) {
- packet.Channel
- packet.Result // 结果(0-成功 1-失败)
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_ExitForceInsert_R: function(packet) {
- packet.Channel
- packet.Result // 结果(0-成功 1-失败)
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_ForceSetBusy_R: function(packet) {
- packet.Channel
- packet.Result // 结果(0-成功 1-失败)
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_ForceSetFree_R: function(packet) {
- packet.Channel
- packet.Result // 结果(0-成功 1-失败)
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_ForceLogout_R: function(packet) {
- packet.Channel
- packet.Result // 结果(0-成功 1-失败)
- packet.State // 坐席状态
- this.On_Massage(packet.State)
- },
- On_S_GetAgentInfo_Rs: function(value) {
- if (window.UserList) {
- window.UserList(value)
- }
- },
- On_C_GetAgentInfo: function(packet) {
- console.log(packet)
- },
- On_S_StartRing: function(packet) {
- window.StartRing(packet)
- }
- }
- })
- // 20170930
- window.onload = function() {
- setTimeout(function() {
- $.QYProxy.SetUnloadState(0)
- }, 3000)
- }
- window.onunload = function() {
- // 服务器开始记时,如果10秒内没有收到$.QYProxy.SetUnloadState(0)消息,服务器将会断开坐席状态
- $.QYProxy.SetUnloadState(1)
- }
- // ///////////////////////////////////////////////////////////
- // 事件对象
- var eventTarget = {
- on: function(eventname, handler) {
- // 事件注册
- this.Handlers.push({ name: eventname, handler: handler })
- },
- Handlers: [],
- un: function(eventname, handler) {
- // 事件注销
- var itemindex = -1
- for (var index = 0; index < this.Handlers.length; index++) {
- if (this.Handlers[index].name == eventname && this.Handlers[index].handler == handler) {
- itemindex = index
- break
- }
- }
- if (itemindex > -1) {
- this.Handlers.splice(itemindex, 1)
- }
- },
- trigger: function(eventname, args) {
- if ($.QYAgent.m_EventMode == 2) {
- if (cs_port) {
- if (eventname == 'On_S_StartRing') {
- this.Notification_StartRing(args)
- }
- if (eventname == 'On_S_AgentState') {
- if ($.QYAgent.OldState == 5 && $.QYAgent.CurrentState != 5) { // 如果从振铃状态变为其它状态
- if ($.QYAgent.o_Notification != null) {
- $.QYAgent.o_Notification.close()
- }
- }
- }
- var msg = { opcode: eventname, args: args }
- var s = JSON.stringify(msg)
- // var s2 = 'cs_port.postMessage(' + s + ')';
- // setTimeout( 'cs_port.postMessage("+ msg + ")', 1);
- // cs_port.postMessage(msg);
- // var m_data={ opcode: eventname, args: args };
- // $.QYAgent.OutputLog('==========trigger settimeout: ' + s);
- // var p = eventTarget;
- // p.m_postMessage(m_data);
- $.QYProxy[eventname](s)
- }
- } else {
- // 触发事件
- for (var index = 0; index < this.Handlers.length; index++) {
- if (this.Handlers[index].name == eventname) {
- // this.Handlers[index].handler(args);
- setTimeout($.acooly.agent[this.Handlers[index].handler](args), 0)
- }
- }
- }
- },
- m_postMessage: function(data) {
- var p = eventTarget
- // $.QYAgent.OutputLog('==========trigger m_postmessage: ' + data.opcode);
- // solution 1
- setTimeout(function() { cs_port.postMessage(data) }, 0)
- // solution 2
- // setTimeout(cs_port.postMessage(data),0);
- },
- // 显示通知
- Notification_StartRing_Show: function(args) {
- $.QYAgent.o_Notification = new Notification('您有来电', {
- icon: 'phone.png',
- body: '主叫: ' + args._Caller + ' ' + '被叫:' + args._Called
- })
- // 通知点击事件
- $.QYAgent.o_Notification.onclick = function() {
- chrome.windows.get($.QYAgent.m_WindowId, function(w) {
- var debug = 1
- // alert(JSON.stringify(w));
- // alert($.QYAgent.m_WindowId + ' ' + $.QYAgent.m_TabId);
- // 激活指定窗口
- var updateInfo = { focused: true }
- chrome.windows.update($.QYAgent.m_WindowId, updateInfo)
- // 激活指定Tab页
- var updateProperties = { selected: true }
- chrome.tabs.update($.QYAgent.m_TabId, updateProperties)
- })
- }
- $.QYAgent.m_Count_Notification = $.QYAgent.m_Count_Notification + 1
- },
- // 试图激活通知
- Notification_StartRing: function(args) {
- if ($.QYAgent.o_Notification != null) {
- $.QYAgent.o_Notification.close()
- }
- var p = this
- chrome.windows.get($.QYAgent.m_WindowId, function(w) {
- if (w.state == 'minimized' || w.focused == false) {
- // 窗口最小化的时候或者未激活的时候激活通知
- p.Notification_StartRing_Show(args)
- } else {
- chrome.tabs.getSelected(w.id, function(t) {
- // 窗口当前Tab页不是指定页的时候激活通知
- if ($.QYAgent.m_TabId != t.id) {
- p.Notification_StartRing_Show(args)
- }
- })
- }
- })
- var debug = 1
- }
- }
|