@@ -11,84 +11,81 @@ globalThis.WebTransport = WebTransportWs;
1111globalThis . WebSocket = WebSocket ;
1212
1313async function main ( ) {
14- // @ts -expect-error too lazy to debug node types
1514 const url = process . argv [ 2 ] || "http://localhost:3000" ;
1615
1716 console . log ( `Connecting to ${ url } ...` ) ;
1817
19- // Create a new WebTransport connection
20- const transport = new WebTransport ( url ) ;
21-
22- // Add error handling for closed promise
23- transport . closed . then (
24- ( info ) => console . log ( "Transport closed with info:" , info ) ,
25- ( error ) => console . error ( "Transport closed with error:" , error )
26- ) ;
27-
28- // Wait for the connection to be ready
29- await transport . ready ;
30- console . log ( "✓ Connected successfully" ) ;
31-
32- // Example 1: Send data on a unidirectional stream
33- console . log ( "\n--- Sending unidirectional stream ---" ) ;
34- const sendStream = await transport . createUnidirectionalStream ( ) ;
35- const writer = sendStream . getWriter ( ) ;
36-
37- const message = "Hello from Node.js client!" ;
38- await writer . write ( new TextEncoder ( ) . encode ( message ) ) ;
39- await writer . close ( ) ;
40- console . log ( `✓ Sent: "${ message } "` ) ;
41-
42- // Example 2: Create and use a bidirectional stream
43- console . log ( "\n--- Creating bidirectional stream ---" ) ;
44- const biStream = await transport . createBidirectionalStream ( ) ;
45-
46- // Send data
47- const biWriter = biStream . writable . getWriter ( ) ;
48- const request = "ping" ;
49- await biWriter . write ( new TextEncoder ( ) . encode ( request ) ) ;
50- console . log ( `✓ Sent: "${ request } "` ) ;
51-
52- // Read response
53- const biReader = biStream . readable . getReader ( ) ;
54- const { value, done } = await biReader . read ( ) ;
55- if ( ! done && value ) {
56- const response = new TextDecoder ( ) . decode ( value ) ;
57- console . log ( `✓ Received: "${ response } "` ) ;
58- }
59-
60- await biWriter . close ( ) ;
61- biReader . releaseLock ( ) ;
62-
63- // Example 3: Listen for incoming streams
64- console . log ( "\n--- Listening for incoming streams ---" ) ;
65-
66- // Handle incoming unidirectional streams
67- const uni : ReadableStreamDefaultReader < ReadableStream < Uint8Array > > = transport . incomingUnidirectionalStreams . getReader ( ) ;
68-
69- const { value : stream } = await uni . read ( ) ;
70- if ( ! stream ) throw new Error ( "No stream received" ) ;
71-
72- const reader = stream . getReader ( ) ;
73- const { value : data } = await reader . read ( ) ;
74- if ( ! data ) throw new Error ( "No data received" ) ;
75-
76- console . log (
77- `✓ Received uni stream: "${ new TextDecoder ( ) . decode ( data ) } "` ,
78- ) ;
79- reader . releaseLock ( ) ;
80- uni . releaseLock ( ) ;
81-
82- // Close the connection
83- console . log ( "\n--- Closing connection ---" ) ;
84- transport . close ( {
85- closeCode : 0 ,
86- reason : "Client finished" ,
87- } ) ;
88-
89- // Wait for closed
90- const closeInfo = await transport . closed ;
91- console . log ( `✓ Connection closed: ${ closeInfo . reason || "No reason" } ` ) ;
18+ // Create a new WebTransport connection
19+ const transport = new WebTransport ( url ) ;
20+
21+ // Add error handling for closed promise
22+ transport . closed . then (
23+ ( info ) => console . log ( "Transport closed with info:" , info ) ,
24+ ( error ) => console . error ( "Transport closed with error:" , error ) ,
25+ ) ;
26+
27+ // Wait for the connection to be ready
28+ await transport . ready ;
29+ console . log ( "✓ Connected successfully" ) ;
30+
31+ // Example 1: Send data on a unidirectional stream
32+ console . log ( "\n--- Sending unidirectional stream ---" ) ;
33+ const sendStream = await transport . createUnidirectionalStream ( ) ;
34+ const writer = sendStream . getWriter ( ) ;
35+
36+ const message = "Hello from Node.js client!" ;
37+ await writer . write ( new TextEncoder ( ) . encode ( message ) ) ;
38+ await writer . close ( ) ;
39+ console . log ( `✓ Sent: "${ message } "` ) ;
40+
41+ // Example 2: Create and use a bidirectional stream
42+ console . log ( "\n--- Creating bidirectional stream ---" ) ;
43+ const biStream = await transport . createBidirectionalStream ( ) ;
44+
45+ // Send data
46+ const biWriter = biStream . writable . getWriter ( ) ;
47+ const request = "ping" ;
48+ await biWriter . write ( new TextEncoder ( ) . encode ( request ) ) ;
49+ await biWriter . close ( ) ;
50+ console . log ( `✓ Sent: "${ request } "` ) ;
51+
52+ // Read response
53+ const biReader = biStream . readable . getReader ( ) ;
54+ const { value, done } = await biReader . read ( ) ;
55+ if ( ! done && value ) {
56+ const response = new TextDecoder ( ) . decode ( value ) ;
57+ console . log ( `✓ Received: "${ response } "` ) ;
58+ }
59+ biReader . releaseLock ( ) ;
60+
61+ // Example 3: Listen for incoming streams
62+ console . log ( "\n--- Listening for incoming streams ---" ) ;
63+
64+ // Handle incoming unidirectional streams
65+ const uni : ReadableStreamDefaultReader < ReadableStream < Uint8Array > > =
66+ transport . incomingUnidirectionalStreams . getReader ( ) ;
67+
68+ const { value : stream } = await uni . read ( ) ;
69+ if ( ! stream ) throw new Error ( "No stream received" ) ;
70+
71+ const reader = stream . getReader ( ) ;
72+ const { value : data } = await reader . read ( ) ;
73+ if ( ! data ) throw new Error ( "No data received" ) ;
74+
75+ console . log ( `✓ Received uni stream: "${ new TextDecoder ( ) . decode ( data ) } "` ) ;
76+ reader . releaseLock ( ) ;
77+ uni . releaseLock ( ) ;
78+
79+ // Close the connection
80+ console . log ( "\n--- Closing connection ---" ) ;
81+ transport . close ( {
82+ closeCode : 0 ,
83+ reason : "Client finished" ,
84+ } ) ;
85+
86+ // Wait for closed
87+ const closeInfo = await transport . closed ;
88+ console . log ( `✓ Connection closed: ${ closeInfo . reason || "No reason" } ` ) ;
9289}
9390
9491// Run the client
0 commit comments