@@ -7089,6 +7089,10 @@ void send_loopback_packet_callback( void * context, int client_index, uint8_t *
70897089 check ( client_index == 0 );
70907090 check ( packet_data );
70917091 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+ }
70927096 num_loopback_packets_sent_to_client ++ ;
70937097}
70947098
@@ -7244,21 +7248,135 @@ void test_loopback()
72447248 time += delta_time ;
72457249 }
72467250
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 );
72487255
72497256 // verify that we can disconnect the loopback client
72507257
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 );
72527267
72537268 // verify that we can reconnect the loopback client
72547269
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 );
72567278
72577279 // verify that we can exchange packets for both regular and loopback client post reconnect
72587280
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+ }
72607330
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 );
72627380
72637381 netcode_server_destroy ( server );
72647382
0 commit comments