@@ -47,6 +47,7 @@ let orderedPluginAddresses = [LOOPBACK_ADDRESS, LOOPBACK_HOST];
4747const CANT_FIND_AGENT_MESSAGE = 'Arduino Create Agent cannot be found' ;
4848
4949let updateAttempts = 0 ;
50+ let webSocketActionsDefined = false ;
5051
5152if ( 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