diff options
author | Simon Howard | 2006-01-02 21:50:26 +0000 |
---|---|---|
committer | Simon Howard | 2006-01-02 21:50:26 +0000 |
commit | fba617a6b4504c9a21f2a7f0749570f741fa8254 (patch) | |
tree | 9ffe6a0417179fac55ff4068b9a0b3abbce88ba0 /src | |
parent | dd2339bca5ee57aaee232061a4015cf30454e42e (diff) | |
download | chocolate-doom-fba617a6b4504c9a21f2a7f0749570f741fa8254.tar.gz chocolate-doom-fba617a6b4504c9a21f2a7f0749570f741fa8254.tar.bz2 chocolate-doom-fba617a6b4504c9a21f2a7f0749570f741fa8254.zip |
Restructure the waiting screen code. Establish our own separate event
loop while waiting for the game to start, to avoid affecting the original
code too much. Move some _gui variables to net_client.c.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 252
Diffstat (limited to 'src')
-rw-r--r-- | src/net_client.c | 54 | ||||
-rw-r--r-- | src/net_client.h | 13 | ||||
-rw-r--r-- | src/net_gui.c | 98 | ||||
-rw-r--r-- | src/net_gui.h | 14 |
4 files changed, 144 insertions, 35 deletions
diff --git a/src/net_client.c b/src/net_client.c index 4e9b42f3..fc3082fa 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.c 246 2006-01-02 20:14:07Z fraggle $ +// $Id: net_client.c 252 2006-01-02 21:50:26Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.8 2006/01/02 21:50:26 fraggle +// Restructure the waiting screen code. Establish our own separate event +// loop while waiting for the game to start, to avoid affecting the original +// code too much. Move some _gui variables to net_client.c. +// // Revision 1.7 2006/01/02 20:14:07 fraggle // Fix connect timeout and shutdown client properly if we fail to connect. // @@ -83,13 +88,38 @@ typedef enum CLIENT_STATE_DISCONNECTED, } net_clientstate_t; -static boolean client_initialised = false; - static net_clientstate_t client_state; static net_addr_t *server_addr; static net_context_t *client_context; static int last_send_time; +// if TRUE, we are connected to a server + +boolean net_client_connected = false; + +// if TRUE, this client is the controller of the game + +boolean net_client_controller = false; + +// Number of clients currently connected to the server + +int net_clients_in_game; + +// Waiting for the game to start? + +boolean net_waiting_for_start = false; + +// Shut down the client code, etc. Invoked after a disconnect. + +static void NET_CL_Shutdown(void) +{ + net_client_connected = false; + + NET_FreeAddress(server_addr); + + // Shut down network module, etc. To do. +} + // data received while we are waiting for the game to start static void NET_CL_ParseWaitingData(net_packet_t *packet) @@ -154,6 +184,8 @@ static void NET_CL_ParseDisconnect(net_packet_t *packet) fprintf(stderr, "Disconnected from server.\n"); // Now what? + + NET_CL_Disconnect(); } // parse a DISCONNECT_ACK packet @@ -283,7 +315,7 @@ void NET_CL_Run(void) net_addr_t *addr; net_packet_t *packet; - if (!client_initialised) + if (!net_client_connected) { return; } @@ -315,15 +347,6 @@ void NET_CL_Run(void) } } -static void NET_CL_Shutdown(void) -{ - client_initialised = false; - - NET_FreeAddress(server_addr); - - // Shut down network module, etc. To do. -} - // connect to a server boolean NET_CL_Connect(net_addr_t *addr) @@ -346,7 +369,8 @@ boolean NET_CL_Connect(net_addr_t *addr) NET_AddModule(client_context, addr->module); - client_initialised = true; + net_client_connected = true; + net_waiting_for_start = true; // try to connect @@ -400,7 +424,7 @@ void NET_CL_Disconnect(void) { int start_time; - if (!client_initialised) + if (!net_client_connected) { return; } diff --git a/src/net_client.h b/src/net_client.h index b746a8e7..2723eab6 100644 --- a/src/net_client.h +++ b/src/net_client.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.h 239 2006-01-02 00:00:08Z fraggle $ +// $Id: net_client.h 252 2006-01-02 21:50:26Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.6 2006/01/02 21:50:26 fraggle +// Restructure the waiting screen code. Establish our own separate event +// loop while waiting for the game to start, to avoid affecting the original +// code too much. Move some _gui variables to net_client.c. +// // Revision 1.5 2006/01/02 00:00:08 fraggle // Neater prefixes: NET_Client -> NET_CL_. NET_Server -> NET_SV_. // @@ -46,11 +51,17 @@ #ifndef NET_CLIENT_H #define NET_CLIENT_H +#include "doomtype.h" #include "net_defs.h" boolean NET_CL_Connect(net_addr_t *addr); void NET_CL_Disconnect(void); void NET_CL_Run(void); +extern boolean net_client_connected; +extern boolean net_client_controller; +extern int net_clients_in_game; +extern boolean net_waiting_for_start; + #endif /* #ifndef NET_CLIENT_H */ diff --git a/src/net_gui.c b/src/net_gui.c index 1166493b..c251eab9 100644 --- a/src/net_gui.c +++ b/src/net_gui.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_gui.c 235 2005-12-30 18:58:22Z fraggle $ +// $Id: net_gui.c 252 2006-01-02 21:50:26Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.2 2006/01/02 21:50:26 fraggle +// Restructure the waiting screen code. Establish our own separate event +// loop while waiting for the game to start, to avoid affecting the original +// code too much. Move some _gui variables to net_client.c. +// // Revision 1.1 2005/12/30 18:58:22 fraggle // Fix client code to correctly send reply to server on connection. // Add "waiting screen" while waiting for the game to start. @@ -33,8 +38,15 @@ // start the game. // +#include "net_client.h" #include "net_gui.h" +#include "net_server.h" + #include "d_event.h" +#include "d_main.h" +#include "i_system.h" +#include "i_video.h" +#include "m_menu.h" #include "r_defs.h" #include "v_video.h" #include "w_wad.h" @@ -42,15 +54,7 @@ extern void M_WriteText(int x, int y, char *string); -// if TRUE, this client is the controller of the game - -boolean net_client_controller = false; - -// Number of clients currently connected to the server - -int net_clients_in_game; - -void NET_Drawer(void) +static void Drawer(void) { patch_t *backdrop; int backdrop_lumpnum; @@ -85,8 +89,78 @@ void NET_Drawer(void) } } -boolean NET_Responder(event_t *event) +static void ProcessEvents(void) +{ + event_t *ev; + + while ((ev = D_PopEvent()) != NULL) + { + if (M_Responder(ev)) + { + continue; + } + + // process event ... + } +} + +// Displays a graphical screen while waiting for the game to start. + +void NET_WaitForStart(void) { - return true; + int last_tic_time; + int nowtime; + int runtics; + int i; + + if (!net_client_connected || !net_waiting_for_start) + { + return; + } + + last_tic_time = I_GetTime(); + + while (net_waiting_for_start) + { + // Keyboard/mouse events, etc. + + I_StartTic(); + ProcessEvents(); + + // Run the menu, etc. + + nowtime = I_GetTime(); + runtics = nowtime - last_tic_time; + + if (runtics > 0) + { + for (i=0; i<runtics; ++i) + { + M_Ticker(); + } + + last_tic_time = nowtime; + + // Draw the screen + + Drawer(); + M_Drawer(); + I_FinishUpdate(); + } + + // Network stuff + + NET_CL_Run(); + NET_SV_Run(); + + if (!net_client_connected) + { + I_Error("Disconnected from server"); + } + + // Don't hog the CPU + + I_Sleep(10); + } } diff --git a/src/net_gui.h b/src/net_gui.h index 9406fa0a..3b097f2e 100644 --- a/src/net_gui.h +++ b/src/net_gui.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_gui.h 235 2005-12-30 18:58:22Z fraggle $ +// $Id: net_gui.h 252 2006-01-02 21:50:26Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.2 2006/01/02 21:50:26 fraggle +// Restructure the waiting screen code. Establish our own separate event +// loop while waiting for the game to start, to avoid affecting the original +// code too much. Move some _gui variables to net_client.c. +// // Revision 1.1 2005/12/30 18:58:22 fraggle // Fix client code to correctly send reply to server on connection. // Add "waiting screen" while waiting for the game to start. @@ -38,13 +43,8 @@ #define NET_GUI_H #include "doomtype.h" -#include "d_event.h" - -extern void NET_Drawer(void); -extern boolean NET_Responder(event_t *event); -extern boolean net_client_controller; -extern int net_clients_in_game; +extern void NET_WaitForStart(); #endif /* #ifndef NET_GUI_H */ |