112 lines
2.5 KiB
JavaScript
Executable File
112 lines
2.5 KiB
JavaScript
Executable File
(function (root, factory) {
|
|
if (typeof exports === 'object' && typeof module !== 'undefined') {
|
|
module.exports = factory();
|
|
} else if (typeof define === 'function' && define.amd) {
|
|
define([], factory);
|
|
} else {
|
|
root.Connection = factory();
|
|
}
|
|
}(typeof self !== 'undefined' ? self : this, function () {
|
|
|
|
var Connection = {
|
|
|
|
auto_reconnect : false,
|
|
established : false,
|
|
|
|
update_indicator : (status) => {
|
|
var status_colors = {
|
|
'offline' : 'red',
|
|
'online' : 'lightgreen',
|
|
'error' : 'DarkOrange',
|
|
};
|
|
$('#connection-status').text(status).css('color', status_colors[status] || 'gray');
|
|
},
|
|
|
|
debug : true,
|
|
auto_reconnect : true,
|
|
cmd_waiting_rels : {},
|
|
|
|
server_url : '',
|
|
|
|
init : () => {
|
|
new EventSystem(Connection);
|
|
},
|
|
|
|
start : (url = null) => {
|
|
|
|
if(url) Connection.server_url = url;
|
|
|
|
Connection.update_indicator('offline');
|
|
if(Connection.socket) Connection.socket.close();
|
|
Connection.socket = new WebSocket(Connection.server_url);
|
|
Connection.socket.onmessage = function(rawmsg) {
|
|
var msg = JSON.parse(rawmsg.data);
|
|
if(Connection.debug) console.log('CONNECTION MSG', msg);
|
|
if(msg.type) Connection.trigger(msg.type, msg);
|
|
Connection.trigger('message', msg);
|
|
}
|
|
Connection.socket.onclose = function() {
|
|
Connection.update_indicator('offline');
|
|
if(Connection.debug) console.log('CONNECTION CLOSED');
|
|
Connection.established = false;
|
|
Connection.trigger('close', {});
|
|
}
|
|
Connection.socket.onerror = function(error) {
|
|
Connection.update_indicator('error');
|
|
console.error('CONNECTION', error);
|
|
Connection.established = false;
|
|
}
|
|
Connection.socket.onopen = function() {
|
|
Connection.update_indicator('online');
|
|
if(Connection.debug) console.log('CONNECTION ESTABLISHED');
|
|
Connection.established = true;
|
|
Connection.trigger('open', {});
|
|
}
|
|
setTimeout(Connection.reconnect, 2000);
|
|
|
|
},
|
|
|
|
deauth : () => {
|
|
Game.session = {};
|
|
},
|
|
|
|
reconnect : () => {
|
|
if(!Connection.established && Connection.auto_reconnect)
|
|
Connection.start();
|
|
else
|
|
setTimeout(Connection.reconnect, 2000);
|
|
},
|
|
|
|
queue : [],
|
|
|
|
dequeue : () => {
|
|
var dq = Connection.queue;
|
|
Connection.queue = [];
|
|
dq.forEach(function(fm) {
|
|
Connection.send(fm);
|
|
});
|
|
},
|
|
|
|
send : (msg) => {
|
|
if(Connection.established) {
|
|
if(typeof msg == 'function')
|
|
msg();
|
|
else
|
|
Connection.socket.send(JSON.stringify(msg));
|
|
} else {
|
|
Connection.queue.push(msg);
|
|
}
|
|
},
|
|
|
|
close : () => {
|
|
Connection.auto_reconnect = false;
|
|
Connection.socket.close();
|
|
},
|
|
|
|
}
|
|
|
|
return Connection;
|
|
|
|
}));
|
|
|