mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-04-19 12:57:17 +00:00
change MonitorService providers to injectable deps
This commit is contained in:
parent
a4ff05a82b
commit
9a16cf9e02
@ -90,9 +90,15 @@ import {
|
||||
MonitorManagerProxyClient,
|
||||
MonitorManagerProxyPath,
|
||||
} from '../common/protocol/monitor-service';
|
||||
import { MonitorServiceName } from './monitor-service';
|
||||
import { MonitorService, MonitorServiceName } from './monitor-service';
|
||||
import { MonitorSettingsProvider } from './monitor-settings/monitor-settings-provider';
|
||||
import { MonitorSettingsProviderImpl } from './monitor-settings/monitor-settings-provider-impl';
|
||||
import {
|
||||
MonitorServiceFactory,
|
||||
MonitorServiceFactoryOptions,
|
||||
} from './monitor-service-factory';
|
||||
import WebSocketProviderImpl from './web-socket/web-socket-provider-impl';
|
||||
import { WebSocketProvider } from './web-socket/web-socket-provider';
|
||||
|
||||
export default new ContainerModule((bind, unbind, isBound, rebind) => {
|
||||
bind(BackendApplication).toSelf().inSingletonScope();
|
||||
@ -204,9 +210,38 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
|
||||
// a single MonitorManager is responsible for handling the actual connections to the pluggable monitors
|
||||
bind(MonitorManager).toSelf().inSingletonScope();
|
||||
|
||||
// monitor service & factory bindings
|
||||
bind(MonitorSettingsProviderImpl).toSelf().inSingletonScope();
|
||||
bind(MonitorSettingsProvider).toService(MonitorSettingsProviderImpl);
|
||||
|
||||
bind(WebSocketProviderImpl).toSelf();
|
||||
bind(WebSocketProvider).toService(WebSocketProviderImpl);
|
||||
|
||||
bind(MonitorServiceFactory).toFactory(
|
||||
({ container }) =>
|
||||
(options: MonitorServiceFactoryOptions) => {
|
||||
const logger = container.get<ILogger>(ILogger);
|
||||
|
||||
const monitorSettingsProvider = container.get<MonitorSettingsProvider>(
|
||||
MonitorSettingsProvider
|
||||
);
|
||||
|
||||
const webSocketProvider =
|
||||
container.get<WebSocketProvider>(WebSocketProvider);
|
||||
|
||||
const { board, port, coreClientProvider } = options;
|
||||
|
||||
return new MonitorService(
|
||||
logger,
|
||||
monitorSettingsProvider,
|
||||
webSocketProvider,
|
||||
board,
|
||||
port,
|
||||
coreClientProvider
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
// Serial client provider per connected frontend.
|
||||
bind(ConnectionContainerModule).toConstantValue(
|
||||
ConnectionContainerModule.create(({ bind, bindBackendService }) => {
|
||||
|
@ -3,6 +3,7 @@ import { inject, injectable, named } from '@theia/core/shared/inversify';
|
||||
import { Board, Port, Status } from '../common/protocol';
|
||||
import { CoreClientAware } from './core-client-provider';
|
||||
import { MonitorService } from './monitor-service';
|
||||
import { MonitorServiceFactory } from './monitor-service-factory';
|
||||
import { PluggableMonitorSettings } from './monitor-settings/monitor-settings-provider';
|
||||
|
||||
type MonitorID = string;
|
||||
@ -17,6 +18,9 @@ export class MonitorManager extends CoreClientAware {
|
||||
// be started.
|
||||
private monitorServices = new Map<MonitorID, MonitorService>();
|
||||
|
||||
@inject(MonitorServiceFactory)
|
||||
private monitorServiceFactory: MonitorServiceFactory;
|
||||
|
||||
constructor(
|
||||
@inject(ILogger)
|
||||
@named(MonitorManagerName)
|
||||
@ -183,12 +187,11 @@ export class MonitorManager extends CoreClientAware {
|
||||
*/
|
||||
private createMonitor(board: Board, port: Port): MonitorService {
|
||||
const monitorID = this.monitorID(board, port);
|
||||
const monitor = new MonitorService(
|
||||
this.logger,
|
||||
const monitor = this.monitorServiceFactory({
|
||||
board,
|
||||
port,
|
||||
this.coreClientProvider
|
||||
);
|
||||
coreClientProvider: this.coreClientProvider,
|
||||
});
|
||||
this.monitorServices.set(monitorID, monitor);
|
||||
monitor.onDispose(
|
||||
(() => {
|
||||
|
18
arduino-ide-extension/src/node/monitor-service-factory.ts
Normal file
18
arduino-ide-extension/src/node/monitor-service-factory.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import { Board, Port } from '../common/protocol';
|
||||
import { CoreClientProvider } from './core-client-provider';
|
||||
import { MonitorService } from './monitor-service';
|
||||
|
||||
export const MonitorServiceFactory = Symbol('MonitorServiceFactory');
|
||||
export interface MonitorServiceFactory {
|
||||
(options: {
|
||||
board: Board;
|
||||
port: Port;
|
||||
coreClientProvider: CoreClientProvider;
|
||||
}): MonitorService;
|
||||
}
|
||||
|
||||
export interface MonitorServiceFactoryOptions {
|
||||
board: Board;
|
||||
port: Port;
|
||||
coreClientProvider: CoreClientProvider;
|
||||
}
|
@ -13,7 +13,6 @@ import {
|
||||
import { CoreClientAware, CoreClientProvider } from './core-client-provider';
|
||||
import { WebSocketProvider } from './web-socket/web-socket-provider';
|
||||
import { Port as gRPCPort } from 'arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/port_pb';
|
||||
import WebSocketProviderImpl from './web-socket/web-socket-provider-impl';
|
||||
import {
|
||||
PluggableMonitorSettings,
|
||||
MonitorSettingsProvider,
|
||||
@ -48,19 +47,16 @@ export class MonitorService extends CoreClientAware implements Disposable {
|
||||
protected readonly onDisposeEmitter = new Emitter<void>();
|
||||
readonly onDispose = this.onDisposeEmitter.event;
|
||||
|
||||
@inject(MonitorSettingsProvider)
|
||||
protected readonly monitorSettingsProvider: MonitorSettingsProvider;
|
||||
|
||||
// TODO: use dependency injection
|
||||
protected readonly webSocketProvider: WebSocketProvider =
|
||||
new WebSocketProviderImpl();
|
||||
|
||||
protected uploadInProgress = false;
|
||||
|
||||
constructor(
|
||||
@inject(ILogger)
|
||||
@named(MonitorServiceName)
|
||||
protected readonly logger: ILogger,
|
||||
@inject(MonitorSettingsProvider)
|
||||
protected readonly monitorSettingsProvider: MonitorSettingsProvider,
|
||||
@inject(WebSocketProvider)
|
||||
protected readonly webSocketProvider: WebSocketProvider,
|
||||
|
||||
private readonly board: Board,
|
||||
private readonly port: Port,
|
||||
|
@ -40,7 +40,7 @@ export class MonitorSettingsProviderImpl implements MonitorSettingsProvider {
|
||||
);
|
||||
|
||||
// read existing settings
|
||||
this.readFile();
|
||||
await this.readFile();
|
||||
|
||||
console.log(this.monitorSettings);
|
||||
this.ready.resolve();
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { Emitter } from '@theia/core';
|
||||
import { injectable } from '@theia/core/shared/inversify';
|
||||
import * as WebSocket from 'ws';
|
||||
import { WebSocketProvider } from './web-socket-provider';
|
||||
|
||||
@injectable()
|
||||
export default class WebSocketProviderImpl implements WebSocketProvider {
|
||||
protected wsClients: WebSocket[];
|
||||
protected server: WebSocket.Server;
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { Event } from '@theia/core/lib/common/event';
|
||||
import * as WebSocket from 'ws';
|
||||
|
||||
export const WebSocketProvider = Symbol('WebSocketProvider');
|
||||
export interface WebSocketProvider {
|
||||
getAddress(): WebSocket.AddressInfo;
|
||||
sendMessage(message: string): void;
|
||||
|
Loading…
x
Reference in New Issue
Block a user