Skip to content

Commit e28b63e

Browse files
Alberto Iannacconefstasi
Alberto Iannaccone
authored andcommitted
dispose send message event listener on disconnect
1 parent e8c8076 commit e28b63e

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

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

+28-25
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { ClientDuplexStream } from '@grpc/grpc-js';
22
import { TextEncoder } from 'util';
33
import { injectable, inject, named } from 'inversify';
44
import { Struct } from 'google-protobuf/google/protobuf/struct_pb';
5-
import { Emitter } from '@theia/core/lib/common/event';
65
import { ILogger } from '@theia/core/lib/common/logger';
76
import {
87
MonitorService,
@@ -20,6 +19,7 @@ import { MonitorClientProvider } from './monitor-client-provider';
2019
import { Board, Port } from '../../common/protocol/boards-service';
2120
import { WebSocketService } from '../web-socket/web-socket-service';
2221
import { SerialPlotter } from '../../browser/plotter/protocol';
22+
import { Disposable } from '@theia/core/shared/vscode-languageserver-protocol';
2323

2424
interface ErrorWithCode extends Error {
2525
readonly code: number;
@@ -77,7 +77,7 @@ export class MonitorServiceImpl implements MonitorService {
7777
config: MonitorConfig;
7878
};
7979
protected messages: string[] = [];
80-
protected onMessageDidReadEmitter = new Emitter<void>();
80+
protected onMessageReceived: Disposable;
8181

8282
setClient(client: MonitorServiceClient | undefined): void {
8383
this.client = client;
@@ -148,34 +148,36 @@ export class MonitorServiceImpl implements MonitorService {
148148
}
149149
};
150150

151-
this.webSocketService.onMessageReceived((msg: string) => {
152-
try {
153-
const message: SerialPlotter.Protocol.Message = JSON.parse(msg);
151+
this.onMessageReceived = this.webSocketService.onMessageReceived(
152+
(msg: string) => {
153+
try {
154+
const message: SerialPlotter.Protocol.Message = JSON.parse(msg);
154155

155-
switch (message.command) {
156-
case SerialPlotter.Protocol.Command.PLOTTER_SEND_MESSAGE:
157-
this.sendMessageToSerial(message.data);
158-
break;
156+
switch (message.command) {
157+
case SerialPlotter.Protocol.Command.PLOTTER_SEND_MESSAGE:
158+
this.sendMessageToSerial(message.data);
159+
break;
159160

160-
case SerialPlotter.Protocol.Command.PLOTTER_SET_BAUDRATE:
161-
this.client?.notifyBaudRateChanged(
162-
parseInt(message.data, 10) as MonitorConfig.BaudRate
163-
);
164-
break;
161+
case SerialPlotter.Protocol.Command.PLOTTER_SET_BAUDRATE:
162+
this.client?.notifyBaudRateChanged(
163+
parseInt(message.data, 10) as MonitorConfig.BaudRate
164+
);
165+
break;
165166

166-
case SerialPlotter.Protocol.Command.PLOTTER_SET_LINE_ENDING:
167-
this.client?.notifyLineEndingChanged(message.data);
168-
break;
167+
case SerialPlotter.Protocol.Command.PLOTTER_SET_LINE_ENDING:
168+
this.client?.notifyLineEndingChanged(message.data);
169+
break;
169170

170-
case SerialPlotter.Protocol.Command.PLOTTER_SET_INTERPOLATE:
171-
this.client?.notifyInterpolateChanged(message.data);
172-
break;
171+
case SerialPlotter.Protocol.Command.PLOTTER_SET_INTERPOLATE:
172+
this.client?.notifyInterpolateChanged(message.data);
173+
break;
173174

174-
default:
175-
break;
176-
}
177-
} catch (error) {}
178-
});
175+
default:
176+
break;
177+
}
178+
} catch (error) {}
179+
}
180+
);
179181

180182
// empty the queue every 32ms (~30fps)
181183
setInterval(flushMessagesToFrontend, 32);
@@ -245,6 +247,7 @@ export class MonitorServiceImpl implements MonitorService {
245247

246248
async disconnect(reason?: MonitorError): Promise<Status> {
247249
try {
250+
this.onMessageReceived.dispose();
248251
if (
249252
!this.serialConnection &&
250253
reason &&

0 commit comments

Comments
 (0)