mirror of
https://github.com/nvms/prsm.git
synced 2025-12-16 16:10:54 +00:00
add onConnection and onDisconnection
This commit is contained in:
parent
b4751aefe8
commit
51fc280d8b
@ -1089,4 +1089,30 @@ export class MeshServer extends WebSocketServer {
|
|||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a callback function to be executed when a new connection is established.
|
||||||
|
*
|
||||||
|
* @param {(connection: Connection) => Promise<void> | void} callback - The function to execute when a new connection is established.
|
||||||
|
* @returns {MeshServer} The server instance for method chaining.
|
||||||
|
*/
|
||||||
|
onConnection(
|
||||||
|
callback: (connection: Connection) => Promise<void> | void
|
||||||
|
): MeshServer {
|
||||||
|
this.on("connected", callback);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a callback function to be executed when a connection is closed.
|
||||||
|
*
|
||||||
|
* @param {(connection: Connection) => Promise<void> | void} callback - The function to execute when a connection is closed.
|
||||||
|
* @returns {MeshServer} The server instance for method chaining.
|
||||||
|
*/
|
||||||
|
onDisconnection(
|
||||||
|
callback: (connection: Connection) => Promise<void> | void
|
||||||
|
): MeshServer {
|
||||||
|
this.on("disconnected", callback);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,9 @@ const flushRedis = async () => {
|
|||||||
await redis.quit();
|
await redis.quit();
|
||||||
};
|
};
|
||||||
|
|
||||||
describe("KeepAliveServer", () => {
|
const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
|
|
||||||
|
describe("MeshServer", () => {
|
||||||
const port = 8126;
|
const port = 8126;
|
||||||
let server: MeshServer;
|
let server: MeshServer;
|
||||||
let clientA: MeshClient;
|
let clientA: MeshClient;
|
||||||
@ -129,5 +131,58 @@ describe("KeepAliveServer", () => {
|
|||||||
await server.connectionManager.getAllMetadataForRoom("room-b");
|
await server.connectionManager.getAllMetadataForRoom("room-b");
|
||||||
expect(roomBMetadata).toEqual([{ [connectionB.id]: metadataB }]);
|
expect(roomBMetadata).toEqual([{ [connectionB.id]: metadataB }]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("onConnection callback is executed when a client connects", async () => {
|
||||||
|
let connectionReceived: any = null;
|
||||||
|
const connectionPromise = new Promise<void>((resolve) => {
|
||||||
|
server.onConnection((connection) => {
|
||||||
|
connectionReceived = connection;
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
await clientA.connect();
|
||||||
|
await connectionPromise;
|
||||||
|
|
||||||
|
expect(connectionReceived).not.toBeNull();
|
||||||
|
|
||||||
|
if (!connectionReceived) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(connectionReceived.id).toBeDefined();
|
||||||
|
expect(connectionReceived.isDead).toBe(false);
|
||||||
|
|
||||||
|
const connections = server.connectionManager.getLocalConnections();
|
||||||
|
expect(connections).toContain(connectionReceived);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("onDisconnection callback is executed when a client disconnects", async () => {
|
||||||
|
let disconnectedConnection: any = null;
|
||||||
|
const disconnectionPromise = new Promise<void>((resolve) => {
|
||||||
|
server.onDisconnection((connection) => {
|
||||||
|
disconnectedConnection = connection;
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
await clientA.connect();
|
||||||
|
await wait(100);
|
||||||
|
const connections = server.connectionManager.getLocalConnections();
|
||||||
|
const connectionBeforeDisconnect = connections[0];
|
||||||
|
|
||||||
|
expect(connectionBeforeDisconnect).toBeDefined();
|
||||||
|
const connectionId = connectionBeforeDisconnect?.id;
|
||||||
|
|
||||||
|
await clientA.close();
|
||||||
|
await disconnectionPromise;
|
||||||
|
|
||||||
|
expect(disconnectedConnection).not.toBeNull();
|
||||||
|
|
||||||
|
if (disconnectedConnection && connectionId) {
|
||||||
|
expect(disconnectedConnection.id).toBe(connectionId);
|
||||||
|
expect(disconnectedConnection.isDead).toBe(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -23,7 +23,7 @@ const flushRedis = async () => {
|
|||||||
await redis.quit();
|
await redis.quit();
|
||||||
};
|
};
|
||||||
|
|
||||||
describe("KeepAliveClient", () => {
|
describe("MeshClient", () => {
|
||||||
const port = 8127;
|
const port = 8127;
|
||||||
let server: MeshServer;
|
let server: MeshServer;
|
||||||
let client: MeshClient;
|
let client: MeshClient;
|
||||||
|
|||||||
@ -23,7 +23,7 @@ const flushRedis = async () => {
|
|||||||
await redis.quit();
|
await redis.quit();
|
||||||
};
|
};
|
||||||
|
|
||||||
describe("KeepAliveServer", () => {
|
describe("MeshServer", () => {
|
||||||
const port = 8128;
|
const port = 8128;
|
||||||
let server: MeshServer;
|
let server: MeshServer;
|
||||||
let clientA: MeshClient;
|
let clientA: MeshClient;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user