ignore expected workspace stops when showing disconnect modal
This commit is contained in:
@@ -24,8 +24,8 @@ export class InstanceEventBridge {
|
|||||||
constructor(private readonly options: InstanceEventBridgeOptions) {
|
constructor(private readonly options: InstanceEventBridgeOptions) {
|
||||||
const bus = this.options.eventBus
|
const bus = this.options.eventBus
|
||||||
bus.on("workspace.started", (event) => this.startStream(event.workspace.id))
|
bus.on("workspace.started", (event) => this.startStream(event.workspace.id))
|
||||||
bus.on("workspace.stopped", (event) => this.stopStream(event.workspaceId))
|
bus.on("workspace.stopped", (event) => this.stopStream(event.workspaceId, "workspace stopped"))
|
||||||
bus.on("workspace.error", (event) => this.stopStream(event.workspace.id))
|
bus.on("workspace.error", (event) => this.stopStream(event.workspace.id, "workspace error"))
|
||||||
}
|
}
|
||||||
|
|
||||||
shutdown() {
|
shutdown() {
|
||||||
@@ -59,14 +59,14 @@ export class InstanceEventBridge {
|
|||||||
this.streams.set(workspaceId, { controller, task })
|
this.streams.set(workspaceId, { controller, task })
|
||||||
}
|
}
|
||||||
|
|
||||||
private stopStream(workspaceId: string) {
|
private stopStream(workspaceId: string, reason?: string) {
|
||||||
const active = this.streams.get(workspaceId)
|
const active = this.streams.get(workspaceId)
|
||||||
if (!active) {
|
if (!active) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
active.controller.abort()
|
active.controller.abort()
|
||||||
this.streams.delete(workspaceId)
|
this.streams.delete(workspaceId)
|
||||||
this.publishStatus(workspaceId, "disconnected")
|
this.publishStatus(workspaceId, "disconnected", reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
private async runStream(workspaceId: string, signal: AbortSignal) {
|
private async runStream(workspaceId: string, signal: AbortSignal) {
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ class SSEManager {
|
|||||||
const payload = event as InstanceStatusPayload
|
const payload = event as InstanceStatusPayload
|
||||||
this.updateConnectionStatus(payload.instanceId, payload.status)
|
this.updateConnectionStatus(payload.instanceId, payload.status)
|
||||||
if (payload.status === "disconnected") {
|
if (payload.status === "disconnected") {
|
||||||
|
if (payload.reason === "workspace stopped") {
|
||||||
|
return
|
||||||
|
}
|
||||||
const reason = payload.reason ?? "Instance disconnected"
|
const reason = payload.reason ?? "Instance disconnected"
|
||||||
void this.onConnectionLost?.(payload.instanceId, reason)
|
void this.onConnectionLost?.(payload.instanceId, reason)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user