11import { ClientDuplexStream } from '@grpc/grpc-js' ;
22import { Disposable , Emitter , ILogger } from '@theia/core' ;
3- import { inject , named } from '@theia/core/shared/inversify' ;
3+ import { inject , named , postConstruct } from '@theia/core/shared/inversify' ;
44import { Board , Port , Status , Monitor } from '../common/protocol' ;
55import {
66 EnumerateMonitorPortSettingsRequest ,
@@ -10,7 +10,7 @@ import {
1010 MonitorRequest ,
1111 MonitorResponse ,
1212} from './cli-protocol/cc/arduino/cli/commands/v1/monitor_pb' ;
13- import { CoreClientAware , CoreClientProvider } from './core-client-provider' ;
13+ import { CoreClientAware } from './core-client-provider' ;
1414import { WebSocketProvider } from './web-socket/web-socket-provider' ;
1515import { Port as gRPCPort } from 'arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/port_pb' ;
1616import {
@@ -19,6 +19,7 @@ import {
1919 MonitorSettingsProvider ,
2020} from './monitor-settings/monitor-settings-provider' ;
2121import { Deferred } from '@theia/core/lib/common/promise-util' ;
22+ import { MonitorServiceFactoryOptions } from './monitor-service-factory' ;
2223
2324export const MonitorServiceName = 'monitor-service' ;
2425type DuplexHandlerKeys =
@@ -33,55 +34,63 @@ interface DuplexHandler {
3334 callback : ( ...args : any ) => void ;
3435}
3536
37+ const MAX_WRITE_TO_STREAM_TRIES = 10 ;
38+ const WRITE_TO_STREAM_TIMEOUT_MS = 30000 ;
39+
3640export class MonitorService extends CoreClientAware implements Disposable {
41+ @inject ( ILogger )
42+ @named ( MonitorServiceName )
43+ private readonly logger : ILogger ;
44+
45+ @inject ( MonitorSettingsProvider )
46+ private readonly monitorSettingsProvider : MonitorSettingsProvider ;
47+
48+ @inject ( WebSocketProvider )
49+ private readonly webSocketProvider : WebSocketProvider ;
50+
3751 // Bidirectional gRPC stream used to receive and send data from the running
3852 // pluggable monitor managed by the Arduino CLI.
39- protected duplex : ClientDuplexStream < MonitorRequest , MonitorResponse > | null ;
53+ private duplex : ClientDuplexStream < MonitorRequest , MonitorResponse > | null ;
4054
4155 // Settings used by the currently running pluggable monitor.
4256 // They can be freely modified while running.
43- protected settings : MonitorSettings = { } ;
57+ private settings : MonitorSettings = { } ;
4458
4559 // List of messages received from the running pluggable monitor.
4660 // These are flushed from time to time to the frontend.
47- protected messages : string [ ] = [ ] ;
61+ private messages : string [ ] = [ ] ;
4862
4963 // Handles messages received from the frontend via websocket.
50- protected onMessageReceived ?: Disposable ;
64+ private onMessageReceived ?: Disposable ;
5165
5266 // Sends messages to the frontend from time to time.
53- protected flushMessagesInterval ?: NodeJS . Timeout ;
67+ private flushMessagesInterval ?: NodeJS . Timeout ;
5468
5569 // Triggered each time the number of clients connected
5670 // to the this service WebSocket changes.
57- protected onWSClientsNumberChanged ?: Disposable ;
71+ private onWSClientsNumberChanged ?: Disposable ;
5872
5973 // Used to notify that the monitor is being disposed
60- protected readonly onDisposeEmitter = new Emitter < void > ( ) ;
74+ private readonly onDisposeEmitter = new Emitter < void > ( ) ;
6175 readonly onDispose = this . onDisposeEmitter . event ;
6276
63- protected _initialized = new Deferred < void > ( ) ;
64- protected creating : Deferred < Status > ;
65-
66- MAX_WRITE_TO_STREAM_TRIES = 10 ;
67- WRITE_TO_STREAM_TIMEOUT_MS = 30000 ;
77+ private _initialized = new Deferred < void > ( ) ;
78+ private creating : Deferred < Status > ;
79+ private readonly board : Board ;
80+ private readonly port : Port ;
81+ private readonly monitorID : string ;
6882
6983 constructor (
70- @inject ( ILogger )
71- @named ( MonitorServiceName )
72- protected readonly logger : ILogger ,
73- @inject ( MonitorSettingsProvider )
74- protected readonly monitorSettingsProvider : MonitorSettingsProvider ,
75- @inject ( WebSocketProvider )
76- protected readonly webSocketProvider : WebSocketProvider ,
77-
78- private readonly board : Board ,
79- private readonly port : Port ,
80- protected override readonly coreClientProvider : CoreClientProvider ,
81- private readonly monitorID : string
84+ @inject ( MonitorServiceFactoryOptions ) options : MonitorServiceFactoryOptions
8285 ) {
8386 super ( ) ;
87+ this . board = options . board ;
88+ this . port = options . port ;
89+ this . monitorID = options . monitorID ;
90+ }
8491
92+ @postConstruct ( )
93+ protected init ( ) : void {
8594 this . onWSClientsNumberChanged =
8695 this . webSocketProvider . onClientsNumberChanged ( async ( clients : number ) => {
8796 if ( clients === 0 ) {
@@ -94,7 +103,7 @@ export class MonitorService extends CoreClientAware implements Disposable {
94103 this . updateClientsSettings ( this . settings ) ;
95104 } ) ;
96105
97- this . portMonitorSettings ( port . protocol , board . fqbn ! ) . then (
106+ this . portMonitorSettings ( this . port . protocol , this . board . fqbn ! ) . then (
98107 async ( settings ) => {
99108 this . settings = {
100109 ...this . settings ,
@@ -258,8 +267,8 @@ export class MonitorService extends CoreClientAware implements Disposable {
258267 }
259268
260269 pollWriteToStream ( request : MonitorRequest ) : Promise < boolean > {
261- let attemptsRemaining = this . MAX_WRITE_TO_STREAM_TRIES ;
262- const writeTimeoutMs = this . WRITE_TO_STREAM_TIMEOUT_MS ;
270+ let attemptsRemaining = MAX_WRITE_TO_STREAM_TRIES ;
271+ const writeTimeoutMs = WRITE_TO_STREAM_TIMEOUT_MS ;
263272
264273 const createWriteToStreamExecutor =
265274 ( duplex : ClientDuplexStream < MonitorRequest , MonitorResponse > ) =>
0 commit comments