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