Files
pathfinder-websocket/js/worker/chat.js
2016-11-12 14:38:50 +01:00

88 lines
2.1 KiB
JavaScript

'use strict';
self.importScripts('message.js');
var socket = new WebSocket(self.name);
var ports = [];
var notifications = false;
var tmp = self;
console.log(socket._socket);
self.addEventListener('connect', function (event) {
var port = event.ports[0];
ports.push(port);
console.log('B: ' + socket.readyState);
port.onmessage = function (event) {
let load = event.data;
load.__proto__ = msgWorker.prototype;
console.log('C: ' + socket.readyState);
switch(load.command){
case 'send':
socket.send(JSON.stringify(load.data()));
break;
case 'WS_close':
closeSocket(socket);
break;
case 'notify':
notifications = load.data().status;
}
};
if(socket.readyState === socket.OPEN){
var msgWorkerOpen = new msgWorker('ready');
port.postMessage(msgWorkerOpen);
}
port.start();
}, false);
socket.onopen = function(e){
var msgWorkerOpen = new msgWorker('open');
for (var i = 0; i < ports.length; i++) {
ports[i].postMessage(msgWorkerOpen);
}
socket.onmessage = function(e){
let load = JSON.parse(e.data);
var msgWorkerSend = new msgWorker('send');
msgWorkerSend.data(load);
for (var i = 0; i < ports.length; i++) {
ports[i].postMessage(msgWorkerSend);
}
if(notifications){
new Notification('Message: ' + load.text);
}
};
socket.onclose = function(){
console.log(this.remoteAddress);
console.info('ws: onclose()');
};
socket.onerror = function(){
console.error('ws: onerror()');
};
};
// Util ================================================================
var closeSocket = function(socket){
// only close if active
if(socket.readyState === socket.OPEN){
// send "close" event before close call
var msgWorkerWsClosed = new msgWorker('WS_closed');
for (var i = 0; i < ports.length; i++) {
ports[i].postMessage(msgWorkerWsClosed);
}
socket.close();
}
};