diff --git a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts index fea0754b..5f003e7c 100644 --- a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts @@ -152,7 +152,7 @@ import { OutputChannelRegistryMainImpl as TheiaOutputChannelRegistryMainImpl, OutputChannelRegistryMainImpl, } from './theia/plugin-ext/output-channel-registry-main'; -import { ExecutableService, ExecutableServicePath, MonitorManagerProxy, MonitorManagerProxyClient, MonitorManagerProxyPath } from '../common/protocol'; +import { ExecutableService, ExecutableServicePath, MonitorManagerProxy, MonitorManagerProxyClient, MonitorManagerProxyFactory, MonitorManagerProxyPath } from '../common/protocol'; import { MonacoTextModelService as TheiaMonacoTextModelService } from '@theia/monaco/lib/browser/monaco-text-model-service'; import { MonacoTextModelService } from './theia/monaco/monaco-text-model-service'; import { ResponseServiceImpl } from './response-service-impl'; @@ -417,8 +417,10 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { } })); + bind(MonitorManagerProxyFactory).toFactory((context) => () => context.container.get(MonitorManagerProxy)) + bind(MonitorManagerProxy).toDynamicValue((context) => - WebSocketConnectionProvider.createProxy(context.container, MonitorManagerProxyPath) + WebSocketConnectionProvider.createProxy(context.container, MonitorManagerProxyPath, context.container.get(MonitorManagerProxyClient)) ).inSingletonScope(); // Monitor manager proxy client to receive and delegate pluggable monitors diff --git a/arduino-ide-extension/src/browser/monitor-manager-proxy-client-impl.ts b/arduino-ide-extension/src/browser/monitor-manager-proxy-client-impl.ts index 7af890a4..3666238a 100644 --- a/arduino-ide-extension/src/browser/monitor-manager-proxy-client-impl.ts +++ b/arduino-ide-extension/src/browser/monitor-manager-proxy-client-impl.ts @@ -1,7 +1,7 @@ -import { Emitter, JsonRpcProxy, MessageService } from "@theia/core"; +import { Emitter, MessageService } from "@theia/core"; import { inject, injectable } from "@theia/core/shared/inversify"; import { Board, Port } from "../common/protocol"; -import { Monitor, MonitorManagerProxy, MonitorManagerProxyClient, MonitorSettings } from "../common/protocol/monitor-service"; +import { Monitor, MonitorManagerProxyClient, MonitorManagerProxyFactory, MonitorSettings } from "../common/protocol/monitor-service"; @injectable() export class MonitorManagerProxyClientImpl implements MonitorManagerProxyClient { @@ -26,8 +26,8 @@ export class MonitorManagerProxyClientImpl implements MonitorManagerProxyClient protected messageService: MessageService, // This is necessary to call the backend methods from the frontend - @inject(MonitorManagerProxy) - protected server: JsonRpcProxy + @inject(MonitorManagerProxyFactory) + protected server: MonitorManagerProxyFactory ) { } @@ -71,11 +71,11 @@ export class MonitorManagerProxyClientImpl implements MonitorManagerProxyClient } async startMonitor(board: Board, port: Port, settings?: MonitorSettings): Promise { - return this.server.startMonitor(board, port, settings); + return this.server().startMonitor(board, port, settings); } getCurrentSettings(board: Board, port: Port): MonitorSettings { - return this.server.getCurrentSettings(board, port); + return this.server().getCurrentSettings(board, port); } send(message: string): void { diff --git a/arduino-ide-extension/src/common/protocol/monitor-service.ts b/arduino-ide-extension/src/common/protocol/monitor-service.ts index 71c4b7e6..71dcbc4c 100644 --- a/arduino-ide-extension/src/common/protocol/monitor-service.ts +++ b/arduino-ide-extension/src/common/protocol/monitor-service.ts @@ -1,6 +1,9 @@ import { Event, JsonRpcServer } from "@theia/core"; import { Board, Port } from './boards-service'; +export const MonitorManagerProxyFactory = Symbol('MonitorManagerProxyFactory'); +export type MonitorManagerProxyFactory = () => MonitorManagerProxy; + export const MonitorManagerProxyPath = '/services/monitor-manager-proxy'; export const MonitorManagerProxy = Symbol('MonitorManagerProxy'); export interface MonitorManagerProxy extends JsonRpcServer {