diff --git a/lib/parent-namespace.ts b/lib/parent-namespace.ts index 63e7ce56e2..5a158b74e8 100644 --- a/lib/parent-namespace.ts +++ b/lib/parent-namespace.ts @@ -48,7 +48,7 @@ export class ParentNamespace< * @private */ _initAdapter(): void { - this.adapter = new ParentBroadcastAdapter(this, this.children); + this.adapter = new ParentBroadcastAdapter(this); } public emit>( @@ -113,12 +113,8 @@ export class ParentNamespace< * @private file */ class ParentBroadcastAdapter extends Adapter { - constructor(parentNsp: any, private readonly children: Set) { - super(parentNsp); - } - broadcast(packet: any, opts: BroadcastOptions) { - this.children.forEach((nsp) => { + this.nsp.children.forEach((nsp) => { nsp.adapter.broadcast(packet, opts); }); } diff --git a/test/namespaces.ts b/test/namespaces.ts index ffe9602c30..621c589cef 100644 --- a/test/namespaces.ts +++ b/test/namespaces.ts @@ -525,6 +525,37 @@ describe("namespaces", () => { }); }); + it("should allow connections to dynamic namespaces with a regex and emit in a room", (done) => { + const io = new Server(0); + const socket = createClient(io, "/dynamic-101"); + const partialDone = createPartialDone(4, successFn(done, io, socket)); + + let dynamicNsp = io + .of(/^\/dynamic-\d+$/) + .on("connect", (socket) => { + expect(socket.nsp.name).to.be("/dynamic-101"); + socket.join("some-room"); + dynamicNsp.to("some-room").emit("hello", 4, "3", { 2: "1" }); + partialDone(); + }) + .use((socket, next) => { + next(); + partialDone(); + }); + socket.on("connect_error", (err) => { + expect().fail(); + }); + socket.on("connect", () => { + partialDone(); + }); + socket.on("hello", (a, b, c) => { + expect(a).to.eql(4); + expect(b).to.eql("3"); + expect(c).to.eql({ 2: "1" }); + partialDone(); + }); + }); + it("should allow connections to dynamic namespaces with a function", (done) => { const io = new Server(0); const socket = createClient(io, "/dynamic-101");