diff options
author | Simon Howard | 2006-03-07 12:46:52 +0000 |
---|---|---|
committer | Simon Howard | 2006-03-07 12:46:52 +0000 |
commit | edc20cc64e1930bdcc9466063e17f91519492a37 (patch) | |
tree | 61e5694f42158508051e06931396cf75767c96ed /src | |
parent | 76b9a5e33a500e96789572b9e6deb6df4b392d1e (diff) | |
download | chocolate-doom-edc20cc64e1930bdcc9466063e17f91519492a37.tar.gz chocolate-doom-edc20cc64e1930bdcc9466063e17f91519492a37.tar.bz2 chocolate-doom-edc20cc64e1930bdcc9466063e17f91519492a37.zip |
Generic console message mechanism. Inform all players when recording
a low-res demo.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 410
Diffstat (limited to 'src')
-rw-r--r-- | src/net_client.c | 34 | ||||
-rw-r--r-- | src/net_defs.h | 3 | ||||
-rw-r--r-- | src/net_server.c | 51 |
3 files changed, 82 insertions, 6 deletions
diff --git a/src/net_client.c b/src/net_client.c index 38e40017..379a5a78 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_client.c 401 2006-03-01 20:02:53Z fraggle $ +// $Id: net_client.c 410 2006-03-07 12:46:52Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -143,6 +143,7 @@ // Network client code // +#include <ctype.h> #include <stdlib.h> #include <string.h> @@ -884,6 +885,33 @@ static void NET_CL_ParseResendRequest(net_packet_t *packet) NET_CL_SendTics(start, start + num_tics - 1); } +// Console message that the server wants the client to print + +static void NET_CL_ParseConsoleMessage(net_packet_t *packet) +{ + char *msg; + char *p; + + msg = NET_ReadString(packet); + + if (msg == NULL) + { + return; + } + + // Do not do a straight "puts" of the string, as this could be + // dangerous (sending control codes to terminals can do all + // kinds of things) + + for (p=msg; *p; ++p) + { + if (isprint(*p)) + putchar(*p); + } + + putchar('\n'); +} + // parse a received packet static void NET_CL_ParsePacket(net_packet_t *packet) @@ -919,6 +947,10 @@ static void NET_CL_ParsePacket(net_packet_t *packet) NET_CL_ParseResendRequest(packet); break; + case NET_PACKET_TYPE_CONSOLE_MESSAGE: + NET_CL_ParseConsoleMessage(packet); + break; + default: break; } diff --git a/src/net_defs.h b/src/net_defs.h index 856a113c..ba5b769c 100644 --- a/src/net_defs.h +++ b/src/net_defs.h @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_defs.h 401 2006-03-01 20:02:53Z fraggle $ +// $Id: net_defs.h 410 2006-03-07 12:46:52Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -166,6 +166,7 @@ typedef enum NET_PACKET_TYPE_DISCONNECT_ACK, NET_PACKET_TYPE_RELIABLE_ACK, NET_PACKET_TYPE_GAMEDATA_RESEND, + NET_PACKET_TYPE_CONSOLE_MESSAGE, } net_packet_type_t; typedef struct diff --git a/src/net_server.c b/src/net_server.c index 66efa142..4fb91d6e 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_server.c 409 2006-03-06 20:48:07Z fraggle $ +// $Id: net_server.c 410 2006-03-07 12:46:52Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -158,6 +158,7 @@ // Network server code // +#include <stdarg.h> #include <stdlib.h> #include <string.h> @@ -262,6 +263,48 @@ static boolean ClientConnected(net_client_t *client) && client->connection.state == NET_CONN_STATE_CONNECTED; } +// Send a message to be displayed on a client's console + +static void NET_SV_SendConsoleMessage(net_client_t *client, char *s, ...) +{ + char buf[1024]; + va_list args; + net_packet_t *packet; + + va_start(args, s); + vsnprintf(buf, sizeof(buf), s, args); + va_end(args); + + packet = NET_Conn_NewReliable(&client->connection, + NET_PACKET_TYPE_CONSOLE_MESSAGE); + + NET_WriteString(packet, buf); +} + +// Send a message to all clients + +static void NET_SV_BroadcastMessage(char *s, ...) +{ + char buf[1024]; + va_list args; + int i; + + va_start(args, s); + vsnprintf(buf, sizeof(buf), s, args); + va_end(args); + + for (i=0; i<MAXNETNODES; ++i) + { + if (ClientConnected(&clients[i])) + { + NET_SV_SendConsoleMessage(&clients[i], buf); + } + } +} + + +// Assign player numbers to connected clients + static void NET_SV_AssignPlayers(void) { int i; @@ -661,9 +704,9 @@ static void NET_SV_ParseGameStart(net_packet_t *packet, net_client_t *client) { if (sv_players[i] != NULL && sv_players[i]->recording_lowres) { - printf("SV: Playing in low resolution turning mode, " - "because player %i is recording a Vanilla demo.\n", - i + 1); + NET_SV_BroadcastMessage("Playing in low resolution turning mode, " + "because player %i is recording a Vanilla demo.\n", + i + 1); settings.lowres_turn = true; } |