summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Howard2006-03-07 12:46:52 +0000
committerSimon Howard2006-03-07 12:46:52 +0000
commitedc20cc64e1930bdcc9466063e17f91519492a37 (patch)
tree61e5694f42158508051e06931396cf75767c96ed /src
parent76b9a5e33a500e96789572b9e6deb6df4b392d1e (diff)
downloadchocolate-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.c34
-rw-r--r--src/net_defs.h3
-rw-r--r--src/net_server.c51
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;
}