diff --git a/packages/backrpc/src/client.ts b/packages/backrpc/src/client.ts index 18ad544f57..16160d0d8f 100644 --- a/packages/backrpc/src/client.ts +++ b/packages/backrpc/src/client.ts @@ -48,6 +48,8 @@ export class BackRPCClient { stopTick?: () => void + lastPong: number = 0 + constructor ( readonly clientId: ClientT, readonly client: BackRPCClientHandler, @@ -190,6 +192,18 @@ export class BackRPCClient { ) }) } + break + } + case backrpcOperations.pong: { + // Server it all fine + this.lastPong = this.tickMgr.now() + break + } + case backrpcOperations.askHello: { + // Server ask us to re-hello, probably because it has restarted + this.serverId = '' // Clear server id for re-register to be performed + await this.sendHello() + break } } } catch (err: any) { diff --git a/packages/backrpc/src/server.ts b/packages/backrpc/src/server.ts index 192bc3e0c2..74bb0df035 100644 --- a/packages/backrpc/src/server.ts +++ b/packages/backrpc/src/server.ts @@ -209,6 +209,9 @@ export class BackRPCServer { void this.doSend([clientId, backrpcOperations.pong, this.uuid, '']) if (client !== undefined) { this.handlers.onPing?.(client?.id) + } else { + // Ping from undefined client mean, we remove it because of inactivity, so we could ask for hello. + void this.doSend([clientId, backrpcOperations.askHello, this.uuid, '']) } break } diff --git a/packages/backrpc/src/types.ts b/packages/backrpc/src/types.ts index 4b1210c936..9d9d61a4c7 100644 --- a/packages/backrpc/src/types.ts +++ b/packages/backrpc/src/types.ts @@ -7,7 +7,8 @@ export const backrpcOperations = { ping: 5, pong: 6, retry: 7, - close: 8 + close: 8, + askHello: 9 } export type ClientId = string & { __clientId: string }