vani-meeting-server 2.0.6 → 2.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/lib/redis/RedisHandler.d.ts +1 -0
- package/lib/lib/redis/RedisHandler.js +7 -0
- package/lib/sfu/SFUEachRoomHandler.js +1 -0
- package/lib/sfu/SFUEachRoomMutliServerHandler.js +22 -8
- package/lib/websocket/EachSocketConnectionHandler.d.ts +2 -1
- package/lib/websocket/EachSocketConnectionHandler.js +1 -0
- package/package.json +1 -1
|
@@ -22,6 +22,7 @@ export declare class RedisHandler {
|
|
|
22
22
|
ip: string;
|
|
23
23
|
port: number;
|
|
24
24
|
}[]>;
|
|
25
|
+
deleteIpForRoomId(roomId: string, ipAddress: string): Promise<void>;
|
|
25
26
|
storeMesagesForRoom(roomId: string, messagePayload: MessagePayload): Promise<void>;
|
|
26
27
|
fetchMessagesForRoom(roomId: string): Promise<MessagePayload[]>;
|
|
27
28
|
storeMeetingTimeForRoom(roomId: string, time?: number): Promise<void>;
|
|
@@ -62,6 +62,7 @@ class RedisHandler {
|
|
|
62
62
|
}
|
|
63
63
|
oldIps.push({ ip: ipAddress, port: ServerHandler_1.ServerHandler.getInstance().serverStartRequest.port });
|
|
64
64
|
await this.redisClient.hSet(roomId, RedisKeyType.IpAddress, JSON.stringify(oldIps));
|
|
65
|
+
this.updateRoomCleanupTimeOut(roomId);
|
|
65
66
|
}
|
|
66
67
|
async fetchIpsForRoomId(roomId) {
|
|
67
68
|
const ipAddress = await this.redisClient.hGet(roomId, RedisKeyType.IpAddress);
|
|
@@ -74,6 +75,12 @@ class RedisHandler {
|
|
|
74
75
|
return [];
|
|
75
76
|
}
|
|
76
77
|
}
|
|
78
|
+
async deleteIpForRoomId(roomId, ipAddress) {
|
|
79
|
+
const oldIps = await this.fetchIpsForRoomId(roomId);
|
|
80
|
+
const newIps = oldIps.filter((eachOldIp) => !(eachOldIp.ip === ipAddress && eachOldIp.port === ServerHandler_1.ServerHandler.getInstance().serverStartRequest.port));
|
|
81
|
+
await this.redisClient.hSet(roomId, RedisKeyType.IpAddress, JSON.stringify(newIps));
|
|
82
|
+
this.updateRoomCleanupTimeOut(roomId);
|
|
83
|
+
}
|
|
77
84
|
//Messages
|
|
78
85
|
async storeMesagesForRoom(roomId, messagePayload) {
|
|
79
86
|
const messages = await this.fetchMessagesForRoom(roomId);
|
|
@@ -388,6 +388,7 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
388
388
|
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnNewMeetingEnded, this.roomId);
|
|
389
389
|
}
|
|
390
390
|
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnAllParticipantLeftOnServer, this.roomId);
|
|
391
|
+
RedisHandler_1.RedisHandler.getInstance().deleteIpForRoomId(this.roomId, await Constant_1.default.getPublicIp());
|
|
391
392
|
this.eachRoomMutliserverHandler?.cleanUp();
|
|
392
393
|
this.eachRoomMutliserverHandler = undefined;
|
|
393
394
|
this.roomPaticipants.forEach((sfuEachRoomUser) => {
|
|
@@ -49,18 +49,22 @@ class SFUEachRoomMutliServerHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket
|
|
|
49
49
|
if (message.type === EachSocketConnectionHandler_1.MultiSystemEvents.OnNewServerJoinedForRoom) {
|
|
50
50
|
const pipeTransportAndPort = await this.createPipeTransport(message.data.ip);
|
|
51
51
|
if (pipeTransportAndPort) {
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
if (!pipeTransportAndPort.transport.tuple.remoteIp) {
|
|
53
|
+
await pipeTransportAndPort.transport?.connect({ ip: message.data.ip, port: message.data.port });
|
|
54
|
+
this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(message.roomId, message.data.ip), this.prepareMutilSystemEvents(EachSocketConnectionHandler_1.MultiSystemEvents.OnConnectPipe, message.roomId, { ip: await Constant_1.default.getPublicIp(), port: pipeTransportAndPort.port }));
|
|
55
|
+
}
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
else if (message.type === EachSocketConnectionHandler_1.MultiSystemEvents.OnConnectPipe) {
|
|
57
59
|
const ip = message.data.ip;
|
|
58
60
|
if (this.pipeTransports[ip]) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
if (!this.pipeTransports[ip].transport.tuple.remoteIp) {
|
|
62
|
+
await this.pipeTransports[ip].transport.connect({ ip: ip, port: message.data.port });
|
|
63
|
+
this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(message.roomId, message.data.ip), this.prepareMutilSystemEvents(EachSocketConnectionHandler_1.MultiSystemEvents.OnPipeConnected, message.roomId, { ip: await Constant_1.default.getPublicIp() }));
|
|
64
|
+
this.roomHandlerDataSource.getAllProducerForRoom().forEach(async (eachRoomProducer) => {
|
|
65
|
+
await this.consumeProductAndInfrom(this.pipeTransports[ip].transport, ip, eachRoomProducer);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
else if (message.type === EachSocketConnectionHandler_1.MultiSystemEvents.OnPipeConnected) {
|
|
@@ -85,6 +89,15 @@ class SFUEachRoomMutliServerHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket
|
|
|
85
89
|
this.onRemoteConsumerClosed(message.data.consumerId);
|
|
86
90
|
}
|
|
87
91
|
}
|
|
92
|
+
else if (message.type === EachSocketConnectionHandler_1.MultiSystemEvents.OnPipeClosed) {
|
|
93
|
+
console.log("on remote");
|
|
94
|
+
if (message.data.ip) {
|
|
95
|
+
if (this.pipeTransports[message.data.ip]) {
|
|
96
|
+
this.pipeTransports[message.data.ip].transport.close();
|
|
97
|
+
delete this.pipeTransports[message.data.ip];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
88
101
|
};
|
|
89
102
|
createPipeTransport = async (ip) => {
|
|
90
103
|
if (this.pipeTransports[ip]) {
|
|
@@ -97,11 +110,12 @@ class SFUEachRoomMutliServerHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket
|
|
|
97
110
|
listenIp: { ip: '0.0.0.0', announcedIp: await Constant_1.default.getPublicIp() }
|
|
98
111
|
});
|
|
99
112
|
if (pipeTransport) {
|
|
100
|
-
pipeTransport.on("@close", () => {
|
|
113
|
+
pipeTransport.on("@close", async () => {
|
|
101
114
|
console.log("Pipe Closed");
|
|
102
115
|
for (const key of Object.keys(this.pipeTransports)) {
|
|
103
116
|
if (this.pipeTransports[key].transport.id === pipeTransport.id) {
|
|
104
117
|
delete this.pipeTransports[key];
|
|
118
|
+
this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.roomId, key), this.prepareMutilSystemEvents(EachSocketConnectionHandler_1.MultiSystemEvents.OnPipeClosed, this.roomId, { ip: await Constant_1.default.getPublicIp() }));
|
|
105
119
|
break;
|
|
106
120
|
}
|
|
107
121
|
}
|
|
@@ -68,7 +68,8 @@ export declare enum MultiSystemEvents {
|
|
|
68
68
|
OnConsumerData = "OnConsumerData",
|
|
69
69
|
OnRemoteConsumerClosed = "OnRemoteConsumerClosed",
|
|
70
70
|
OnConnectPipe = "OnConnectPipe",
|
|
71
|
-
OnPipeConnected = "OnPipeConnected"
|
|
71
|
+
OnPipeConnected = "OnPipeConnected",
|
|
72
|
+
OnPipeClosed = "OnPipeClosed"
|
|
72
73
|
}
|
|
73
74
|
export declare enum LocalMessageType {
|
|
74
75
|
OnNewUserJoinedRoom = "onNewUserJoinedRoom",
|
|
@@ -87,6 +87,7 @@ var MultiSystemEvents;
|
|
|
87
87
|
MultiSystemEvents["OnRemoteConsumerClosed"] = "OnRemoteConsumerClosed";
|
|
88
88
|
MultiSystemEvents["OnConnectPipe"] = "OnConnectPipe";
|
|
89
89
|
MultiSystemEvents["OnPipeConnected"] = "OnPipeConnected";
|
|
90
|
+
MultiSystemEvents["OnPipeClosed"] = "OnPipeClosed";
|
|
90
91
|
})(MultiSystemEvents = exports.MultiSystemEvents || (exports.MultiSystemEvents = {}));
|
|
91
92
|
var LocalMessageType;
|
|
92
93
|
(function (LocalMessageType) {
|