diff --git a/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java b/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java index 0cdb82b612..9274b989dd 100644 --- a/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java +++ b/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java @@ -188,6 +188,7 @@ public class TbWebSocketHandler extends TextWebSocketHandler implements WebSocke sessionRef.setSecurityCtx(securityCtx); pendingSessions.invalidate(sessionMd.session.getId()); establishSession(sessionMd.session, sessionRef, sessionMd); + webSocketService.handleCommands(sessionRef, cmdsWrapper); } } diff --git a/ui-ngx/src/app/core/ws/websocket.service.ts b/ui-ngx/src/app/core/ws/websocket.service.ts index 82b2ec2453..fa66c49c33 100644 --- a/ui-ngx/src/app/core/ws/websocket.service.ts +++ b/ui-ngx/src/app/core/ws/websocket.service.ts @@ -22,7 +22,6 @@ import { NgZone } from '@angular/core'; import { selectIsAuthenticated } from '@core/auth/auth.selectors'; import { webSocket, WebSocketSubject } from 'rxjs/webSocket'; import { - AuthCmd, AuthWsCmd, CmdUpdateMsg, NotificationSubscriber, @@ -196,7 +195,7 @@ export abstract class WebsocketService implements WsServ private onOpen(token: string) { this.isOpening = false; this.isOpened = true; - this.dataStream.next(this.createdAuthMsg(token)); + this.cmdWrapper.setAuth(token); if (this.reconnectTimer) { clearTimeout(this.reconnectTimer); this.reconnectTimer = null; @@ -266,10 +265,4 @@ export abstract class WebsocketService implements WsServ message, type: 'error' })); } - - private createdAuthMsg(token: string): AuthWsCmd { - return { - authCmd: new AuthCmd(token) - }; - } } diff --git a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts index 03c7b5e267..e56941f688 100644 --- a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts +++ b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts @@ -348,6 +348,7 @@ export class TelemetryPluginCmdsWrapper implements CmdWrapper { } cmds: Array; + authCmd: AuthCmd; private static popCmds(cmds: Array, leftCount: number): Array { const toPublish = Math.min(cmds.length, leftCount); @@ -358,6 +359,10 @@ export class TelemetryPluginCmdsWrapper implements CmdWrapper { } } + public setAuth(token: string) { + this.authCmd = new AuthCmd(token); + } + public hasCommands(): boolean { return this.cmds.length > 0; } @@ -368,6 +373,10 @@ export class TelemetryPluginCmdsWrapper implements CmdWrapper { public preparePublishCommands(maxCommands: number): TelemetryPluginCmdsWrapper { const preparedWrapper = new TelemetryPluginCmdsWrapper(); + if (this.authCmd) { + preparedWrapper.authCmd = this.authCmd; + this.authCmd = null; + } preparedWrapper.cmds = TelemetryPluginCmdsWrapper.popCmds(this.cmds, maxCommands); return preparedWrapper; } diff --git a/ui-ngx/src/app/shared/models/websocket/websocket.models.ts b/ui-ngx/src/app/shared/models/websocket/websocket.models.ts index fc7fc3d15c..9b88692b51 100644 --- a/ui-ngx/src/app/shared/models/websocket/websocket.models.ts +++ b/ui-ngx/src/app/shared/models/websocket/websocket.models.ts @@ -25,6 +25,7 @@ export interface WsService { } export abstract class CmdWrapper { + abstract setAuth(token: string); abstract hasCommands(): boolean; abstract clear(): void; abstract preparePublishCommands(maxCommands: number): CmdWrapper;