Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 077dff8

Browse files
committedMay 23, 2022
Merge branch 'pluggable-monitor-class-refactoring' into pluggable-monitor
2 parents c0a9bbb + 9a16cf9 commit 077dff8

File tree

7 files changed

+69
-14
lines changed

7 files changed

+69
-14
lines changed
 

‎arduino-ide-extension/src/node/arduino-ide-backend-module.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,15 @@ import {
9090
MonitorManagerProxyClient,
9191
MonitorManagerProxyPath,
9292
} from '../common/protocol/monitor-service';
93-
import { MonitorServiceName } from './monitor-service';
93+
import { MonitorService, MonitorServiceName } from './monitor-service';
9494
import { MonitorSettingsProvider } from './monitor-settings/monitor-settings-provider';
9595
import { MonitorSettingsProviderImpl } from './monitor-settings/monitor-settings-provider-impl';
96+
import {
97+
MonitorServiceFactory,
98+
MonitorServiceFactoryOptions,
99+
} from './monitor-service-factory';
100+
import WebSocketProviderImpl from './web-socket/web-socket-provider-impl';
101+
import { WebSocketProvider } from './web-socket/web-socket-provider';
96102

97103
export default new ContainerModule((bind, unbind, isBound, rebind) => {
98104
bind(BackendApplication).toSelf().inSingletonScope();
@@ -204,9 +210,38 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
204210
// a single MonitorManager is responsible for handling the actual connections to the pluggable monitors
205211
bind(MonitorManager).toSelf().inSingletonScope();
206212

213+
// monitor service & factory bindings
207214
bind(MonitorSettingsProviderImpl).toSelf().inSingletonScope();
208215
bind(MonitorSettingsProvider).toService(MonitorSettingsProviderImpl);
209216

217+
bind(WebSocketProviderImpl).toSelf();
218+
bind(WebSocketProvider).toService(WebSocketProviderImpl);
219+
220+
bind(MonitorServiceFactory).toFactory(
221+
({ container }) =>
222+
(options: MonitorServiceFactoryOptions) => {
223+
const logger = container.get<ILogger>(ILogger);
224+
225+
const monitorSettingsProvider = container.get<MonitorSettingsProvider>(
226+
MonitorSettingsProvider
227+
);
228+
229+
const webSocketProvider =
230+
container.get<WebSocketProvider>(WebSocketProvider);
231+
232+
const { board, port, coreClientProvider } = options;
233+
234+
return new MonitorService(
235+
logger,
236+
monitorSettingsProvider,
237+
webSocketProvider,
238+
board,
239+
port,
240+
coreClientProvider
241+
);
242+
}
243+
);
244+
210245
// Serial client provider per connected frontend.
211246
bind(ConnectionContainerModule).toConstantValue(
212247
ConnectionContainerModule.create(({ bind, bindBackendService }) => {

‎arduino-ide-extension/src/node/monitor-manager.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { inject, injectable, named } from '@theia/core/shared/inversify';
33
import { Board, Port, Status } from '../common/protocol';
44
import { CoreClientAware } from './core-client-provider';
55
import { MonitorService } from './monitor-service';
6+
import { MonitorServiceFactory } from './monitor-service-factory';
67
import { PluggableMonitorSettings } from './monitor-settings/monitor-settings-provider';
78

89
type MonitorID = string;
@@ -17,6 +18,9 @@ export class MonitorManager extends CoreClientAware {
1718
// be started.
1819
private monitorServices = new Map<MonitorID, MonitorService>();
1920

21+
@inject(MonitorServiceFactory)
22+
private monitorServiceFactory: MonitorServiceFactory;
23+
2024
constructor(
2125
@inject(ILogger)
2226
@named(MonitorManagerName)
@@ -183,12 +187,11 @@ export class MonitorManager extends CoreClientAware {
183187
*/
184188
private createMonitor(board: Board, port: Port): MonitorService {
185189
const monitorID = this.monitorID(board, port);
186-
const monitor = new MonitorService(
187-
this.logger,
190+
const monitor = this.monitorServiceFactory({
188191
board,
189192
port,
190-
this.coreClientProvider
191-
);
193+
coreClientProvider: this.coreClientProvider,
194+
});
192195
this.monitorServices.set(monitorID, monitor);
193196
monitor.onDispose(
194197
(() => {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Board, Port } from '../common/protocol';
2+
import { CoreClientProvider } from './core-client-provider';
3+
import { MonitorService } from './monitor-service';
4+
5+
export const MonitorServiceFactory = Symbol('MonitorServiceFactory');
6+
export interface MonitorServiceFactory {
7+
(options: {
8+
board: Board;
9+
port: Port;
10+
coreClientProvider: CoreClientProvider;
11+
}): MonitorService;
12+
}
13+
14+
export interface MonitorServiceFactoryOptions {
15+
board: Board;
16+
port: Port;
17+
coreClientProvider: CoreClientProvider;
18+
}

‎arduino-ide-extension/src/node/monitor-service.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
import { CoreClientAware, CoreClientProvider } from './core-client-provider';
1414
import { WebSocketProvider } from './web-socket/web-socket-provider';
1515
import { Port as gRPCPort } from 'arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/port_pb';
16-
import WebSocketProviderImpl from './web-socket/web-socket-provider-impl';
1716
import {
1817
PluggableMonitorSettings,
1918
MonitorSettingsProvider,
@@ -48,19 +47,16 @@ export class MonitorService extends CoreClientAware implements Disposable {
4847
protected readonly onDisposeEmitter = new Emitter<void>();
4948
readonly onDispose = this.onDisposeEmitter.event;
5049

51-
@inject(MonitorSettingsProvider)
52-
protected readonly monitorSettingsProvider: MonitorSettingsProvider;
53-
54-
// TODO: use dependency injection
55-
protected readonly webSocketProvider: WebSocketProvider =
56-
new WebSocketProviderImpl();
57-
5850
protected uploadInProgress = false;
5951

6052
constructor(
6153
@inject(ILogger)
6254
@named(MonitorServiceName)
6355
protected readonly logger: ILogger,
56+
@inject(MonitorSettingsProvider)
57+
protected readonly monitorSettingsProvider: MonitorSettingsProvider,
58+
@inject(WebSocketProvider)
59+
protected readonly webSocketProvider: WebSocketProvider,
6460

6561
private readonly board: Board,
6662
private readonly port: Port,

‎arduino-ide-extension/src/node/monitor-settings/monitor-settings-provider-impl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export class MonitorSettingsProviderImpl implements MonitorSettingsProvider {
4141
);
4242

4343
// read existing settings
44-
this.readSettingsFromFS();
44+
await this.readSettingsFromFS();
4545

4646
console.log(this.monitorSettings);
4747

‎arduino-ide-extension/src/node/web-socket/web-socket-provider-impl.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { Emitter } from '@theia/core';
2+
import { injectable } from '@theia/core/shared/inversify';
23
import * as WebSocket from 'ws';
34
import { WebSocketProvider } from './web-socket-provider';
45

6+
@injectable()
57
export default class WebSocketProviderImpl implements WebSocketProvider {
68
protected wsClients: WebSocket[];
79
protected server: WebSocket.Server;

‎arduino-ide-extension/src/node/web-socket/web-socket-provider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Event } from '@theia/core/lib/common/event';
22
import * as WebSocket from 'ws';
33

4+
export const WebSocketProvider = Symbol('WebSocketProvider');
45
export interface WebSocketProvider {
56
getAddress(): WebSocket.AddressInfo;
67
sendMessage(message: string): void;

0 commit comments

Comments
 (0)
Please sign in to comment.