X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fnetwork.c;h=c4e2ee6e09016cd6b9aab2c7af937986a8241c9b;hb=e2d0636d9a2b123a1c880c1142f29ed296023cae;hp=fcd757d48831d34efe78778fce6e476522c8b9f2;hpb=33a2bc2439d6770b47e395d84ca67eeef18d02d4;p=rocksndiamonds.git diff --git a/src/network.c b/src/network.c index fcd757d4..c4e2ee6e 100644 --- a/src/network.c +++ b/src/network.c @@ -240,25 +240,34 @@ boolean ConnectToServer(char *hostname, int port) DrawNetworkText("Looking for local network server ..."); - if (SDLNet_CheckSockets(udp_socket_set, 500) == 1) + /* wait for any local network server to answer UDP broadcast */ + for (i = 0; i < 5; i++) { - int num_packets = SDLNet_UDP_Recv(udp, &packet); - - if (num_packets == 1) + if (SDLNet_CheckSockets(udp_socket_set, 0) == 1) { - DrawNetworkText_Success("Network server found!"); + int num_packets = SDLNet_UDP_Recv(udp, &packet); + + if (num_packets == 1) + { + DrawNetworkText_Success("Network server found!"); + + server_host = SDLNet_Read32(&packet.address.host); + } + else + { + DrawNetworkText_Failed("No answer from network server!"); + } - server_host = SDLNet_Read32(&packet.address.host); + break; } else { - DrawNetworkText_Failed("No answer from network server!"); + Delay_WithScreenUpdates(100); } } - else - { + + if (server_host == 0) DrawNetworkText_Failed("No network server found!"); - } } rfds = SDLNet_AllocSocketSet(1); @@ -328,7 +337,7 @@ boolean ConnectToServer(char *hostname, int port) return TRUE; } - Delay(100); + Delay_WithScreenUpdates(100); } DrawNetworkText_Failed("Failed to connect to network server!"); @@ -568,6 +577,20 @@ static void Handle_OP_PLAYER_DISCONNECTED() stored_player[index_nr].connected_locally = FALSE; stored_player[index_nr].connected_network = FALSE; + + if (game_status == GAME_MODE_PLAYING) + { + char message[100]; + + sprintf(message, "Player %d left network server! Network game stopped!", + player_nr); + + Request(message, REQ_CONFIRM | REQ_STAY_CLOSED); + + SetGameStatus(GAME_MODE_MAIN); + + DrawMainMenu(); + } } static void Handle_OP_START_PLAYING() @@ -841,5 +864,5 @@ void DisconnectFromNetworkServer() DrawNetworkText_Success("Successfully disconnected!"); /* short time to recognize result of network initialization */ - Delay(1000); + Delay_WithScreenUpdates(1000); }