diffusion
Version:
Diffusion JavaScript client
73 lines (72 loc) • 3.31 kB
JavaScript
;
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.workerOnConnect = void 0;
var errors_1 = require("./../../errors/errors");
var conversation_set_1 = require("./../conversation/conversation-set");
var options_impl_1 = require("./../session/options-impl");
var worker_command_1 = require("./../webworker/worker-command");
var worker_session_registry_1 = require("./../webworker/worker-session-registry");
var uint8array_1 = require("../util/uint8array");
/**
* Handler for the shared worker's onconnect event
*
* @param event the incoming message event
*/
function workerOnConnect(event) {
var port = event.ports[0];
port.onmessage = function (msg) {
if (msg.data.length < 2) {
throw new errors_1.InternalError('Expected session name and command in shared worker message');
}
switch (msg.data[1]) {
case worker_command_1.WorkerCommand.CONNECT:
port.postMessage([msg.data[0], 'connect_ack']);
if (msg.data.length < 3) {
throw new errors_1.InternalError('Expected connection options in shared worker message');
}
try {
var _a = __read(JSON.parse(msg.data[2]), 3), opts = _a[0], isCredentialsBuffer = _a[1], credentialsStr = _a[2];
opts.credentials = isCredentialsBuffer ? uint8array_1.uint8FromBase64(credentialsStr) : credentialsStr;
worker_session_registry_1.workerSessionRegistry.connect(port, msg.data[0], new options_impl_1.OptionsImpl(opts));
}
catch (err) {
throw new errors_1.InternalError('Shared session could not connect');
}
break;
case worker_command_1.WorkerCommand.CONNECT_EXISTING:
port.postMessage([msg.data[0], 'connect_ack']);
worker_session_registry_1.workerSessionRegistry.connectExisting(port, msg.data[0]);
break;
case worker_command_1.WorkerCommand.CLOSE:
worker_session_registry_1.workerSessionRegistry.close(port, msg.data[0]);
break;
case worker_command_1.WorkerCommand.CID:
conversation_set_1.ConversationIdGenerator().then(function (cid) {
port.postMessage([msg.data[0], 'cid_event', cid.toString()]);
});
break;
default:
if (msg.data.length < 3) {
throw new errors_1.InternalError('Expected command data in shared worker message');
}
worker_session_registry_1.workerSessionRegistry.onCommand(port, msg.data[0], msg.data[1], msg.data[2]);
}
};
}
exports.workerOnConnect = workerOnConnect;