Skip to content

Instantly share code, notes, and snippets.

@FZambia
Created February 6, 2017 22:05
Show Gist options
  • Save FZambia/8201b1c9fc97f82c54c3e1fb0b515160 to your computer and use it in GitHub Desktop.
Save FZambia/8201b1c9fc97f82c54c3e1fb0b515160 to your computer and use it in GitHub Desktop.
Centrifugo SharedWorker notes
/*********************************************************************/
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();
}
}
};
/*********************************************************************/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment