@@ -8,54 +8,55 @@ interface IHashTable<T> {
88}
99type QueuedMessageCallback = ( msg : any ) => any ;
1010export class QueuedMessage {
11- constructor ( message :any , cb : QueuedMessageCallback ) {
11+ constructor ( message : any , cb : QueuedMessageCallback ) {
1212 this . id = message . id ;
1313 this . message = message ;
1414 this . cb = cb ;
1515 }
1616 public cb : QueuedMessageCallback ;
17- public id :string ;
18- public message :any ;
17+ public id : string ;
18+ public message : any ;
1919}
2020export class WebSocketClient {
2121 private _logger : winston . Logger ;
22- private _url :string ;
23- private _socketObject :WebSocket = null ;
24- public static instance :WebSocketClient = null ;
22+ private _url : string ;
23+ private _socketObject : WebSocket = null ;
24+ public static instance : WebSocketClient = null ;
2525 private _receiveQueue : SocketMessage [ ] = [ ] ;
2626 private _sendQueue : SocketMessage [ ] = [ ] ;
27- public user :TokenUser ;
28- public jwt :string ;
27+ public user : TokenUser ;
28+ public jwt : string ;
2929 public messageQueue : IHashTable < QueuedMessage > = { } ;
30- public events :events . EventEmitter = null ;
31- constructor ( logger : winston . Logger , url :string ) {
30+ public events : events . EventEmitter = null ;
31+ constructor ( logger : winston . Logger , url : string ) {
3232 this . _logger = logger ;
3333 this . _url = url ;
3434 this . _logger . info ( "connecting to " + url ) ;
3535 this . events = new events . EventEmitter ( ) ;
3636
3737 this . connect ( ) ;
38- if ( WebSocketClient . instance === null ) {
38+ if ( WebSocketClient . instance === null ) {
3939 WebSocketClient . instance = this ;
4040 }
41-
41+
4242 setInterval ( this . pingServer , 250 ) ;
4343 }
44- public connect ( ) :void {
44+ public connect ( ) : void {
4545 try {
46- if ( this . _socketObject !== null &&
47- this . _socketObject . readyState !== this . _socketObject . OPEN &&
48- this . _socketObject . readyState !== this . _socketObject . CONNECTING ) {
46+ if ( this . _socketObject !== null &&
47+ this . _socketObject . readyState !== this . _socketObject . OPEN &&
48+ this . _socketObject . readyState !== this . _socketObject . CONNECTING ) {
4949 this . _socketObject . onopen = null ;
5050 this . _socketObject . onmessage = null ;
5151 this . _socketObject . onclose = null ;
5252 this . _socketObject . onerror = null ;
5353 this . _socketObject = null ;
5454 }
55- if ( this . _socketObject === null ) {
56- this . _socketObject = new WebSocket ( this . _url , {
57- rejectUnauthorized :false ,
58- strictSSL : false } ) ;
55+ if ( this . _socketObject === null ) {
56+ this . _socketObject = new WebSocket ( this . _url , {
57+ rejectUnauthorized : false ,
58+ strictSSL : false
59+ } ) ;
5960 this . _socketObject . onopen = ( this . onopen ) . bind ( this ) ;
6061 this . _socketObject . onmessage = ( this . onmessage ) . bind ( this ) ;
6162 this . _socketObject . onclose = ( this . onclose ) . bind ( this ) ;
@@ -64,117 +65,117 @@ export class WebSocketClient {
6465 } catch ( error ) {
6566 this . _logger . debug ( error . message ) ;
6667 }
67- // _ CLOSED:3
68- // _ CLOSING:2
69- // _ OPEN:1
70- // _ CONNECTING:0
68+ // _ CLOSED:3
69+ // _ CLOSING:2
70+ // _ OPEN:1
71+ // _ CONNECTING:0
7172 }
72- private pingServer ( ) :void {
73- var me :WebSocketClient = WebSocketClient . instance ;
73+ private pingServer ( ) : void {
74+ var me : WebSocketClient = WebSocketClient . instance ;
7475 try {
75- if ( me . _socketObject !== null && me . _socketObject . readyState === me . _socketObject . OPEN ) {
76+ if ( me . _socketObject !== null && me . _socketObject . readyState === me . _socketObject . OPEN ) {
7677 let msg : SocketMessage = SocketMessage . fromcommand ( "ping" ) ;
7778 me . _socketObject . send ( JSON . stringify ( msg ) ) ;
7879 }
79- if ( me . _socketObject === null ||
80- me . _socketObject . readyState !== me . _socketObject . CONNECTING || me . _socketObject . readyState !== me . _socketObject . OPEN ) {
80+ if ( me . _socketObject === null ||
81+ me . _socketObject . readyState !== me . _socketObject . CONNECTING || me . _socketObject . readyState !== me . _socketObject . OPEN ) {
8182 me . connect ( ) ;
8283 }
8384 } catch ( error ) {
8485 me . _logger . error ( error . message ) ;
8586 console . error ( error ) ;
8687 me . connect ( ) ;
8788 }
88- var date :Date = new Date ;
89- var seconds :number = date . getSeconds ( ) ;
90- var minutes :number = date . getMinutes ( ) ;
91- var hour :number = date . getHours ( ) ;
92- if ( me . _receiveQueue . length > 0 || me . _sendQueue . length > 1 ) {
93- // tslint:disable-next-line: max-line-length
94- console . log ( "[" + hour + ":" + minutes + "." + seconds + "] pingServer: " + me . _receiveQueue . length + "/" + me . _sendQueue . length ) ;
89+ var date : Date = new Date ;
90+ var seconds : number = date . getSeconds ( ) ;
91+ var minutes : number = date . getMinutes ( ) ;
92+ var hour : number = date . getHours ( ) ;
93+ if ( me . _receiveQueue . length > 0 || me . _sendQueue . length > 1 ) {
94+ // tslint:disable-next-line: max-line-length
95+ // console.log("[" + hour + ":" + minutes + "." + seconds + "] pingServer: " + me._receiveQueue.length + "/" + me._sendQueue.length);
9596 }
9697 // setInterval(me.pingServer, 250);
9798 }
98- private async onopen ( evt : Event ) :Promise < void > {
99- var me :WebSocketClient = WebSocketClient . instance ;
99+ private async onopen ( evt : Event ) : Promise < void > {
100+ var me : WebSocketClient = WebSocketClient . instance ;
100101 this . events . emit ( "onopen" ) ;
101102 }
102- private onclose ( evt : CloseEvent ) :void {
103- var me :WebSocketClient = WebSocketClient . instance ;
103+ private onclose ( evt : CloseEvent ) : void {
104+ var me : WebSocketClient = WebSocketClient . instance ;
104105 this . events . emit ( "onclose" ) ;
105106 }
106- private onerror ( evt : ErrorEvent ) :void {
107- var me :WebSocketClient = WebSocketClient . instance ;
107+ private onerror ( evt : ErrorEvent ) : void {
108+ var me : WebSocketClient = WebSocketClient . instance ;
108109 this . events . emit ( "onclose" , evt . message ) ;
109110 }
110- private onmessage ( evt : MessageEvent ) :void {
111- var me :WebSocketClient = WebSocketClient . instance ;
112- let msg :SocketMessage = SocketMessage . fromjson ( evt . data ) ;
111+ private onmessage ( evt : MessageEvent ) : void {
112+ var me : WebSocketClient = WebSocketClient . instance ;
113+ let msg : SocketMessage = SocketMessage . fromjson ( evt . data ) ;
113114 me . _receiveQueue . push ( msg ) ;
114115 me . ProcessQueue . bind ( me ) ( ) ;
115116 }
116- public async Send < T > ( message : Message ) :Promise < T > {
117+ public async Send < T > ( message : Message ) : Promise < T > {
117118 return new Promise < T > ( async ( resolve , reject ) => {
118- this . _Send ( message , ( ( msg ) => {
119- if ( msg . error !== null && msg . error !== undefined ) { return reject ( msg . error ) ; }
119+ this . _Send ( message , ( ( msg ) => {
120+ if ( msg . error !== null && msg . error !== undefined ) { return reject ( msg . error ) ; }
120121 resolve ( msg ) ;
121122 } ) . bind ( this ) ) ;
122123 } ) ;
123124 }
124- private _Send ( message : Message , cb : QueuedMessageCallback ) :void {
125+ private _Send ( message : Message , cb : QueuedMessageCallback ) : void {
125126 var messages : string [ ] = this . chunkString ( message . data , 500 ) ;
126- if ( messages === null || messages === undefined || messages . length === 0 ) {
127+ if ( messages === null || messages === undefined || messages . length === 0 ) {
127128 var singlemessage : SocketMessage = SocketMessage . frommessage ( message , "" , 1 , 0 ) ;
128- if ( message . replyto === null || message . replyto === undefined ) {
129+ if ( message . replyto === null || message . replyto === undefined ) {
129130 this . messageQueue [ singlemessage . id ] = new QueuedMessage ( singlemessage , cb ) ;
130131 }
131132 this . _sendQueue . push ( singlemessage ) ;
132133 return ;
133134 }
134- if ( message . id === null || message . id === undefined ) { message . id = Math . random ( ) . toString ( 36 ) . substr ( 2 , 9 ) ; }
135- for ( let i : number = 0 ; i < messages . length ; i ++ ) {
135+ if ( message . id === null || message . id === undefined ) { message . id = Math . random ( ) . toString ( 36 ) . substr ( 2 , 9 ) ; }
136+ for ( let i : number = 0 ; i < messages . length ; i ++ ) {
136137 var _message : SocketMessage = SocketMessage . frommessage ( message , messages [ i ] , messages . length , i ) ;
137138 this . _sendQueue . push ( _message ) ;
138139 }
139- if ( message . replyto === null || message . replyto === undefined ) {
140+ if ( message . replyto === null || message . replyto === undefined ) {
140141 this . messageQueue [ message . id ] = new QueuedMessage ( message , cb ) ;
141142 }
142143 setTimeout ( ( ) => {
143144 this . ProcessQueue ( ) ;
144145 } , 500 ) ;
145146 }
146147 public chunkString ( str : string , length : number ) : string [ ] {
147- if ( str === null || str === undefined ) {
148+ if ( str === null || str === undefined ) {
148149 return [ ] ;
149150 }
150151 // tslint:disable-next-line: quotemark
151152 return str . match ( new RegExp ( '.{1,' + length + '}' , 'g' ) ) ;
152153 }
153- private ProcessQueue ( ) :void {
154- var me :WebSocketClient = WebSocketClient . instance ;
154+ private ProcessQueue ( ) : void {
155+ var me : WebSocketClient = WebSocketClient . instance ;
155156 try {
156157 let ids : string [ ] = [ ] ;
157158 me . _receiveQueue . forEach ( msg => {
158- if ( ids . indexOf ( msg . id ) === - 1 ) { ids . push ( msg . id ) ; }
159+ if ( ids . indexOf ( msg . id ) === - 1 ) { ids . push ( msg . id ) ; }
159160 } ) ;
160161 ids . forEach ( id => {
161162 try {
162- var msgs : SocketMessage [ ] = me . _receiveQueue . filter ( function ( msg :SocketMessage ) :boolean { return msg . id === id ; } ) ;
163+ var msgs : SocketMessage [ ] = me . _receiveQueue . filter ( function ( msg : SocketMessage ) : boolean { return msg . id === id ; } ) ;
163164 msgs . sort ( ( a , b ) => a . index - b . index ) ;
164165 var first : SocketMessage = msgs [ 0 ] ;
165- if ( first . count === msgs . length ) {
166- if ( msgs . length === 1 ) {
166+ if ( first . count === msgs . length ) {
167+ if ( msgs . length === 1 ) {
167168 var singleresult : Message = Message . frommessage ( first , first . data ) ;
168169 singleresult . Process ( me ) ;
169170 } else {
170171 var buffer : string = "" ;
171172 msgs . forEach ( msg => {
172- if ( msg . data !== null && msg . data !== undefined ) { buffer += msg . data ; }
173+ if ( msg . data !== null && msg . data !== undefined ) { buffer += msg . data ; }
173174 } ) ;
174175 var result : Message = Message . frommessage ( first , buffer ) ;
175176 result . Process ( me ) ;
176177 }
177- me . _receiveQueue = me . _receiveQueue . filter ( function ( msg : SocketMessage ) :boolean { return msg . id !== id ; } ) ;
178+ me . _receiveQueue = me . _receiveQueue . filter ( function ( msg : SocketMessage ) : boolean { return msg . id !== id ; } ) ;
178179 }
179180 } catch ( error ) {
180181 me . _logger . error ( error . message ) ;
@@ -185,15 +186,15 @@ export class WebSocketClient {
185186 me . _logger . error ( error . message ) ;
186187 console . error ( error ) ;
187188 }
188- if ( me . _socketObject === null || me . _socketObject . readyState !== me . _socketObject . OPEN ) {
189+ if ( me . _socketObject === null || me . _socketObject . readyState !== me . _socketObject . OPEN ) {
189190 me . _logger . info ( "Cannot send, not connected" ) ;
190191 return ;
191- }
192+ }
192193 me . _sendQueue . forEach ( msg => {
193194 try {
194195 let id : string = msg . id ;
195196 me . _socketObject . send ( JSON . stringify ( msg ) ) ;
196- me . _sendQueue = me . _sendQueue . filter ( function ( msg : SocketMessage ) :boolean { return msg . id !== id ; } ) ;
197+ me . _sendQueue = me . _sendQueue . filter ( function ( msg : SocketMessage ) : boolean { return msg . id !== id ; } ) ;
197198 } catch ( error ) {
198199 me . _logger . error ( error . message ) ;
199200 console . error ( error ) ;
0 commit comments