|
/*********************************************************************/ |
|
rtm.worker = false; // тут живёт воркер, если удалось его создать. |
|
rtm.createWorker = function () { |
|
if (typeof SharedWorker === 'undefined') { |
|
return false; // значит, что браузер не умеет такой тип воркеров |
|
} |
|
try { |
|
rtm.worker = new SharedWorker("/rtm/ww.js"); // это урл воркера, его идентификатор |
|
rtm.worker.port.addEventListener("message", function (msg) { |
|
rtm.onMessage(msg); // это мой обработчик сообщений от воркера |
|
}, false); |
|
rtm.worker.port.start(); |
|
} catch (err) { |
|
return false; |
|
} |
|
return true; |
|
} |
|
}; |
|
/*********************************************************************/ |
|
|
|
// POST to worker |
|
rtm.worker.port.postMessage('closing'); |
|
|
|
|
|
/*********************************************************************/ |
|
var worker = new wwsClass(); // Это моё скопище методов. |
|
onconnect = worker.onconnect; // А это опять глобальная переменная, |
|
// которая отвечает за обработчик сообщений от табов. |
|
// это один из двух способов завеситься на это событие. |
|
/*********************************************************************/ |
|
|
|
function wwsClass() { |
|
var wws = this; |
|
wws.ports = []; |
|
wws.onconnect = function (e) { |
|
// Тут я при подключении таба пихаю её подключение в массив подключений. |
|
for (var i = e.ports.length; i--;) { |
|
wws.ports.push(new wwsPort(e.ports[0])); // я создаю экземпляр неизвестно чего с навешанными на него колбэками |
|
} |
|
console.log('New ports ' + e.ports.length); |
|
console.log(wws.ports); |
|
}; |
|
|
|
/*********************************************************************/ |
|
|
|
function wwsPort(p) { |
|
var port = this; |
|
port.port = p; |
|
port.close = function () { |
|
wws.onPortClose(port); |
|
}; |
|
port.send = function (msg) { |
|
port.port.postMessage(msg); |
|
}; |
|
port.port.onmessage = function (e) { |
|
if (e.data === "closing") { |
|
port.close(); // я не знаю зачем мне это нужно. |
|
// наверное я хотел закрывать порт при закрытии таба. Но я так не делаю. |
|
} |
|
} |
|
// могу предположить, что по факту тут нужен только port.send, а остальное - фигня. |
|
} |
|
|
|
/*********************************************************************/ |
|
wws.broadcast = function (msg) { |
|
console.log("Broadcasting message to " + wws.ports.length + " ports."); |
|
console.log(msg); |
|
for (var i = wws.ports.length; i--;) { |
|
try { |
|
wws.ports[i].send(msg); |
|
} catch (e) { |
|
wws.ports[i].close(); |
|
} |
|
} |
|
}; |
|
/*********************************************************************/ |