meshcentral
Version:
Web based remote computer management server
1 lines • 1.58 kB
JavaScript
var MeshServerCreateControl=function(e,t){var n={State:0,connectstate:0,pingTimer:null};return n.authCookie=t,n.xxStateChange=function(e,t){if(n.State!=e){var o=n.State;n.State=e,n.onStateChanged&&n.onStateChanged(n,n.State,o,t)}},n.Start=function(){if(0==n.connectstate){n.connectstate=0;var t=window.location.protocol.replace("http","ws")+"//"+window.location.host+e+"control.ashx"+(urlargs.key?"?key="+urlargs.key:"");n.authCookie&&""!=n.authCookie&&(t+="?moreargs=1"),n.socket=new WebSocket(t),n.socket.onopen=function(e){n.connectstate=1,n.authCookie&&""!=n.authCookie&&n.send({action:"urlargs",args:{auth:n.authCookie}})},n.socket.onmessage=n.xxOnMessage,n.socket.onclose=function(e){n.Stop(e.code)},n.xxStateChange(1,0),null!=n.pingTimer&&clearInterval(n.pingTimer),n.pingTimer=setInterval((function(){n.send({action:"ping"})}),29e3)}},n.Stop=function(e){n.connectstate=0,n.socket&&(n.socket.close(),delete n.socket),null!=n.pingTimer&&(clearInterval(n.pingTimer),n.pingTimer=null),n.xxStateChange(0,e)},n.xxOnMessage=function(e){var t;1==n.State&&n.xxStateChange(2);try{t=JSON.parse(e.data)}catch(e){return}if("object"==typeof t&&"pong"!=t.action){if("ping"==t.action&&n.send({action:"pong"}),"close"==t.action)return t.msg&&console.log(t.msg),void n.Stop(t.cause);1==n.trace?console.log("RECV",t):2==n.trace&&console.log("RECV",JSON.stringify(t)),n.onMessage&&n.onMessage(n,t)}},n.send=function(e){null!=n.socket&&1==n.connectstate&&("ping"!=e.action&&(1==n.trace?console.log("SEND",e):2==n.trace&&console.log("SEND",JSON.stringify(e))),n.socket.send(JSON.stringify(e)))},n}