WIP chatApp

This commit is contained in:
Exodus4D
2016-11-12 15:07:20 +01:00
parent aefb08d0e2
commit d75ccf7119
4 changed files with 57 additions and 144 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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();
}
};

View File

@@ -1,4 +1,4 @@
var msgWorker = class MsgWorkerTest {
var msgWorker = class MessageWorker {
constructor(cmd){
this.cmd = cmd;
this.msgBody = null;