2017-08-28 12:27:45 -04:00
/ * *
* @ fileoverview Meshcentral . js
* @ author Ylian Saint - Hilaire
* @ version v0 . 0.1
* /
var MeshServerCreateControl = function ( domain ) {
var obj = { } ;
obj . State = 0 ;
obj . connectstate = 0 ;
2018-07-13 22:18:43 -04:00
obj . pingTimer = null ;
2017-08-28 12:27:45 -04:00
2019-01-27 15:23:38 -05:00
obj . xxStateChange = function ( newstate , errCode ) {
2017-08-28 12:27:45 -04:00
if ( obj . State == newstate ) return ;
2019-01-27 15:23:38 -05:00
var previousState = obj . State ;
2017-08-28 12:27:45 -04:00
obj . State = newstate ;
2019-01-27 15:23:38 -05:00
if ( obj . onStateChanged ) obj . onStateChanged ( obj , obj . State , previousState , errCode ) ;
2017-08-28 12:27:45 -04:00
}
obj . Start = function ( ) {
2019-01-27 15:23:38 -05:00
if ( obj . connectstate != 0 ) return ;
2017-08-28 12:27:45 -04:00
obj . connectstate = 0 ;
obj . socket = new WebSocket ( window . location . protocol . replace ( "http" , "ws" ) + "//" + window . location . host + domain + "control.ashx" ) ;
2019-01-27 15:23:38 -05:00
obj . socket . onopen = function ( e ) { obj . connectstate = 1 ; }
2017-08-28 12:27:45 -04:00
obj . socket . onmessage = obj . xxOnMessage ;
2019-01-27 15:23:38 -05:00
obj . socket . onclose = function ( e ) { obj . Stop ( e . code ) ; }
obj . xxStateChange ( 1 , 0 ) ;
2018-07-13 22:18:43 -04:00
if ( obj . pingTimer != null ) { clearInterval ( obj . pingTimer ) ; }
obj . pingTimer = setInterval ( function ( ) { obj . send ( { action : 'ping' } ) ; } , 29000 ) ; // Ping the server every 29 seconds, stops corporate proxies from disconnecting.
2017-08-28 12:27:45 -04:00
}
2019-01-27 15:23:38 -05:00
obj . Stop = function ( errCode ) {
2017-08-28 12:27:45 -04:00
obj . connectstate = 0 ;
if ( obj . socket ) { obj . socket . close ( ) ; delete obj . socket ; }
2018-07-13 22:18:43 -04:00
if ( obj . pingTimer != null ) { clearInterval ( obj . pingTimer ) ; obj . pingTimer = null ; }
2019-01-27 15:23:38 -05:00
obj . xxStateChange ( 0 , errCode ) ;
2017-08-28 12:27:45 -04:00
}
obj . xxOnMessage = function ( e ) {
2019-01-27 15:23:38 -05:00
if ( obj . State == 1 ) { obj . xxStateChange ( 2 ) ; }
//console.log('xxOnMessage', e.data);
2017-08-28 12:27:45 -04:00
var message ;
try { message = JSON . parse ( e . data ) ; } catch ( e ) { return ; }
2019-01-27 15:23:38 -05:00
if ( ( typeof message != 'object' ) || ( message . action == 'pong' ) ) { return ; }
2017-08-28 12:27:45 -04:00
if ( obj . onMessage ) obj . onMessage ( obj , message ) ;
} ;
2018-02-11 20:13:26 -05:00
obj . send = function ( x ) { if ( obj . socket != null && obj . connectstate == 1 ) { obj . socket . send ( JSON . stringify ( x ) ) ; } }
2017-08-28 12:27:45 -04:00
return obj ;
}