diff options
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/d_main.c | 20 | ||||
-rw-r--r-- | src/d_net.c | 45 | ||||
-rw-r--r-- | src/doomdef.h | 13 | ||||
-rw-r--r-- | src/g_game.c | 23 | ||||
-rw-r--r-- | src/net_client.c | 67 | ||||
-rw-r--r-- | src/net_client.h | 8 | ||||
-rw-r--r-- | src/net_defs.h | 26 | ||||
-rw-r--r-- | src/net_gui.c | 92 | ||||
-rw-r--r-- | src/net_gui.h | 50 | ||||
-rw-r--r-- | src/net_server.c | 111 | ||||
-rw-r--r-- | src/net_structrw.c | 54 | ||||
-rw-r--r-- | src/net_structrw.h | 41 |
13 files changed, 518 insertions, 34 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index b7db5881..22425ff7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -59,11 +59,13 @@ m_random.c m_random.h \ m_swap.c m_swap.h \ net_client.c \ net_defs.h \ +net_gui.c net_gui.h \ net_io.c net_io.h \ net_loop.c net_loop.h \ net_packet.c net_packet.h \ net_sdl.c net_sdl.h \ net_server.c net_server.h \ +net_structrw.c net_structrw.h \ p_ceilng.c \ p_doors.c \ p_enemy.c \ diff --git a/src/d_main.c b/src/d_main.c index 91f66fee..4b898c7d 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: d_main.c 223 2005-10-24 18:50:39Z fraggle $ +// $Id: d_main.c 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -22,6 +22,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.32 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. +// Hook in the new networking code into the main game code. +// // Revision 1.31 2005/10/24 18:50:39 fraggle // Allow the game version to emulate to be specified from the command line // and set compatibility options accordingly. @@ -141,7 +146,7 @@ //----------------------------------------------------------------------------- -static const char rcsid[] = "$Id: d_main.c 223 2005-10-24 18:50:39Z fraggle $"; +static const char rcsid[] = "$Id: d_main.c 235 2005-12-30 18:58:22Z fraggle $"; #define BGCOLOR 7 #define FGCOLOR 8 @@ -194,6 +199,7 @@ static const char rcsid[] = "$Id: d_main.c 223 2005-10-24 18:50:39Z fraggle $"; #include "wi_stuff.h" #include "st_stuff.h" #include "am_map.h" +#include "net_gui.h" #include "p_setup.h" #include "r_local.h" @@ -389,6 +395,10 @@ void D_Display (void) case GS_DEMOSCREEN: D_PageDrawer (); break; + + case GS_WAITINGSTART: + NET_Drawer(); + break; } // draw buffered stuff to screen @@ -1571,8 +1581,10 @@ void D_DoomMain (void) G_LoadGame (file); } + // TODO: Remove this test here for GS_WAITINGSTART. Temporary hack + // for new network code. - if ( gameaction != ga_loadgame ) + if (gamestate != GS_WAITINGSTART && gameaction != ga_loadgame ) { if (autostart || netgame) G_InitNew (startskill, startepisode, startmap); @@ -1580,6 +1592,6 @@ void D_DoomMain (void) D_StartTitle (); // start up intro loop } - + D_DoomLoop (); // never returns } diff --git a/src/d_net.c b/src/d_net.c index 37c2cc08..c5ef6f4c 100644 --- a/src/d_net.c +++ b/src/d_net.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: d_net.c 120 2005-09-22 13:13:47Z fraggle $ +// $Id: d_net.c 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -22,6 +22,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.9 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. +// Hook in the new networking code into the main game code. +// // Revision 1.8 2005/09/22 13:13:47 fraggle // Remove external statistics driver support (-statcopy): // nonfunctional on modern systems and never used. @@ -58,7 +63,7 @@ //----------------------------------------------------------------------------- -static const char rcsid[] = "$Id: d_net.c 120 2005-09-22 13:13:47Z fraggle $"; +static const char rcsid[] = "$Id: d_net.c 235 2005-12-30 18:58:22Z fraggle $"; #include "m_menu.h" @@ -69,6 +74,9 @@ static const char rcsid[] = "$Id: d_net.c 120 2005-09-22 13:13:47Z fraggle $"; #include "doomdef.h" #include "doomstat.h" +#include "net_client.h" +#include "net_server.h" + #define NCMD_EXIT 0x80000000 #define NCMD_RETRANSMIT 0x40000000 #define NCMD_SETUP 0x20000000 @@ -408,6 +416,11 @@ void NetUpdate (void) int realstart; int gameticdiv; + // Temporary hack - hook new client/server code into Doom + + NET_ClientRun(); + NET_ServerRun(); + // check time nowtime = I_GetTime ()/ticdup; newtics = nowtime - gametime; @@ -581,6 +594,11 @@ void D_ArbitrateNetStart (void) } } +#include "m_argv.h" +#include "net_loop.h" +#include "net_client.h" +#include "net_server.h" + // // D_CheckNetGame // Works out player numbers among the net participants @@ -590,6 +608,29 @@ extern int viewangleoffset; void D_CheckNetGame (void) { int i; + + // temporary hack + + if (M_CheckParm("-server") > 0) + { + net_addr_t *addr; + NET_ServerInit(); + + addr = net_loop_client_module.ResolveAddress(""); + + printf("address resolved: %p\n", addr); + + if (NET_ClientConnect(addr)) + { + printf("connected to local server\n"); + + gamestate = GS_WAITINGSTART; + } + else + { + printf("failed to connect\n"); + } + } for (i=0 ; i<MAXNETNODES ; i++) { diff --git a/src/doomdef.h b/src/doomdef.h index 5b458d2b..4f2e51a3 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: doomdef.h 223 2005-10-24 18:50:39Z fraggle $ +// $Id: doomdef.h 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -132,12 +132,16 @@ typedef enum // The current state of the game: whether we are // playing, gazing at the intermission screen, // the game final animation, or a demo. +// +// fraggle: GS_WAITINGSTART indicates that we are in a netgame, waiting +// for a signal from the server to start the game. typedef enum { GS_LEVEL, GS_INTERMISSION, GS_FINALE, - GS_DEMOSCREEN + GS_DEMOSCREEN, + GS_WAITINGSTART, } gamestate_t; // @@ -373,6 +377,11 @@ typedef enum //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.9 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. +// Hook in the new networking code into the main game code. +// // Revision 1.8 2005/10/24 18:50:39 fraggle // Allow the game version to emulate to be specified from the command line // and set compatibility options accordingly. diff --git a/src/g_game.c b/src/g_game.c index 91b86991..de4770fb 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: g_game.c 206 2005-10-17 20:27:05Z fraggle $ +// $Id: g_game.c 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -22,6 +22,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.17 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. +// Hook in the new networking code into the main game code. +// // Revision 1.16 2005/10/17 20:27:05 fraggle // Start of Dehacked 'Misc' section support. Initial Health+Bullets, // and bfg cells/shot are supported. @@ -89,7 +94,7 @@ static const char -rcsid[] = "$Id: g_game.c 206 2005-10-17 20:27:05Z fraggle $"; +rcsid[] = "$Id: g_game.c 235 2005-12-30 18:58:22Z fraggle $"; #include <string.h> #include <stdlib.h> @@ -100,6 +105,8 @@ rcsid[] = "$Id: g_game.c 206 2005-10-17 20:27:05Z fraggle $"; #include "deh_main.h" #include "deh_misc.h" +#include "net_gui.h" + #include "z_zone.h" #include "f_finale.h" #include "m_argv.h" @@ -639,6 +646,13 @@ boolean G_Responder (event_t* ev) } return false; } + + // waiting for a network game to start + + if (gamestate == GS_WAITINGSTART) + { + return NET_Responder(ev); + } if (gamestate == GS_LEVEL) { @@ -851,7 +865,10 @@ void G_Ticker (void) case GS_DEMOSCREEN: D_PageTicker (); - break; + break; + + case GS_WAITINGSTART: + break; } } diff --git a/src/net_client.c b/src/net_client.c index 639f609d..241f0227 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.c 233 2005-12-29 21:29:55Z fraggle $ +// $Id: net_client.c 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.3 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. +// Hook in the new networking code into the main game code. +// // Revision 1.2 2005/12/29 21:29:55 fraggle // Working client connect code // @@ -37,6 +42,7 @@ #include "i_system.h" #include "net_client.h" #include "net_defs.h" +#include "net_gui.h" #include "net_io.h" #include "net_packet.h" #include "net_server.h" @@ -56,11 +62,53 @@ typedef enum CLIENT_STATE_IN_GAME, } 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; +// data received while we are waiting for the game to start + +static void ClientParseWaitingData(net_packet_t *packet) +{ + unsigned int num_players; + unsigned int is_controller; + + if (!NET_ReadInt8(packet, &num_players) + || !NET_ReadInt8(packet, &is_controller)) + { + // invalid packet + + return; + } + + net_clients_in_game = num_players; + net_client_controller = is_controller != 0; +} + +// Received an ACK + +static void ClientParseACK(net_packet_t *packet) +{ + net_packet_t *reply; + + // send an ACK back + + reply = NET_NewPacket(10); + NET_WriteInt16(reply, NET_PACKET_TYPE_ACK); + NET_SendPacket(server_addr, reply); + NET_FreePacket(reply); + + // set the client state if we havent already + + if (client_state == CLIENT_STATE_CONNECTING) + { + client_state = CLIENT_STATE_WAITING_START; + } +} + // parse a received packet static void ClientParsePacket(net_packet_t *packet) @@ -78,10 +126,12 @@ static void ClientParsePacket(net_packet_t *packet) // received an acknowledgement to the SYN we sent - if (client_state == CLIENT_STATE_CONNECTING) - { - client_state = CLIENT_STATE_WAITING_START; - } + ClientParseACK(packet); + break; + + case NET_PACKET_TYPE_WAITING_DATA: + + ClientParseWaitingData(packet); break; case NET_PACKET_TYPE_GAMESTART: @@ -134,6 +184,11 @@ void NET_ClientRun(void) net_addr_t *addr; net_packet_t *packet; + if (!client_initialised) + { + return; + } + while (NET_RecvPacket(client_context, &addr, &packet)) { // only accept packets from the server @@ -182,6 +237,8 @@ boolean NET_ClientConnect(net_addr_t *addr) NET_AddModule(client_context, addr->module); + client_initialised = true; + // try to connect client_state = CLIENT_STATE_CONNECTING; diff --git a/src/net_client.h b/src/net_client.h index 5823627f..47a1a45b 100644 --- a/src/net_client.h +++ b/src/net_client.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.h 233 2005-12-29 21:29:55Z fraggle $ +// $Id: net_client.h 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.3 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. +// Hook in the new networking code into the main game code. +// // Revision 1.2 2005/12/29 21:29:55 fraggle // Working client connect code // @@ -38,6 +43,7 @@ #include "net_defs.h" boolean NET_ClientConnect(net_addr_t *addr); +void NET_ClientRun(void); #endif /* #ifndef NET_CLIENT_H */ diff --git a/src/net_defs.h b/src/net_defs.h index 13752556..ea732793 100644 --- a/src/net_defs.h +++ b/src/net_defs.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_defs.h 232 2005-12-29 17:48:25Z fraggle $ +// $Id: net_defs.h 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.3 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. +// Hook in the new networking code into the main game code. +// // Revision 1.2 2005/12/29 17:48:25 fraggle // Add initial client/server connect code. Reorganise sources list in // Makefile.am. @@ -101,11 +106,22 @@ struct _net_addr_s typedef enum { - NET_PACKET_TYPE_SYN, - NET_PACKET_TYPE_ACK, - NET_PACKET_TYPE_GAMESTART, - NET_PACKET_TYPE_GAMEDATA, + NET_PACKET_TYPE_SYN, + NET_PACKET_TYPE_ACK, + NET_PACKET_TYPE_WAITING_DATA, + NET_PACKET_TYPE_GAMESTART, + NET_PACKET_TYPE_GAMEDATA, } net_packet_type_t; +typedef struct +{ + int ticdup; + int extratics; + int deathmatch; + int episode; + int map; + int skill; +} net_gamesettings_t; + #endif /* #ifndef NET_DEFS_H */ diff --git a/src/net_gui.c b/src/net_gui.c new file mode 100644 index 00000000..1166493b --- /dev/null +++ b/src/net_gui.c @@ -0,0 +1,92 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// $Id: net_gui.c 235 2005-12-30 18:58:22Z fraggle $ +// +// Copyright(C) 2005 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +// $Log$ +// 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. +// Hook in the new networking code into the main game code. +// +// +// Graphical stuff related to the networking code: +// +// * The client waiting screen when we are waiting for the server to +// start the game. +// + +#include "net_gui.h" +#include "d_event.h" +#include "r_defs.h" +#include "v_video.h" +#include "w_wad.h" +#include "z_zone.h" + +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) +{ + patch_t *backdrop; + int backdrop_lumpnum; + char buf[128]; + + // Use INTERPIC or TITLEPIC if we don't have it + + backdrop_lumpnum = W_CheckNumForName("INTERPIC"); + + if (backdrop_lumpnum < 0) + { + backdrop_lumpnum = W_CheckNumForName("TITLEPIC"); + } + + backdrop = (patch_t *) W_CacheLumpNum(backdrop_lumpnum, PU_CACHE); + + // draw the backdrop + + V_DrawPatch(0, 0, 0, backdrop); + + sprintf(buf, "%i clients connected to server.", net_clients_in_game); + + M_WriteText(32, 100, buf); + + if (net_client_controller) + { + M_WriteText(32, 150, "Press space to start the game..."); + } + else + { + M_WriteText(32, 150, "Waiting for the game to start..."); + } +} + +boolean NET_Responder(event_t *event) +{ + return true; +} + diff --git a/src/net_gui.h b/src/net_gui.h new file mode 100644 index 00000000..9406fa0a --- /dev/null +++ b/src/net_gui.h @@ -0,0 +1,50 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// $Id: net_gui.h 235 2005-12-30 18:58:22Z fraggle $ +// +// Copyright(C) 2005 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +// $Log$ +// 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. +// Hook in the new networking code into the main game code. +// +// +// Graphical stuff related to the networking code: +// +// * The client waiting screen when we are waiting for the server to +// start the game. +// + + +#ifndef NET_GUI_H +#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; + +#endif /* #ifndef NET_GUI_H */ + diff --git a/src/net_server.c b/src/net_server.c index 82ba8ece..ee9ff91b 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_server.c 233 2005-12-29 21:29:55Z fraggle $ +// $Id: net_server.c 235 2005-12-30 18:58:22Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,11 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.3 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. +// Hook in the new networking code into the main game code. +// // Revision 1.2 2005/12/29 21:29:55 fraggle // Working client connect code // @@ -72,11 +77,50 @@ static boolean server_initialised = false; static net_client_t clients[MAXNETNODES]; static net_context_t *server_context; +// returns the number of clients connected + +static int ServerNumClients(void) +{ + int count; + int i; + + count = 0; + + for (i=0; i<MAXNETNODES; ++i) + { + if (clients[i].active) + { + ++count; + } + } + + return count; +} + +// returns a pointer to the client which controls the server + +static net_client_t *ServerController(void) +{ + int i; + + // first client in the list is the controller + + for (i=0; i<MAXNETNODES; ++i) + { + if (clients[i].active) + { + return &clients[i]; + } + } + + return NULL; +} + // parse a SYN from a client(initiating a connection) -static void NET_ServerParseSYN(net_packet_t *packet, - net_client_t *client, - net_addr_t *addr) +static void ServerParseSYN(net_packet_t *packet, + net_client_t *client, + net_addr_t *addr) { unsigned int magic; int i; @@ -132,7 +176,7 @@ static void NET_ServerParseSYN(net_packet_t *packet, // parse an ACK packet from a client -static void NET_ServerParseACK(net_packet_t *packet, net_client_t *client) +static void ServerParseACK(net_packet_t *packet, net_client_t *client) { if (client == NULL) { @@ -144,12 +188,16 @@ static void NET_ServerParseACK(net_packet_t *packet, net_client_t *client) // now waiting for the game to start client->state = CLIENT_STATE_WAITING_START; + + // force a waiting data packet to be sent immediately + + client->last_send_time = -1; } } // Process a packet received by the server -static void NET_ServerPacket(net_packet_t *packet, net_addr_t *addr) +static void ServerPacket(net_packet_t *packet, net_addr_t *addr) { net_client_t *client; unsigned int packet_type; @@ -161,7 +209,7 @@ static void NET_ServerPacket(net_packet_t *packet, net_addr_t *addr) for (i=0; i<MAXNETNODES; ++i) { - if (clients[i].active && client[i].addr == addr) + if (clients[i].active && clients[i].addr == addr) { // found the client @@ -180,10 +228,10 @@ static void NET_ServerPacket(net_packet_t *packet, net_addr_t *addr) switch (packet_type) { case NET_PACKET_TYPE_SYN: - NET_ServerParseSYN(packet, client, addr); + ServerParseSYN(packet, client, addr); break; case NET_PACKET_TYPE_ACK: - NET_ServerParseACK(packet, client); + ServerParseACK(packet, client); break; case NET_PACKET_TYPE_GAMESTART: break; @@ -196,9 +244,37 @@ static void NET_ServerPacket(net_packet_t *packet, net_addr_t *addr) } } + +static void ServerSendWaitingData(net_client_t *client) +{ + net_packet_t *packet; + + // time to send the client another status packet + + packet = NET_NewPacket(10); + NET_WriteInt16(packet, NET_PACKET_TYPE_WAITING_DATA); + + // include the number of clients waiting + + NET_WriteInt8(packet, ServerNumClients()); + + // indicate whether the client is the controller + + NET_WriteInt8(packet, ServerController() == client); + + // send packet to client and free + + NET_SendPacket(client->addr, packet); + NET_FreePacket(packet); + + // update time + + client->last_send_time = I_GetTimeMS(); +} + // Perform any needed action on a client -void NET_ServerRunClient(net_client_t *client) +static void ServerRunClient(net_client_t *client) { net_packet_t *packet; @@ -232,6 +308,17 @@ void NET_ServerRunClient(net_client_t *client) } } } + + // waiting for the game to start + + if (client->state == CLIENT_STATE_WAITING_START) + { + if (client->last_send_time < 0 + || I_GetTimeMS() - client->last_send_time > 1000) + { + ServerSendWaitingData(client); + } + } } // Initialise server and wait for connections @@ -272,7 +359,7 @@ void NET_ServerRun(void) while (NET_RecvPacket(server_context, &addr, &packet)) { - NET_ServerPacket(packet, addr); + ServerPacket(packet, addr); } // "Run" any clients that may have things to do, independent of responses @@ -282,7 +369,7 @@ void NET_ServerRun(void) { if (clients[i].active) { - NET_ServerRunClient(&clients[i]); + ServerRunClient(&clients[i]); } } } diff --git a/src/net_structrw.c b/src/net_structrw.c new file mode 100644 index 00000000..070da747 --- /dev/null +++ b/src/net_structrw.c @@ -0,0 +1,54 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// $Id: net_structrw.c 235 2005-12-30 18:58:22Z fraggle $ +// +// Copyright(C) 2005 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +// $Log$ +// 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. +// Hook in the new networking code into the main game code. +// +// +// Reading and writing various structures into packets +// + +#include "net_packet.h" + +void NET_WriteSettings(net_packet_t *packet, net_gamesettings_t *settings) +{ + NET_WriteInt8(packet, settings->ticdup); + NET_WriteInt8(packet, settings->extratics); + NET_WriteInt8(packet, settings->deathmatch); + NET_WriteInt8(packet, settings->episode); + NET_WriteInt8(packet, settings->map); + NET_WriteInt8(packet, settings->skill); +} + +boolean NET_ReadSettings(net_packet_t *packet, net_gamesettings_t *settings) +{ + return NET_ReadInt8(packet, (unsigned int *) &settings->ticdup) + && NET_ReadInt8(packet, (unsigned int *) &settings->extratics) + && NET_ReadInt8(packet, (unsigned int *) &settings->deathmatch) + && NET_ReadInt8(packet, (unsigned int *) &settings->episode) + && NET_ReadInt8(packet, (unsigned int *) &settings->map) + && NET_ReadInt8(packet, (unsigned int *) &settings->skill); +} + diff --git a/src/net_structrw.h b/src/net_structrw.h new file mode 100644 index 00000000..c797162b --- /dev/null +++ b/src/net_structrw.h @@ -0,0 +1,41 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// $Id: net_structrw.h 235 2005-12-30 18:58:22Z fraggle $ +// +// Copyright(C) 2005 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +// $Log$ +// 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. +// Hook in the new networking code into the main game code. +// + +#ifndef NET_STRUCTRW_H +#define NET_STRUCTRW_H + +#include "net_defs.h" +#include "net_packet.h" + +extern void NET_WriteSettings(net_packet_t *packet, net_gamesettings_t *settings); +extern boolean NET_ReadSettings(net_packet_t *packet, net_gamesettings_t *settings); + + +#endif /* #ifndef NET_STRUCTRW_H */ + |