1414 * limitations under the License.
1515 */
1616
17+ import * as NodeFS from 'node:fs' ;
1718import * as $WS from '../../lib' ;
1819
20+ function writeLog ( msg : string ) : void {
21+
22+ console . info ( `[${ new Date ( ) . toISOString ( ) } ] ${ msg } ` ) ;
23+ }
24+
1925( async ( ) => {
2026
2127 try {
2228
2329 const cli = await $WS . wsConnect ( {
2430 'host' : '127.0.0.1' ,
2531 'port' : 42096 ,
26- 'connectTimeout' : 500 ,
32+ 'connectTimeout' : 50000 ,
2733 'frameReceiveMode' : $WS . EFrameReceiveMode [
28- process . argv . find ( i => i . startsWith ( '--frame-receive-mode' ) )
34+ process . argv . find ( i => i . startsWith ( '--frame-receive-mode= ' ) )
2935 ?. slice ( '--frame-receive-mode=' . length ) ?. toUpperCase ( ) as 'STANDARD' ?? 'STANDARD'
3036 ] ?? $WS . EFrameReceiveMode . STANDARD ,
3137 } ) ;
@@ -40,65 +46,105 @@ import * as $WS from '../../lib';
4046
4147 switch ( msg . opcode ) {
4248 case $WS . EOpcode . CLOSE :
43- console . log ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]: code = ${ Buffer . concat ( msg . data ) . readUint16BE ( ) } `) ;
49+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]: code = ${ Buffer . concat ( msg . data ) . readUint16BE ( ) } `) ;
4450 break ;
4551 case $WS . EOpcode . PING :
46- console . log ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]: ${ Buffer . concat ( msg . data ) . toString ( ) } `) ;
52+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]: ${ Buffer . concat ( msg . data ) . toString ( ) } `) ;
4753 cli . pong ( Buffer . concat ( msg . data ) ) ;
4854 break ;
4955 default :
50- console . log ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]:`, Buffer . concat ( msg . data ) . toString ( ) ) ;
56+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]:` + Buffer . concat ( msg . data ) . toString ( ) ) ;
5157 }
5258 return ;
5359 }
5460
5561 switch ( msg . opcode ) {
5662 case $WS . EOpcode . CLOSE :
5763 msg . toBuffer ( ) . then ( ( buf ) => {
58- console . log ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]: code = ${ buf . readUint16BE ( ) } `) ;
64+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]: code = ${ buf . readUint16BE ( ) } `) ;
5965 } , ( e ) => {
60- console . error ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]:` , e ) ;
66+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]: ` + e ) ;
6167 } ) ;
6268 break ;
6369 case $WS . EOpcode . PING :
6470 msg . toBuffer ( ) . then ( ( buf ) => {
65- console . log ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]: ${ buf . toString ( ) } `) ;
71+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]: ${ buf . toString ( ) } `) ;
6672 cli . pong ( buf ) ;
6773 } , ( e ) => {
68- console . error ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]:` , e ) ;
74+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]: ` + e ) ;
6975 } ) ;
7076 break ;
7177 default :
7278 msg . toString ( ) . then ( ( buf ) => {
73- console . log ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]:`, buf ) ;
79+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]:` + buf ) ;
7480 } , ( e ) => {
75- console . error ( `[ ${ new Date ( ) . toISOString ( ) } ] Recv [${ $WS . EOpcode [ msg . opcode ] } ]:` , e ) ;
81+ writeLog ( ` Recv [${ $WS . EOpcode [ msg . opcode ] } ]: ` + e ) ;
7682 } ) ;
7783 }
7884 } ) ;
7985
86+ let i = 0 ;
8087 const timer = setInterval ( function ( ) : void {
8188
82- switch ( Math . floor ( Math . random ( ) * 3 ) ) {
83- case 2 :
89+ if ( ! cli . writable ) {
90+
91+ clearInterval ( timer ) ;
92+ return ;
93+ }
94+
95+ switch ( Math . floor ( Math . random ( ) * 7 ) ) {
96+ case 0 :
8497 if ( cli . frameReceiveMode !== $WS . EFrameReceiveMode . LITE ) {
8598
99+ writeLog ( `Sent fragmented text` ) ;
86100 const writer = cli . createMessageWriter ( $WS . EOpcode . TEXT ) ;
87101
88102 writer . write ( 'hello ' ) ;
89103 writer . write ( 'world ' ) ;
104+ cli . writeText ( 'hi' ) ;
90105 writer . write ( 'angus ' ) ;
106+ writer . write ( '- end with non-empty frame - ' ) ;
107+ writer . end ( ( i ++ ) . toString ( ) ) ;
108+ break ;
109+ }
110+ case 1 :
111+ if ( cli . frameReceiveMode !== $WS . EFrameReceiveMode . LITE ) {
112+
113+ writeLog ( `Sent fragmented text` ) ;
114+ const writer = cli . createMessageWriter ( $WS . EOpcode . TEXT ) ;
115+
116+ writer . write ( 'hello ' ) ;
117+ writer . write ( 'world ' ) ;
118+ cli . writeText ( 'hi' ) ;
119+ writer . write ( 'angus ' ) ;
120+ writer . write ( '- end with empty frame - ' + ( i ++ ) . toString ( ) ) ;
91121 writer . end ( ) ;
92122 break ;
93123 }
94124 // fall-through
95- case 0 :
96- cli . writeText ( 'biu biu biu~' ) ;
125+ case 2 :
126+ writeLog ( 'Sent non-empty text' ) ;
127+ cli . writeText ( 'biu biu biu~' + ( i ++ ) ) ;
97128 break ;
98- case 1 :
99- cli . writeBinary ( Buffer . from ( 'biu biu biu~' ) ) ;
129+ case 3 :
130+ writeLog ( 'Sent empty text' ) ;
131+ i ++ ;
132+ cli . writeText ( '' ) ;
133+ break ;
134+ case 4 :
135+ writeLog ( 'Sent binary' ) ;
136+ cli . writeBinary ( Buffer . from ( 'biu biu biu~' + ( i ++ ) ) ) ;
137+ break ;
138+ case 5 :
139+ writeLog ( 'Sent multiple segments of text' ) ;
140+ cli . writeText ( [ 'hey ' , 'hey ' , 'hey ' , 'guy' , ( i ++ ) . toString ( ) ] ) ;
141+ break ;
142+ case 6 :
143+ if ( cli . frameReceiveMode !== $WS . EFrameReceiveMode . LITE ) {
144+ writeLog ( 'Sent file' ) ;
145+ NodeFS . createReadStream ( `${ __dirname } /../../tsconfig.json` ) . pipe ( cli . createMessageWriter ( $WS . EOpcode . TEXT ) ) ;
146+ }
100147 break ;
101-
102148 }
103149
104150 } , 100 ) ;
0 commit comments