1+ import { Subject } from 'rxjs' ;
2+
13export 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 ;
714 }
815
916 initSocket ( socket ) {
1017 this . socket = socket ;
18+ this . socket . on ( 'message' , this . parseMessage . bind ( this ) ) ;
1119 }
1220
1321 initPluginUrl ( pluginUrl ) {
1422 this . pluginURL = pluginUrl ;
1523 }
1624
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+
1738 parseMessage ( message ) {
1839 let jsonMessage ;
19-
2040 try {
2141 jsonMessage = JSON . parse ( message ) ;
2242 }
@@ -25,10 +45,44 @@ export default class ReaderWriter {
2545 }
2646
2747 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' ) ) ;
3259 }
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 ;
3386 }
87+
3488}
0 commit comments