Skip to content

Commit f84c15b

Browse files
close websocket connection after closing serial plotter
1 parent fe3fbb1 commit f84c15b

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

arduino-ide-extension/src/browser/monitor-manager-proxy-client-impl.ts

+9
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export class MonitorManagerProxyClientImpl
4646
private wsPort?: number;
4747
private lastConnectedBoard: BoardsConfig.Config;
4848
private onBoardsConfigChanged: Disposable | undefined;
49+
private isMonitorWidgetOpen = false;
4950

5051
getWebSocketPort(): number | undefined {
5152
return this.wsPort;
@@ -174,6 +175,14 @@ export class MonitorManagerProxyClientImpl
174175
return this.server().getCurrentSettings(board, port);
175176
}
176177

178+
setMonitorWidgetStatus(value: boolean): void {
179+
this.isMonitorWidgetOpen = value;
180+
}
181+
182+
getMonitorWidgetStatus(): boolean {
183+
return this.isMonitorWidgetOpen;
184+
}
185+
177186
send(message: string): void {
178187
if (!this.webSocket) {
179188
return;

arduino-ide-extension/src/browser/serial/monitor/monitor-widget.tsx

+5
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ export class MonitorWidget extends ReactWidget {
7474
this.monitorManagerProxy.startMonitor();
7575
}
7676

77+
protected override onAfterAttach(msg: Message): void {
78+
this.monitorManagerProxy.setMonitorWidgetStatus(this.isAttached);
79+
}
80+
7781
onMonitorSettingsDidChange(settings: MonitorSettings): void {
7882
this.settings = {
7983
...this.settings,
@@ -91,6 +95,7 @@ export class MonitorWidget extends ReactWidget {
9195
}
9296

9397
override dispose(): void {
98+
this.monitorManagerProxy.setMonitorWidgetStatus(this.isAttached);
9499
super.dispose();
95100
}
96101

arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts

+3
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ export class PlotterFrontendContribution extends Contribution {
6565

6666
ipcRenderer.on(CLOSE_PLOTTER_WINDOW, async () => {
6767
if (!!this.window) {
68+
if (!this.monitorManagerProxy.getMonitorWidgetStatus()) {
69+
this.monitorManagerProxy.disconnect();
70+
}
6871
this.window = null;
6972
}
7073
});

arduino-ide-extension/src/common/protocol/monitor-service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ export interface MonitorManagerProxyClient {
3737
isWSConnected(): Promise<boolean>;
3838
startMonitor(settings?: PluggableMonitorSettings): Promise<void>;
3939
getCurrentSettings(board: Board, port: Port): Promise<MonitorSettings>;
40+
setMonitorWidgetStatus(value: boolean): void;
41+
getMonitorWidgetStatus(): boolean;
4042
send(message: string): void;
4143
changeSettings(settings: MonitorSettings): void;
4244
}

0 commit comments

Comments
 (0)