Skip to content

Commit 6412559

Browse files
committed
completed work on loopback clients
1 parent e7b370d commit 6412559

File tree

2 files changed

+126
-8
lines changed

2 files changed

+126
-8
lines changed

c/TODO

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ DONE
8282

8383
In theory, should all work now. AHAHAHAH. Yeah right...
8484

85-
TODO
86-
8785
Implement a unit test to ensure that the loopback client is properly created, reserves the slot, and can process packets and send packets through the callback properly.
8886

89-
------------
87+
Test on windows and linux, then we're ready for 1.0 release!
88+
89+
TODO
9090

9191
Add an interface for reading and writing packets without copying or allocations.

c/netcode.c

Lines changed: 123 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)