@@ -7089,6 +7089,10 @@ void send_loopback_packet_callback( void * context, int client_index, uint8_t *
7089
7089
check ( client_index == 0 );
7090
7090
check ( packet_data );
7091
7091
check ( packet_bytes == NETCODE_MAX_PACKET_SIZE );
7092
+ for ( int i = 0 ; i < packet_bytes ; ++ i )
7093
+ {
7094
+ check ( packet_data [i ] == (uint8_t ) i );
7095
+ }
7092
7096
num_loopback_packets_sent_to_client ++ ;
7093
7097
}
7094
7098
@@ -7244,21 +7248,135 @@ void test_loopback()
7244
7248
time += delta_time ;
7245
7249
}
7246
7250
7247
- check ( regular_client_num_packets_received >= 10 && regular_server_num_packets_received >= 10 );
7251
+ check ( regular_client_num_packets_received >= 10 );
7252
+ check ( regular_server_num_packets_received >= 10 );
7253
+ check ( num_loopback_packets_sent_to_client >= 10 );
7254
+ check ( loopback_server_num_packets_received >= 10 );
7248
7255
7249
7256
// verify that we can disconnect the loopback client
7250
7257
7251
- // ...
7258
+ check ( netcode_server_client_loopback ( server , 0 ) == 1 );
7259
+ check ( netcode_server_client_connected ( server , 0 ) == 1 );
7260
+ check ( netcode_server_num_connected_clients ( server ) == 2 );
7261
+
7262
+ netcode_server_disconnect_loopback_client ( server , 0 );
7263
+
7264
+ check ( netcode_server_client_loopback ( server , 0 ) == 0 );
7265
+ check ( netcode_server_client_connected ( server , 0 ) == 0 );
7266
+ check ( netcode_server_num_connected_clients ( server ) == 1 );
7252
7267
7253
7268
// verify that we can reconnect the loopback client
7254
7269
7255
- // ...
7270
+ netcode_random_bytes ( (uint8_t * ) & client_id , 8 );
7271
+ netcode_server_connect_loopback_client ( server , 0 , client_id , NULL );
7272
+
7273
+ check ( netcode_server_client_loopback ( server , 0 ) == 1 );
7274
+ check ( netcode_server_client_loopback ( server , 1 ) == 0 );
7275
+ check ( netcode_server_client_connected ( server , 0 ) == 1 );
7276
+ check ( netcode_server_client_connected ( server , 1 ) == 1 );
7277
+ check ( netcode_server_num_connected_clients ( server ) == 2 );
7256
7278
7257
7279
// verify that we can exchange packets for both regular and loopback client post reconnect
7258
7280
7259
- // ...
7281
+ num_loopback_packets_sent_to_client = 0 ;
7282
+ regular_server_num_packets_received = 0 ;
7283
+ regular_client_num_packets_received = 0 ;
7284
+ loopback_server_num_packets_received = 0 ;
7285
+ loopback_sequence = 0 ;
7286
+
7287
+ while ( 1 )
7288
+ {
7289
+ netcode_network_simulator_update ( network_simulator , time );
7290
+
7291
+ netcode_client_update ( client , time );
7292
+
7293
+ netcode_server_update ( server , time );
7294
+
7295
+ netcode_client_send_packet ( client , packet_data , NETCODE_MAX_PACKET_SIZE );
7296
+
7297
+ netcode_server_send_packet ( server , 0 , packet_data , NETCODE_MAX_PACKET_SIZE );
7298
+
7299
+ netcode_server_send_packet ( server , 1 , packet_data , NETCODE_MAX_PACKET_SIZE );
7300
+
7301
+ netcode_server_process_loopback_packet ( server , 0 , packet_data , NETCODE_MAX_PACKET_SIZE , loopback_sequence ++ );
7302
+
7303
+ while ( 1 )
7304
+ {
7305
+ int packet_bytes ;
7306
+ uint64_t packet_sequence ;
7307
+ uint8_t * packet = netcode_client_receive_packet ( client , & packet_bytes , & packet_sequence );
7308
+ if ( !packet )
7309
+ break ;
7310
+ (void ) packet_sequence ;
7311
+ netcode_assert ( packet_bytes == NETCODE_MAX_PACKET_SIZE );
7312
+ netcode_assert ( memcmp ( packet , packet_data , NETCODE_MAX_PACKET_SIZE ) == 0 );
7313
+ regular_client_num_packets_received ++ ;
7314
+ netcode_client_free_packet ( client , packet );
7315
+ }
7316
+
7317
+ while ( 1 )
7318
+ {
7319
+ int packet_bytes ;
7320
+ uint64_t packet_sequence ;
7321
+ void * packet = netcode_server_receive_packet ( server , 0 , & packet_bytes , & packet_sequence );
7322
+ if ( !packet )
7323
+ break ;
7324
+ (void ) packet_sequence ;
7325
+ netcode_assert ( packet_bytes == NETCODE_MAX_PACKET_SIZE );
7326
+ netcode_assert ( memcmp ( packet , packet_data , NETCODE_MAX_PACKET_SIZE ) == 0 );
7327
+ loopback_server_num_packets_received ++ ;
7328
+ netcode_server_free_packet ( server , packet );
7329
+ }
7260
7330
7261
- // verify the loopback client doesn't time out
7331
+ while ( 1 )
7332
+ {
7333
+ int packet_bytes ;
7334
+ uint64_t packet_sequence ;
7335
+ void * packet = netcode_server_receive_packet ( server , 1 , & packet_bytes , & packet_sequence );
7336
+ if ( !packet )
7337
+ break ;
7338
+ (void ) packet_sequence ;
7339
+ netcode_assert ( packet_bytes == NETCODE_MAX_PACKET_SIZE );
7340
+ netcode_assert ( memcmp ( packet , packet_data , NETCODE_MAX_PACKET_SIZE ) == 0 );
7341
+ regular_server_num_packets_received ++ ;
7342
+ netcode_server_free_packet ( server , packet );
7343
+ }
7344
+
7345
+ if ( regular_client_num_packets_received >= 10 && regular_server_num_packets_received >= 10 &&
7346
+ num_loopback_packets_sent_to_client >= 10 && loopback_server_num_packets_received >= 10 )
7347
+ break ;
7348
+
7349
+ if ( netcode_client_state ( client ) <= NETCODE_CLIENT_STATE_DISCONNECTED )
7350
+ break ;
7351
+
7352
+ time += delta_time ;
7353
+ }
7354
+
7355
+ check ( regular_client_num_packets_received >= 10 );
7356
+ check ( regular_server_num_packets_received >= 10 );
7357
+ check ( num_loopback_packets_sent_to_client >= 10 );
7358
+ check ( loopback_server_num_packets_received >= 10 );
7359
+
7360
+ // verify the regular client times out but loopback client doesn't
7361
+
7362
+ time += 100000.0 ;
7363
+
7364
+ netcode_server_update ( server , time );
7365
+
7366
+ check ( netcode_server_client_connected ( server , 0 ) == 1 );
7367
+ check ( netcode_server_client_connected ( server , 1 ) == 0 );
7368
+
7369
+ // verify that disconnect all clients leaves loopback clients alone
7370
+
7371
+ netcode_server_disconnect_all_clients ( server );
7372
+
7373
+ check ( netcode_server_client_connected ( server , 0 ) == 1 );
7374
+ check ( netcode_server_client_connected ( server , 1 ) == 0 );
7375
+ check ( netcode_server_client_loopback ( server , 0 ) == 1 );
7376
+
7377
+ // clean up
7378
+
7379
+ netcode_client_destroy ( client );
7262
7380
7263
7381
netcode_server_destroy ( server );
7264
7382
0 commit comments