Skip to content

Commit 86977d2

Browse files
committed
More progress
1 parent c878f3a commit 86977d2

File tree

3 files changed

+28
-64
lines changed

3 files changed

+28
-64
lines changed

packages/cloud/src/bridge/BridgeOrchestrator.ts

Lines changed: 18 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import crypto from "crypto"
22
import os from "os"
33

4+
import type { Socket } from "socket.io-client"
5+
46
import {
57
type TaskProviderLike,
68
type CloudUserInfo,
@@ -91,7 +93,7 @@ export class BridgeOrchestrator {
9193
await options.provider.getTelemetryProperties()
9294

9395
BridgeOrchestrator.instance = new BridgeOrchestrator(options)
94-
await BridgeOrchestrator.instance.connect()
96+
await BridgeOrchestrator.instance.socketTransport.connect()
9597
} catch (error) {
9698
console.error(
9799
`[BridgeOrchestrator#connectOrDisconnect] connect() failed: ${error instanceof Error ? error.message : String(error)}`,
@@ -103,7 +105,7 @@ export class BridgeOrchestrator {
103105
if (connectionState === ConnectionState.FAILED || connectionState === ConnectionState.DISCONNECTED) {
104106
console.log(`[BridgeOrchestrator#connectOrDisconnect] Re-connecting... (state: ${connectionState})`)
105107

106-
instance.reconnect().catch((error) => {
108+
instance.socketTransport.reconnect().catch((error) => {
107109
console.error(
108110
`[BridgeOrchestrator#connectOrDisconnect] reconnect() failed: ${error instanceof Error ? error.message : String(error)}`,
109111
)
@@ -124,7 +126,7 @@ export class BridgeOrchestrator {
124126

125127
try {
126128
console.log(`[BridgeOrchestrator#connectOrDisconnect] Disconnecting... (state: ${connectionState})`)
127-
await instance.disconnect()
129+
await instance.socketTransport.disconnect()
128130
} catch (error) {
129131
console.error(
130132
`[BridgeOrchestrator#connectOrDisconnect] disconnect() failed: ${error instanceof Error ? error.message : String(error)}`,
@@ -161,9 +163,18 @@ export class BridgeOrchestrator {
161163
reconnectionDelay: this.RECONNECT_DELAY,
162164
reconnectionDelayMax: this.RECONNECT_DELAY_MAX,
163165
},
164-
onConnect: () => this.handleConnect(),
165-
onDisconnect: () => this.handleDisconnect(),
166-
onReconnect: () => this.handleReconnect(),
166+
onConnect: async (socket: Socket) => {
167+
this.setupSocketListeners()
168+
await this.extensionChannel.onConnect(socket)
169+
},
170+
onDisconnect: async () => {
171+
await this.extensionChannel.onDisconnect()
172+
await this.extensionChannel.cleanup(this.socketTransport.getSocket())
173+
},
174+
onReconnect: async (socket: Socket) => {
175+
this.setupSocketListeners()
176+
await this.extensionChannel.onReconnect(socket)
177+
},
167178
})
168179

169180
this.extensionChannel = new ExtensionChannel({
@@ -193,54 +204,7 @@ export class BridgeOrchestrator {
193204
`[BridgeOrchestrator] on(${ExtensionSocketEvents.RELAYED_COMMAND}) -> ${message.type} for ${message.instanceId}`,
194205
)
195206

196-
this.extensionChannel?.handleCommand(message)
207+
this.extensionChannel.handleCommand(message)
197208
})
198209
}
199-
200-
private async handleConnect() {
201-
const socket = this.socketTransport.getSocket()
202-
203-
if (!socket) {
204-
console.error("[BridgeOrchestrator#handleConnect] Socket not available")
205-
return
206-
}
207-
208-
await this.extensionChannel.onConnect(socket)
209-
}
210-
211-
private handleDisconnect() {
212-
this.extensionChannel.onDisconnect()
213-
}
214-
215-
private async handleReconnect() {
216-
const socket = this.socketTransport.getSocket()
217-
218-
if (!socket) {
219-
console.error("[BridgeOrchestrator] Socket not available after reconnect")
220-
return
221-
}
222-
223-
// Re-setup socket listeners to ensure they're properly configured
224-
// after automatic reconnection (Socket.IO's built-in reconnection)
225-
// The socket.off() calls in setupSocketListeners prevent duplicates
226-
this.setupSocketListeners()
227-
228-
await this.extensionChannel.onReconnect(socket)
229-
}
230-
231-
private async connect(): Promise<void> {
232-
await this.socketTransport.connect()
233-
this.setupSocketListeners()
234-
}
235-
236-
private async disconnect(): Promise<void> {
237-
await this.extensionChannel.cleanup(this.socketTransport.getSocket())
238-
await this.socketTransport.disconnect()
239-
BridgeOrchestrator.instance = null
240-
}
241-
242-
private async reconnect(): Promise<void> {
243-
await this.socketTransport.reconnect()
244-
this.setupSocketListeners()
245-
}
246210
}

packages/cloud/src/bridge/ExtensionChannel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export class ExtensionChannel {
7575
this.startHeartbeat(socket)
7676
}
7777

78-
public onDisconnect(): void {
78+
public async onDisconnect(): Promise<void> {
7979
this.socket = null
8080
this.stopHeartbeat()
8181
}

packages/cloud/src/bridge/SocketTransport.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import { ConnectionState, type RetryConfig } from "@roo-code/types"
55
export interface SocketTransportOptions {
66
url: string
77
socketOptions: Partial<ManagerOptions & SocketOptions>
8-
onConnect?: () => void | Promise<void>
9-
onDisconnect?: (reason: string) => void
10-
onReconnect?: () => void | Promise<void>
8+
onConnect?: (socket: Socket) => Promise<void>
9+
onDisconnect?: (reason: string) => Promise<void>
10+
onReconnect?: (socket: Socket) => Promise<void>
1111
logger?: {
1212
log: (message: string, ...args: unknown[]) => void
1313
error: (message: string, ...args: unknown[]) => void
@@ -126,12 +126,12 @@ export class SocketTransport {
126126
this.connectionState = ConnectionState.CONNECTED
127127

128128
if (this.isPreviouslyConnected) {
129-
if (this.options.onReconnect) {
130-
await this.options.onReconnect()
129+
if (this.options.onReconnect && this.socket) {
130+
await this.options.onReconnect(this.socket)
131131
}
132132
} else {
133-
if (this.options.onConnect) {
134-
await this.options.onConnect()
133+
if (this.options.onConnect && this.socket) {
134+
await this.options.onConnect(this.socket)
135135
}
136136
}
137137

@@ -195,8 +195,8 @@ export class SocketTransport {
195195
console.log(`[SocketTransport#_connect] on(reconnect) - ${attempt}`)
196196
this.connectionState = ConnectionState.CONNECTED
197197

198-
if (this.options.onReconnect) {
199-
this.options.onReconnect()
198+
if (this.options.onReconnect && this.socket) {
199+
this.options.onReconnect(this.socket)
200200
}
201201
})
202202

0 commit comments

Comments
 (0)