33#include <emscripten/websocket.h>
44#include <assert.h>
55
6+ // This test performs that same server communications using two different
7+ // sockets. This verifies that multiple sockets are supported simultaneously.
8+ EMSCRIPTEN_WEBSOCKET_T sock1 ;
9+ EMSCRIPTEN_WEBSOCKET_T sock2 ;
10+
611EM_BOOL WebSocketOpen (int eventType , const EmscriptenWebSocketOpenEvent * e , void * userData ) {
7- printf ("open(eventType=%d, userData=%p)\n" , eventType , userData );
12+ printf ("open(socket=%d, eventType=%d, userData=%p)\n" , e -> socket , eventType , userData );
813
914 emscripten_websocket_send_utf8_text (e -> socket , "hello on the other side" );
1015
@@ -15,43 +20,50 @@ EM_BOOL WebSocketOpen(int eventType, const EmscriptenWebSocketOpenEvent *e, void
1520}
1621
1722EM_BOOL WebSocketClose (int eventType , const EmscriptenWebSocketCloseEvent * e , void * userData ) {
18- printf ("close(eventType=%d, wasClean=%d, code=%d, reason=%s, userData=%p)\n" , eventType , e -> wasClean , e -> code , e -> reason , userData );
23+ printf ("close(socket=%d, eventType=%d, wasClean=%d, code=%d, reason=%s, userData=%p)\n" , e -> socket , eventType , e -> wasClean , e -> code , e -> reason , userData );
1924 return 0 ;
2025}
2126
2227EM_BOOL WebSocketError (int eventType , const EmscriptenWebSocketErrorEvent * e , void * userData ) {
23- printf ("error(eventType=%d, userData=%p)\n" , eventType , userData );
28+ printf ("error(socket=%d, eventType=%d, userData=%p)\n" , e -> socket , eventType , userData );
2429 return 0 ;
2530}
2631
2732EM_BOOL WebSocketMessage (int eventType , const EmscriptenWebSocketMessageEvent * e , void * userData ) {
28- printf ("message(eventType=%d, userData=%p data=%p, numBytes=%d, isText=%d)\n" , eventType , userData , e -> data , e -> numBytes , e -> isText );
33+ printf ("message(socket=%d, eventType=%d, userData=%p data=%p, numBytes=%d, isText=%d)\n" , e -> socket , eventType , userData , e -> data , e -> numBytes , e -> isText );
2934 static int text_received = 0 ;
35+ assert (e -> socket == sock1 || e -> socket == sock2 );
3036 if (e -> isText ) {
3137 printf ("text data: \"%s\"\n" , e -> data );
3238 assert (strcmp ((const char * )e -> data , "hello on the other side" ) == 0 );
33- text_received = 1 ;
39+ text_received ++ ;
3440 return 0 ;
3541 }
3642
37- // We expect to receive the text message beofre the binary one
43+ // We expect to receive the text message before the binary one
3844 assert (text_received );
3945 printf ("binary data:" );
4046 for (int i = 0 ; i < e -> numBytes ; ++ i ) {
4147 printf (" %02X" , e -> data [i ]);
4248 assert (e -> data [i ] == i );
4349 }
4450 printf ("\n" );
45-
4651 emscripten_websocket_close (e -> socket , 0 , 0 );
4752 emscripten_websocket_delete (e -> socket );
48- emscripten_force_exit (0 );
53+ if (e -> socket == sock1 ) {
54+ sock1 = 0 ;
55+ } else {
56+ sock2 = 0 ;
57+ }
58+ // Once both sockets are closed we are done.
59+ if (!sock1 && !sock2 ) {
60+ emscripten_force_exit (0 );
61+ }
62+
4963 return 0 ;
5064}
5165
52- int main () {
53- assert (emscripten_websocket_is_supported ());
54-
66+ EMSCRIPTEN_WEBSOCKET_T create_socket () {
5567 EmscriptenWebSocketCreateAttributes attr ;
5668 emscripten_websocket_init_create_attributes (& attr );
5769
@@ -106,6 +118,13 @@ int main() {
106118 emscripten_websocket_set_onclose_callback (socket , (void * )0x43 , WebSocketClose );
107119 emscripten_websocket_set_onerror_callback (socket , (void * )0x44 , WebSocketError );
108120 emscripten_websocket_set_onmessage_callback (socket , (void * )0x45 , WebSocketMessage );
121+ return socket ;
122+ }
123+
124+ int main () {
125+ assert (emscripten_websocket_is_supported ());
126+ sock1 = create_socket ();
127+ sock2 = create_socket ();
109128 emscripten_exit_with_live_runtime ();
110129 return 0 ;
111130}
0 commit comments