48 рядки
1.9 KiB
JavaScript
48 рядки
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.ParentNamespace = void 0;
|
|
const namespace_1 = require("./namespace");
|
|
class ParentNamespace extends namespace_1.Namespace {
|
|
constructor(server) {
|
|
super(server, "/_" + ParentNamespace.count++);
|
|
this.children = new Set();
|
|
}
|
|
/**
|
|
* @private
|
|
*/
|
|
_initAdapter() {
|
|
const broadcast = (packet, opts) => {
|
|
this.children.forEach((nsp) => {
|
|
nsp.adapter.broadcast(packet, opts);
|
|
});
|
|
};
|
|
// @ts-ignore FIXME is there a way to declare an inner class in TypeScript?
|
|
this.adapter = { broadcast };
|
|
}
|
|
emit(ev, ...args) {
|
|
this.children.forEach((nsp) => {
|
|
nsp.emit(ev, ...args);
|
|
});
|
|
return true;
|
|
}
|
|
createChild(name) {
|
|
const namespace = new namespace_1.Namespace(this.server, name);
|
|
namespace._fns = this._fns.slice(0);
|
|
this.listeners("connect").forEach((listener) => namespace.on("connect", listener));
|
|
this.listeners("connection").forEach((listener) => namespace.on("connection", listener));
|
|
this.children.add(namespace);
|
|
this.server._nsps.set(name, namespace);
|
|
return namespace;
|
|
}
|
|
fetchSockets() {
|
|
// note: we could make the fetchSockets() method work for dynamic namespaces created with a regex (by sending the
|
|
// regex to the other Socket.IO servers, and returning the sockets of each matching namespace for example), but
|
|
// the behavior for namespaces created with a function is less clear
|
|
// note²: we cannot loop over each children namespace, because with multiple Socket.IO servers, a given namespace
|
|
// may exist on one node but not exist on another (since it is created upon client connection)
|
|
throw new Error("fetchSockets() is not supported on parent namespaces");
|
|
}
|
|
}
|
|
exports.ParentNamespace = ParentNamespace;
|
|
ParentNamespace.count = 0;
|