Skip to content

Commit f535c4f

Browse files
author
smellai
committed
improved serial open/close [WE-82] and multiple socket connect events
1 parent da77c16 commit f535c4f

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

src/socket-daemon.js

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ let orderedPluginAddresses = [LOOPBACK_ADDRESS, LOOPBACK_HOST];
4747
const CANT_FIND_AGENT_MESSAGE = 'Arduino Create Agent cannot be found';
4848

4949
let updateAttempts = 0;
50+
let webSocketActionsDefined = false;
5051

5152
if (browser.name !== 'chrome' && browser.name !== 'firefox') {
5253
orderedPluginAddresses = [LOOPBACK_HOST, LOOPBACK_ADDRESS];
@@ -170,11 +171,16 @@ export default class SocketDaemon extends Daemon {
170171
this.socket = io(address, { forceNew: true });
171172

172173
this.socket.on('connect', () => {
173-
// On connect download windows drivers which are indispensable for detection of boards
174-
this.downloadTool('windows-drivers', 'latest', 'arduino');
175-
this.downloadTool('bossac', '1.7.0', 'arduino');
176174

177-
this.initSocket();
175+
if (!webSocketActionsDefined) {
176+
webSocketActionsDefined = true; // ensure calling it once
177+
178+
// On connect download windows drivers which are indispensable for detection of boards
179+
this.downloadTool('windows-drivers', 'latest', 'arduino');
180+
this.downloadTool('bossac', '1.7.0', 'arduino');
181+
182+
this.initSocket();
183+
}
178184
this.channelOpen.next(true);
179185
});
180186

@@ -291,14 +297,14 @@ export default class SocketDaemon extends Daemon {
291297
* @param {string} port the port name
292298
*/
293299
openSerialMonitor(port, baudrate) {
294-
if (this.serialMonitorOpened.getValue() || this.uploading.getValue().status === this.UPLOAD_IN_PROGRESS) {
295-
return;
296-
}
297-
298300
const serialPort = this.devicesList.getValue().serial.find(p => p.Name === port);
299301
if (!serialPort) {
300302
return this.serialMonitorOpened.error(new Error(`Can't find board at ${port}`));
301303
}
304+
if (this.uploading.getValue().status === this.UPLOAD_IN_PROGRESS || serialPort.IsOpen) {
305+
return;
306+
}
307+
302308
this.appMessages
303309
.pipe(takeUntil(this.serialMonitorOpened.pipe(filter(open => open))))
304310
.subscribe(message => {
@@ -318,13 +324,14 @@ export default class SocketDaemon extends Daemon {
318324
* @param {string} port the port name
319325
*/
320326
closeSerialMonitor(port) {
321-
if (!this.serialMonitorOpened.getValue()) {
322-
return;
323-
}
324327
const serialPort = this.devicesList.getValue().serial.find(p => p.Name === port);
325328
if (!serialPort) {
326329
return this.serialMonitorOpened.error(new Error(`Can't find board at ${port}`));
327330
}
331+
if (!serialPort.IsOpen) {
332+
return;
333+
}
334+
328335
this.appMessages
329336
.pipe(takeUntil(this.serialMonitorOpened.pipe(filter(open => !open))))
330337
.subscribe(message => {

0 commit comments

Comments
 (0)