mirror of
https://gitlab.com/futo-org/fcast.git
synced 2025-06-24 21:25:23 +00:00
Receivers: Add support for sending session messages to specific sessions
This commit is contained in:
parent
2776bc398e
commit
18b50d2d38
3 changed files with 32 additions and 11 deletions
|
@ -48,7 +48,7 @@ export class ConnectionMonitor {
|
||||||
}
|
}
|
||||||
|
|
||||||
ConnectionMonitor.logger.debug(`Pinging session ${sessionId} with ${ConnectionMonitor.heartbeatRetries.get(sessionId)} retries left`);
|
ConnectionMonitor.logger.debug(`Pinging session ${sessionId} with ${ConnectionMonitor.heartbeatRetries.get(sessionId)} retries left`);
|
||||||
ConnectionMonitor.backendConnections.get(sessionId).send(Opcode.Ping, null);
|
ConnectionMonitor.backendConnections.get(sessionId).send(Opcode.Ping, null, sessionId);
|
||||||
ConnectionMonitor.heartbeatRetries.set(sessionId, ConnectionMonitor.heartbeatRetries.get(sessionId) === undefined ? 1 : ConnectionMonitor.heartbeatRetries.get(sessionId) + 1);
|
ConnectionMonitor.heartbeatRetries.set(sessionId, ConnectionMonitor.heartbeatRetries.get(sessionId) === undefined ? 1 : ConnectionMonitor.heartbeatRetries.get(sessionId) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,16 +36,27 @@ export class TcpListenerService {
|
||||||
server.close();
|
server.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
send(opcode: number, message = null) {
|
send(opcode: number, message = null, sessionId = null) {
|
||||||
// logger.info(`Sending message ${JSON.stringify(message)}`);
|
// logger.info(`Sending message ${JSON.stringify(message)}`);
|
||||||
this.sessions.forEach(session => {
|
|
||||||
|
if (sessionId) {
|
||||||
try {
|
try {
|
||||||
session.send(opcode, message);
|
this.sessionMap.get(sessionId)?.send(opcode, message);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.warn("Failed to send error.", e);
|
logger.warn("Failed to send error.", e);
|
||||||
session.close();
|
this.sessionMap.get(sessionId)?.close();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
else {
|
||||||
|
this.sessions.forEach(session => {
|
||||||
|
try {
|
||||||
|
session.send(opcode, message);
|
||||||
|
} catch (e) {
|
||||||
|
logger.warn("Failed to send error.", e);
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(sessionId: string) {
|
disconnect(sessionId: string) {
|
||||||
|
|
|
@ -36,15 +36,25 @@ export class WebSocketListenerService {
|
||||||
server.close();
|
server.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
send(opcode: number, message = null) {
|
send(opcode: number, message = null, sessionId = null) {
|
||||||
this.sessions.forEach(session => {
|
if (sessionId) {
|
||||||
try {
|
try {
|
||||||
session.send(opcode, message);
|
this.sessionMap.get(sessionId)?.send(opcode, message);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.warn("Failed to send error.", e);
|
logger.warn("Failed to send error.", e);
|
||||||
session.close();
|
this.sessionMap.get(sessionId)?.close();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
else {
|
||||||
|
this.sessions.forEach(session => {
|
||||||
|
try {
|
||||||
|
session.send(opcode, message);
|
||||||
|
} catch (e) {
|
||||||
|
logger.warn("Failed to send error.", e);
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(sessionId: string) {
|
disconnect(sessionId: string) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue