diff --git a/js/app.js b/js/app.js index ab9d269..99622b5 100644 --- a/js/app.js +++ b/js/app.js @@ -2,7 +2,7 @@ window.onload = function (){ var msgWorker = this.msgWorker; - var worker = new SharedWorker('js/worker/chat_new.js', 'worker_name'); + var worker = new SharedWorker('js/worker/chat.js', 'worker_name'); worker.port.addEventListener('message', function(e){ let load = e.data; diff --git a/js/worker/chat.js b/js/worker/chat.js index 767c0db..d0e167b 100644 --- a/js/worker/chat.js +++ b/js/worker/chat.js @@ -1,83 +1,86 @@ 'use strict'; self.importScripts('message.js'); -var socket = new WebSocket(self.name); +var socket = null; var ports = []; var notifications = false; -var tmp = self; -console.log(socket._socket); -self.addEventListener('connect', function (event) { +var initSocket = function(uri){ + var msgWorkerOpen = new msgWorker('ws:open'); + + if(socket === null){ + socket = new WebSocket(uri); + + socket.onopen = function(e){ + + // + ports[ports.length - 1].postMessage(msgWorkerOpen); + + socket.onmessage = function(e){ + + let load = JSON.parse(e.data); + var msgWorkerSend = new msgWorker('ws: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.info('ws: onclose()'); + }; + + socket.onerror = function(){ + console.error('ws: onerror()'); + }; + } + }else{ + // socket still open + ports[ports.length - 1].postMessage(msgWorkerOpen); + } +}; + +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; + + port.addEventListener('message', function (e){ + let load = e.data; load.__proto__ = msgWorker.prototype; -console.log('C: ' + socket.readyState); - switch(load.command){ - case 'send': + case 'ws:init': + initSocket(load.data().uri); + break; + case 'ws:send': socket.send(JSON.stringify(load.data())); break; - case 'WS_close': + case 'ws:close': closeSocket(socket); break; - case 'notify': + case 'ws:notify': notifications = load.data().status; + break; } - }; - - - if(socket.readyState === socket.OPEN){ - var msgWorkerOpen = new msgWorker('ready'); - port.postMessage(msgWorkerOpen); - } + }, false); 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 + console.log(socket.readyState + ' - ' + socket.OPEN); if(socket.readyState === socket.OPEN){ // send "close" event before close call - var msgWorkerWsClosed = new msgWorker('WS_closed'); + var msgWorkerWsClosed = new msgWorker('ws:closed'); for (var i = 0; i < ports.length; i++) { ports[i].postMessage(msgWorkerWsClosed); } diff --git a/js/worker/chat_new.js b/js/worker/chat_new.js deleted file mode 100644 index d0e167b..0000000 --- a/js/worker/chat_new.js +++ /dev/null @@ -1,90 +0,0 @@ -'use strict'; -self.importScripts('message.js'); - -var socket = null; -var ports = []; -var notifications = false; - -var initSocket = function(uri){ - var msgWorkerOpen = new msgWorker('ws:open'); - - if(socket === null){ - socket = new WebSocket(uri); - - socket.onopen = function(e){ - - // - ports[ports.length - 1].postMessage(msgWorkerOpen); - - socket.onmessage = function(e){ - - let load = JSON.parse(e.data); - var msgWorkerSend = new msgWorker('ws: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.info('ws: onclose()'); - }; - - socket.onerror = function(){ - console.error('ws: onerror()'); - }; - } - }else{ - // socket still open - ports[ports.length - 1].postMessage(msgWorkerOpen); - } -}; - -self.addEventListener('connect', function (event){ - var port = event.ports[0]; - ports.push(port); - - port.addEventListener('message', function (e){ - let load = e.data; - load.__proto__ = msgWorker.prototype; - - switch(load.command){ - case 'ws:init': - initSocket(load.data().uri); - break; - case 'ws:send': - socket.send(JSON.stringify(load.data())); - break; - case 'ws:close': - closeSocket(socket); - break; - case 'ws:notify': - notifications = load.data().status; - break; - } - }, false); - - port.start(); -}, false); - - - -// Util ================================================================ -var closeSocket = function(socket){ - // only close if active - console.log(socket.readyState + ' - ' + socket.OPEN); - 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(); - } -}; diff --git a/js/worker/message.js b/js/worker/message.js index 5527c44..ece4266 100644 --- a/js/worker/message.js +++ b/js/worker/message.js @@ -1,4 +1,4 @@ -var msgWorker = class MsgWorkerTest { +var msgWorker = class MessageWorker { constructor(cmd){ this.cmd = cmd; this.msgBody = null;