@@ -11,6 +11,7 @@ export default class ReaderWriter {
11
11
} ;
12
12
this . messageSubject . subscribe ( this . updateDevicesList . bind ( this ) ) ;
13
13
this . openingSerial = null ;
14
+ this . closingSerial = null ;
14
15
}
15
16
16
17
initSocket ( socket ) {
@@ -63,26 +64,49 @@ export default class ReaderWriter {
63
64
let checkOpen = null ;
64
65
this . openingSerial = new Promise ( ( resolve , reject ) => {
65
66
checkOpen = message => {
66
- let data = null ;
67
- try {
68
- data = JSON . parse ( message ) ;
69
- }
70
- catch ( SyntaxError ) {
71
- return ;
72
- }
73
- if ( data . Cmd === 'Open' ) {
67
+ if ( message . Cmd === 'Open' ) {
74
68
return resolve ( ) ;
75
69
}
76
- if ( data . Cmd === 'OpenFail' ) {
70
+ if ( message . Cmd === 'OpenFail' ) {
77
71
return reject ( new Error ( 'Failed to open serial' ) ) ;
78
72
}
79
73
} ;
80
- this . messageSubject . subscribe ( checkOpen ) ;
74
+ this . openSubscription = this . messageSubject . subscribe ( checkOpen ) ;
81
75
} ) . finally ( ( ) => {
76
+ this . openSubscription . unsubscribe ( ) ;
82
77
this . openingSerial = null ;
83
78
} ) ;
84
79
this . socket . emit ( 'command' , `open ${ port } 9600 timed` ) ;
85
80
return this . openingSerial ;
86
81
}
87
82
83
+ closeSerialMonitor ( port ) {
84
+ if ( this . closingSerial ) {
85
+ return this . closingSerial ;
86
+ }
87
+ const serialPort = this . devicesList . serial . find ( p => p . Name === port ) ;
88
+ if ( ! serialPort ) {
89
+ return Promise . reject ( new Error ( 'No board found' ) ) ;
90
+ }
91
+ if ( ! serialPort . IsOpen ) {
92
+ return Promise . resolve ( ) ;
93
+ }
94
+ let checkClosed = null ;
95
+ this . closingSerial = new Promise ( ( resolve , reject ) => {
96
+ checkClosed = message => {
97
+ if ( message . Cmd === 'Close' ) {
98
+ return resolve ( ) ;
99
+ }
100
+ if ( message . Cmd === 'CloseFail' ) {
101
+ return reject ( new Error ( 'Failed to close serial' ) ) ;
102
+ }
103
+ } ;
104
+ this . closeSubscription = this . messageSubject . subscribe ( checkClosed ) ;
105
+ } ) . finally ( ( ) => {
106
+ this . closeSubscription . unsubscribe ( ) ;
107
+ this . closingSerial = null ;
108
+ } ) ;
109
+ this . socket . emit ( 'command' , `close ${ port } ` ) ;
110
+ return this . closingSerial ;
111
+ }
88
112
}
0 commit comments