| 28 | * |
| 29 | */ |
| 30 | export class ParentNamespace< |
| 31 | ListenEvents extends EventsMap = DefaultEventsMap, |
| 32 | EmitEvents extends EventsMap = ListenEvents, |
| 33 | ServerSideEvents extends EventsMap = DefaultEventsMap, |
| 34 | SocketData = any, |
| 35 | > extends Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData> { |
| 36 | private static count: number = 0; |
| 37 | private readonly children: Set< |
| 38 | Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData> |
| 39 | > = new Set(); |
| 40 | |
| 41 | constructor( |
| 42 | server: Server<ListenEvents, EmitEvents, ServerSideEvents, SocketData>, |
| 43 | ) { |
| 44 | super(server, "/_" + ParentNamespace.count++); |
| 45 | } |
| 46 | |
| 47 | /** |
| 48 | * @private |
| 49 | */ |
| 50 | _initAdapter(): void { |
| 51 | this.adapter = new ParentBroadcastAdapter(this); |
| 52 | } |
| 53 | |
| 54 | public emit<Ev extends EventNamesWithoutAck<EmitEvents>>( |
| 55 | ev: Ev, |
| 56 | ...args: EventParams<EmitEvents, Ev> |
| 57 | ): boolean { |
| 58 | this.children.forEach((nsp) => { |
| 59 | nsp.emit(ev, ...args); |
| 60 | }); |
| 61 | |
| 62 | return true; |
| 63 | } |
| 64 | |
| 65 | createChild( |
| 66 | name: string, |
| 67 | ): Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData> { |
| 68 | debug("creating child namespace %s", name); |
| 69 | const namespace = new Namespace(this.server, name); |
| 70 | this["_fns"].forEach((fn) => namespace.use(fn)); |
| 71 | this.listeners("connect").forEach((listener) => |
| 72 | namespace.on("connect", listener), |
| 73 | ); |
| 74 | this.listeners("connection").forEach((listener) => |
| 75 | namespace.on("connection", listener), |
| 76 | ); |
| 77 | this.children.add(namespace); |
| 78 | |
| 79 | if (this.server._opts.cleanupEmptyChildNamespaces) { |
| 80 | const remove = namespace._remove; |
| 81 | |
| 82 | namespace._remove = (socket) => { |
| 83 | remove.call(namespace, socket); |
| 84 | if (namespace.sockets.size === 0) { |
| 85 | debug("closing child namespace %s", name); |
| 86 | namespace.adapter.close(); |
| 87 | this.server._nsps.delete(namespace.name); |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…