1
+ import { Subject } from 'rxjs' ;
2
+
1
3
export default class ReaderWriter {
2
- constructor ( socket , pluginUrl , devicesListStatus ) {
3
- this . socket = socket ;
4
- this . pluginUrl = pluginUrl ;
5
- this . devicesListStatus = devicesListStatus ;
6
- this . socket . on ( 'message' , this . parseMessage . bind ( this ) ) ;
4
+ constructor ( ) {
5
+ this . socket = null ;
6
+ this . pluginURL = null ;
7
+ this . messageSubject = new Subject ( ) ;
8
+ this . devicesList = {
9
+ serial : [ ] ,
10
+ network : [ ]
11
+ } ;
12
+ this . messageSubject . subscribe ( this . updateDevicesList . bind ( this ) ) ;
13
+ this . openingSerial = null ;
7
14
}
8
15
9
16
initSocket ( socket ) {
10
17
this . socket = socket ;
18
+ this . socket . on ( 'message' , this . parseMessage . bind ( this ) ) ;
11
19
}
12
20
13
21
initPluginUrl ( pluginUrl ) {
14
22
this . pluginURL = pluginUrl ;
15
23
}
16
24
25
+ updateDevicesList ( devicesInfo ) {
26
+ // Result of a list command
27
+ if ( devicesInfo . Ports ) {
28
+ if ( devicesInfo . Network ) {
29
+ this . devicesList . network = devicesInfo . Ports ;
30
+ }
31
+ else {
32
+ this . devicesList . serial = devicesInfo . Ports ;
33
+ }
34
+ console . log ( this . devicesList ) ;
35
+ }
36
+ }
37
+
17
38
parseMessage ( message ) {
18
39
let jsonMessage ;
19
-
20
40
try {
21
41
jsonMessage = JSON . parse ( message ) ;
22
42
}
@@ -25,10 +45,44 @@ export default class ReaderWriter {
25
45
}
26
46
27
47
if ( jsonMessage ) {
28
- // Result of a list command
29
- if ( jsonMessage . Ports ) {
30
- this . devicesListStatus . next ( jsonMessage ) ;
31
- }
48
+ this . messageSubject . next ( jsonMessage ) ;
49
+ }
50
+ }
51
+
52
+ openSerialMonitor ( port ) {
53
+ if ( this . openingSerial ) {
54
+ return this . openingSerial ;
55
+ }
56
+ const serialPort = this . devicesList . serial . find ( p => p . Name === port ) ;
57
+ if ( ! serialPort ) {
58
+ return Promise . reject ( new Error ( 'No board found' ) ) ;
32
59
}
60
+ if ( serialPort . IsOpen ) {
61
+ return Promise . resolve ( ) ;
62
+ }
63
+ let checkOpen = null ;
64
+ this . openingSerial = new Promise ( ( resolve , reject ) => {
65
+ 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' ) {
74
+ return resolve ( ) ;
75
+ }
76
+ if ( data . Cmd === 'OpenFail' ) {
77
+ return reject ( new Error ( 'Failed to open serial' ) ) ;
78
+ }
79
+ } ;
80
+ this . messageSubject . subscribe ( checkOpen ) ;
81
+ } ) . finally ( ( ) => {
82
+ this . openingSerial = null ;
83
+ } ) ;
84
+ this . socket . emit ( 'command' , `open ${ port } 9600 timed` ) ;
85
+ return this . openingSerial ;
33
86
}
87
+
34
88
}
0 commit comments