int ConnectMain( int argc, char * argv[] ) { (void)argc; (void)argv; Allocator & allocator = GetDefaultAllocator(); uint64_t clientId = 0; RandomBytes( (uint8_t*) &clientId, 8 ); printf( "\nclient id is %.16" PRIx64 "\n", clientId ); Matcher matcher( allocator ); if ( !matcher.Initialize() ) { printf( "error: failed to initialize matcher\n" ); return 1; } matcher.RequestMatch( ProtocolId, clientId ); if ( matcher.GetStatus() == MATCHER_FAILED ) { printf( "\nerror: request match failed. is the matcher running?\n\n" ); return 1; } printf( "requesting match from https://localhost:8080\n" ); MatchResponse matchResponse; matcher.GetMatchResponse( matchResponse ); if ( matchResponse.numServerAddresses == 0 ) { printf( "error: could not find a match\n" ); return 1; } printf( "received match response\n" ); ClientServerPacketFactory packetFactory; GameNetworkTransport clientTransport( packetFactory ); if ( clientTransport.GetError() != SOCKET_ERROR_NONE ) { printf( "error: failed to initialize client socket\n" ); return 1; } printf( "client started on port %d\n", clientTransport.GetAddress().GetPort() ); GameClient client( GetDefaultAllocator(), clientTransport ); client.Connect( matchResponse.serverAddresses[0], matchResponse.connectTokenData, matchResponse.connectTokenNonce, matchResponse.clientToServerKey, matchResponse.serverToClientKey ); double time = 0.0; const double deltaTime = 0.1; signal( SIGINT, interrupt_handler ); while ( !quit ) { client.SendPackets(); clientTransport.WritePackets(); clientTransport.ReadPackets(); client.ReceivePackets(); client.CheckForTimeOut(); if ( client.IsDisconnected() ) break; time += deltaTime; client.AdvanceTime( time ); clientTransport.AdvanceTime( time ); if ( client.ConnectionFailed() ) break; platform_sleep( deltaTime ); } if ( quit ) printf( "\nclient stopped\n" ); printf( "\n" ); if ( client.IsConnected() ) client.Disconnect(); return 0; }
int ClientServerMain() { LocalMatcher matcher; uint64_t clientId = 1; uint8_t connectTokenData[ConnectTokenBytes]; uint8_t connectTokenNonce[NonceBytes]; uint8_t clientToServerKey[KeyBytes]; uint8_t serverToClientKey[KeyBytes]; int numServerAddresses; Address serverAddresses[MaxServersPerConnectToken]; memset( connectTokenNonce, 0, NonceBytes ); if ( !matcher.RequestMatch( clientId, connectTokenData, connectTokenNonce, clientToServerKey, serverToClientKey, numServerAddresses, serverAddresses ) ) { printf( "error: request match failed\n" ); return 1; } ClientServerPacketFactory packetFactory; Address clientAddress( "::1", ClientPort ); Address serverAddress( "::1", ServerPort ); GameNetworkTransport clientTransport( packetFactory, clientAddress ); GameNetworkTransport serverTransport( packetFactory, serverAddress ); if ( clientTransport.GetError() != SOCKET_ERROR_NONE || serverTransport.GetError() != SOCKET_ERROR_NONE ) { printf( "error: failed to initialize sockets\n" ); return 1; } const int NumIterations = 20; double time = 0.0; GameClient client( GetDefaultAllocator(), clientTransport ); GameServer server( GetDefaultAllocator(), serverTransport ); server.SetServerAddress( serverAddress ); server.Start(); client.Connect( serverAddress, connectTokenData, connectTokenNonce, clientToServerKey, serverToClientKey ); for ( int i = 0; i < NumIterations; ++i ) { client.SendPackets(); server.SendPackets(); clientTransport.WritePackets(); serverTransport.WritePackets(); clientTransport.ReadPackets(); serverTransport.ReadPackets(); client.ReceivePackets(); server.ReceivePackets(); client.CheckForTimeOut(); server.CheckForTimeOut(); if ( client.ConnectionFailed() ) { printf( "error: client connect failed!\n" ); break; } if ( client.IsConnected() && server.GetNumConnectedClients() == 1 ) client.Disconnect(); time += 0.1f; if ( !client.IsConnecting() && !client.IsConnected() && server.GetNumConnectedClients() == 0 ) break; client.AdvanceTime( time ); server.AdvanceTime( time ); clientTransport.AdvanceTime( time ); serverTransport.AdvanceTime( time ); } client.Disconnect(); server.Stop(); return 0; }