11const WebSocket = require ( 'ws' )
2+ const TextEncoder = require ( 'text-encoding' ) . TextEncoder
3+ const TextDecoder = require ( 'text-encoding' ) . TextDecoder
24
35const isString = s => typeof ( s ) === 'string' || s instanceof String ;
46
7+ const TFPUtils_packData = ( data , eventName ) => {
8+ if ( eventName . length > 255 ) {
9+ throw "Event name length should be < 255"
10+ return
11+ }
12+ let enc = new TextEncoder ( "utf-8" ) ;
13+ eventName = enc . encode ( eventName )
14+ let header = new Uint8Array ( [ eventName . length , ...eventName ] )
15+ return new Uint8Array ( [ ...header , ...data ] )
16+ }
17+
18+ const TFPUtils_unpackData = unpacked => {
19+ let headerSize = new Uint8Array ( unpacked . slice ( 0 , 1 ) ) [ 0 ]
20+ let header = new Uint8Array ( unpacked . slice ( 1 , headerSize + 1 ) )
21+ let data = new Uint8Array ( unpacked . slice ( headerSize + 1 ) )
22+ let eventName = new TextDecoder ( 'utf-8' ) . decode ( header )
23+ return { eventName, payload :data }
24+ }
25+
526class TFPBaseEventStream {
627 constructor ( ) {
728 this . EventStream = ( function ( ) {
@@ -49,17 +70,18 @@ class TFPSocketsClient extends TFPBaseEventStream {
4970 this . EventStream . emit ( 'open' , event )
5071 } )
5172 this . ws . on ( 'message' , ( data ) => {
73+ var processedEvent ;
5274 if ( isString ( data ) ) {
53- //handle incomming message
5475 try {
55- let obj = JSON . parse ( data ) ;
56- this . EventStream . emit ( obj . eventName , obj )
76+ processedEvent = JSON . parse ( data ) ;
5777 } catch ( e ) {
5878 console . log ( "Message doesn't repect protocol with exception: " , e )
5979 }
6080 } else {
61- //binary data wip
81+ processedEvent = TFPUtils_unpackData ( data )
6282 }
83+ this . EventStream . emit ( processedEvent . eventName , processedEvent )
84+ this . EventStream . emit ( 'message' , processedEvent )
6385 } )
6486 this . ws . on ( 'close' , ( ) => this . EventStream . emit ( 'close' ) )
6587 }
@@ -73,6 +95,14 @@ class TFPSocketsClient extends TFPBaseEventStream {
7395 }
7496 }
7597
98+ sendData ( event , payload ) {
99+ if ( this . isOpen ) {
100+ this . ws . send ( TFPUtils_packData ( payload , event ) )
101+ } else {
102+ console . log ( "Connection is not opened" )
103+ }
104+ }
105+
76106}
77107
78108class TFPSocketsServer extends TFPBaseEventStream {
0 commit comments