1
+ // const fs = nativeRequire('fs');
2
+
1
3
const WebSocketClient = require ( './WebSocketClient.js' )
2
4
5
+ const DOR_SESSION_FILE = 'dorico-session.json'
6
+
3
7
class DoricoRemote extends WebSocketClient {
4
8
constructor ( { appName = 'Dorico Remote' , callbackAddress = '/DoricoCallback' } = { } ) {
5
9
super ( 'ws://127.0.0.1:4560' ) ;
@@ -10,15 +14,11 @@ class DoricoRemote extends WebSocketClient {
10
14
}
11
15
12
16
onOpen ( resolve ) {
13
- let savedMessageQueue = this . messageQueue ;
14
- this . messageQueue = [ ] ;
17
+ this . on ( 'handshakeDone' , ( ) => super . onOpen ( resolve ) ) ;
15
18
16
19
this . _sendHandshake ( ) ;
17
20
18
- // this.messageQueue = savedMessageQueue;
19
- // savedMessageQueue = []
20
-
21
- super . onOpen ( resolve ) ;
21
+ // super.onOpen(resolve);
22
22
}
23
23
24
24
_sendHandshake ( ) {
@@ -27,16 +27,22 @@ class DoricoRemote extends WebSocketClient {
27
27
clientName : this . appName ,
28
28
handshakeVersion : '1.0' ,
29
29
} ;
30
+
31
+ const sessionData = loadJSON ( DOR_SESSION_FILE , ( e ) => {
32
+ console . log ( `${ DOR_SESSION_FILE } not found - starting new session` )
33
+ } ) ;
34
+ this . sessionToken = sessionData ?. sessionToken ;
30
35
31
36
if ( this . sessionToken ) {
32
37
message . sessionToken = this . sessionToken ;
33
38
}
34
39
35
- super . send ( message ) ;
40
+ // use the socket's send method to avoid the messageQueue
41
+ this . socket . send ( JSON . stringify ( message ) ) ;
42
+ console . log ( "Message sent:" , message ) ;
36
43
}
37
44
38
45
_processHandshake ( data ) {
39
- console . log ( data ) ;
40
46
if ( data . message === 'sessiontoken' && data . sessionToken ) {
41
47
this . sessionToken = data . sessionToken ;
42
48
console . log ( `Received sessiontoken: ${ this . sessionToken } - completing handshake` ) ;
@@ -46,39 +52,72 @@ class DoricoRemote extends WebSocketClient {
46
52
sessionToken : this . sessionToken
47
53
}
48
54
49
- super . send ( message ) ;
55
+ this . socket . send ( JSON . stringify ( message ) ) ;
56
+ console . log ( "Message sent:" , message ) ;
50
57
}
51
58
else if ( data . message === 'response' && data . code === 'kConnected' ) {
52
59
console . log ( `Handshake complete for ${ this . appName } ` ) ;
53
- this . handshakeDone = true ; // Handshake is now complete
54
- this . _processQueue ( ) ; // Now safe to send queued messages
60
+ saveJSON ( DOR_SESSION_FILE , { sessionToken : this . sessionToken } , ( e ) => console . log ( "unable to save sessionToken" , e ) ) ;
61
+ this . handshakeDone = true ;
62
+ this . emit ( 'handshakeDone' ) ;
55
63
}
56
64
}
57
65
58
66
onMessage ( event ) {
59
67
const data = JSON . parse ( event . data ) ;
60
68
61
- if ( ! this . handshakeDone && data . message === 'sessiontoken' ) {
69
+ if ( ! this . handshakeDone ) {
62
70
this . _processHandshake ( data ) ;
71
+ console . log ( "Message received:" , data ) ;
72
+ }
73
+ else {
74
+ super . onMessage ( event ) ;
63
75
}
64
-
65
- super . onMessage ( event ) ;
66
76
67
77
if ( this . callbackAddress && this . callbackAddress . length > 0 ) {
68
78
receive ( this . callbackAddress , data )
69
79
}
70
80
}
71
81
72
- async send ( message ) {
82
+ onClose ( event ) {
83
+ if ( event . code === 1000 ) {
84
+ console . log ( 'Connection closing cleanly - will attempt a fresh connection' ) ;
85
+ // this.sessionToken = null;
86
+ // this.handshakeDone = false;
87
+ this . cleanupSocket ( ) ;
88
+ // this.shouldReconnect = true;
89
+
90
+ // this._removeSessionFile(`${__dirname}/${DOR_SESSION_FILE}`);
91
+ }
92
+
93
+ super . onClose ( event )
94
+ }
95
+
96
+ // _removeSessionFile(file) {
97
+ // if (!fs.existsSync(file)) {
98
+ // return;
99
+ // }
100
+ // fs.unlink(file, (error) => {
101
+ // if (error) {
102
+ // console.warn(`Error removing ${file}`, error);
103
+ // this.shouldReconnect = false;
104
+ // return;
105
+ // }
106
+
107
+ // console.log(`Removed ${file}`);
108
+ // })
109
+ // }
110
+
111
+ send ( message ) {
73
112
if ( ! this . socket ) {
74
113
this . connect ( ) ;
75
114
}
76
115
77
116
try {
78
- await super . send ( message ) ;
117
+ super . send ( message ) ;
79
118
}
80
119
catch ( e ) {
81
- console . error ( 'caught error' , e )
120
+ console . error ( e . message )
82
121
}
83
122
}
84
123
}
0 commit comments