diff --git a/main.cpp b/main.cpp index a207cd6..a7b39e0 100644 --- a/main.cpp +++ b/main.cpp @@ -100,16 +100,9 @@ GameType check_server_client(int argc, char** argv) { try { addr_port = connect_code::decode(connect_code); /* Check IP address version */ - int ip_ver = 0; if (check_ip_ver(addr_port[0].data()) < 0) { throw std::invalid_argument("Invalid code entered."); } - /* From here, assume address is either IPv4 or IPv6 */ - if (check_ip_ver(addr_port[0].data()) == 4) { - ip_ver = 4; - } else { - ip_ver = 6; - } Client* client = new Client(ES_UDP, addr_port[0].data(), std::stoi(addr_port[1])); client->create_socket(); /* Send a specific message to the server, and wait for the appropriate response, to know that the server is ready */ @@ -387,11 +380,18 @@ int main(int argc, char** argv) { } } - /* For client (wait for start message from server) */ + /* For client (wait for start or quit message from server): When the peer quits the + game, it sends a serialized struct, containing all zeros, with the last bit turned + on as a flag. We catch this zero bit, as it indicates that the peer quit the game. */ if (type.mode == M_CLIENT) { do { response = type.netsock->recvAll(); - } while (response[0] != 'S'); + } while (response[0] != 'S' && response[0] != 0); + if (response[0] == 0) { + CloseWindow(); + std::cout << "Peer unexpectedly quit game." << std::endl; + return -1; + } game_started = true; std::cout << "Game has been started by server." << std::endl; }