|
|
|
@ -81,6 +81,12 @@ export class TelemetryWebsocketService extends WebsocketService<TelemetrySubscri |
|
|
|
const cmdId = this.nextCmdId(); |
|
|
|
if (!(subscriptionCommand instanceof MarkAsReadCmd) && !(subscriptionCommand instanceof MarkAllAsReadCmd)) { |
|
|
|
this.subscribersMap.set(cmdId, subscriber); |
|
|
|
let cmdIds = this.subscriberCmdIds.get(subscriber); |
|
|
|
if (!cmdIds) { |
|
|
|
cmdIds = new Set<number>(); |
|
|
|
this.subscriberCmdIds.set(subscriber, cmdIds); |
|
|
|
} |
|
|
|
cmdIds.add(cmdId); |
|
|
|
} |
|
|
|
subscriptionCommand.cmdId = cmdId; |
|
|
|
this.cmdWrapper.cmds.push(subscriptionCommand); |
|
|
|
@ -141,6 +147,13 @@ export class TelemetryWebsocketService extends WebsocketService<TelemetrySubscri |
|
|
|
const cmdId = subscriptionCommand.cmdId; |
|
|
|
if (cmdId) { |
|
|
|
this.subscribersMap.delete(cmdId); |
|
|
|
const cmdIds = this.subscriberCmdIds.get(subscriber); |
|
|
|
if (cmdIds) { |
|
|
|
cmdIds.delete(cmdId); |
|
|
|
if (cmdIds.size === 0) { |
|
|
|
this.subscriberCmdIds.delete(subscriber); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
); |
|
|
|
@ -183,11 +196,9 @@ export class TelemetryWebsocketService extends WebsocketService<TelemetrySubscri |
|
|
|
|
|
|
|
private syncCommandId(subscriptionCommand: WebsocketCmd, subscriber: TelemetrySubscriber) { |
|
|
|
if (!this.subscribersMap.has(subscriptionCommand.cmdId)) { |
|
|
|
for (const [cmdId, sub] of this.subscribersMap.entries()) { |
|
|
|
if (sub === subscriber) { |
|
|
|
subscriptionCommand.cmdId = cmdId; |
|
|
|
break; |
|
|
|
} |
|
|
|
const cmdIds = this.subscriberCmdIds.get(subscriber); |
|
|
|
if (cmdIds?.size) { |
|
|
|
subscriptionCommand.cmdId = cmdIds.values().next().value; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|