now everything that should be sent gets sent

This commit is contained in:
Bill Currie 2005-05-09 14:49:54 +00:00
parent 1029ad31bc
commit 57fc1eacb6
5 changed files with 53 additions and 43 deletions

View file

@ -58,6 +58,7 @@ typedef struct client_s {
int delta_sequence;
struct server_s *server;
unsigned spec_track;
int connected;

View file

@ -45,6 +45,7 @@ typedef struct player_s {
int ping;
int pl;
int frags;
int time;
plent_state_t ent;
} player_t;

View file

@ -211,13 +211,13 @@ cl_spawn_f (client_t *cl, void *unused)
MSG_WriteShort (msg, pl->frags);
MSG_WriteByte (msg, svc_updateping);
MSG_WriteByte (msg, i);
MSG_WriteShort (msg, 333/*XXX*/);
MSG_WriteShort (msg, pl->ping);
MSG_WriteByte (msg, svc_updatepl);
MSG_WriteByte (msg, i);
MSG_WriteByte (msg, 0/*XXX*/);
MSG_WriteByte (msg, pl->pl);
MSG_WriteByte (msg, svc_updateentertime);
MSG_WriteByte (msg, i);
MSG_WriteFloat (msg, 0/*XXX*/);
MSG_WriteFloat (msg, pl->time);
info = pl->info ? Info_MakeString (pl->info, 0) : "";
MSG_WriteByte (msg, svc_updateuserinfo);
MSG_WriteByte (msg, i);
@ -322,6 +322,19 @@ cl_nextdl_f (client_t *cl, void *unused)
static void
cl_ptrack_f (client_t *cl, void *unused)
{
int i;
if (Cmd_Argc () != 2) {
cl->spec_track = 0;
return;
}
i = atoi (Cmd_Argv (1));
if (i < 0 || i >= MAX_CLIENTS) {
cl->spec_track = 0;
qtv_printf ("Invalid client to track\n");
return;
}
cl->spec_track = 1 << i;
}
static void

View file

@ -554,6 +554,8 @@ Server_Broadcast (server_t *sv, int reliable, byte *msg, int len)
svc = *msg++;
len--;
for (cl = sv->clients; cl; cl = cl->next) {
if ((sv->player_mask != ~0u) && !(sv->player_mask & cl->spec_track))
continue;
if (reliable) {
MSG_ReliableWrite_Begin (&cl->backbuf, svc, len + 1);
MSG_ReliableWrite_SZ (&cl->backbuf, msg, len);

View file

@ -55,6 +55,7 @@ static __attribute__ ((unused)) const char rcsid[] =
#include "QF/sys.h"
#include "QF/va.h"
#include "qw/bothdefs.h"
#include "qw/msg_ucmd.h"
#include "qw/protocol.h"
@ -546,11 +547,6 @@ sv_setinfo (server_t *sv, qmsg_t *msg)
dstring_t *key = dstring_newstr ();
dstring_t *value = dstring_newstr ();
player_t *pl;
byte *data;
int len;
len = msg->readcount - 1;
data = msg->message->data + len;
slot = MSG_ReadByte (msg);
dstring_copystr (key, MSG_ReadString (msg));
@ -567,8 +563,6 @@ sv_setinfo (server_t *sv, qmsg_t *msg)
}
dstring_delete (key);
dstring_delete (value);
len = msg->readcount - len;
Server_Broadcast (sv, 1, data, len);
}
static void
@ -577,11 +571,6 @@ sv_updateuserinfo (server_t *sv, qmsg_t *msg)
int slot, uid;
const char *info;
player_t *pl;
byte *data;
int len;
len = msg->readcount - 1;
data = msg->message->data + len;
slot = MSG_ReadByte (msg);
uid = MSG_ReadLong (msg);
@ -597,8 +586,6 @@ sv_updateuserinfo (server_t *sv, qmsg_t *msg)
pl->info = Info_ParseString (info, MAX_INFO_STRING, 0);
pl->uid = uid;
}
len = msg->readcount - len;
Server_Broadcast (sv, 1, data, len);
}
static void
@ -641,14 +628,9 @@ sv_update_net (server_t *sv, qmsg_t *msg, int ping)
static void
sv_sound (server_t *sv, qmsg_t *msg, int stop)
{
// XXX
int c;
vec3_t v;
byte *data;
int len;
len = msg->readcount - 1;
data = msg->message->data + len;
if (stop) {
MSG_ReadShort (msg);
} else {
@ -660,8 +642,6 @@ sv_sound (server_t *sv, qmsg_t *msg, int stop)
MSG_ReadByte (msg);
MSG_ReadCoordV (msg, v);
}
len = msg->readcount - len;
Server_Broadcast (sv, 0, data, len);
}
static void
@ -744,11 +724,6 @@ sv_temp_entity (server_t *sv, qmsg_t *msg)
{
vec3_t pos;
int type;
byte *data;
int len;
len = msg->readcount - 1;
data = msg->message->data + len;
type = MSG_ReadByte (msg);
switch (type) {
@ -799,8 +774,6 @@ sv_temp_entity (server_t *sv, qmsg_t *msg)
MSG_ReadCoordV (msg, pos);
break;
}
len = msg->readcount - len;
Server_Broadcast (sv, 0, data, len);
}
static void
@ -820,15 +793,8 @@ sv_nails (server_t *sv, qmsg_t *msg, int nails2)
static void
sv_print (server_t *sv, qmsg_t *msg)
{
byte *data;
int len;
len = msg->readcount - 1;
data = msg->message->data + len;
MSG_ReadByte (msg);
qtv_printf ("%s", MSG_ReadString (msg));
len = msg->readcount - len;
Server_Broadcast (sv, 1, data, len);
}
static void
@ -844,6 +810,21 @@ sv_lightstyle (server_t *sv, qmsg_t *msg)
sv->lightstyles[ind] = strdup (style);
}
static void
sv_updateentertime (server_t *sv, qmsg_t *msg)
{
int slot = MSG_ReadByte (msg);
int time = MSG_ReadFloat (msg);
player_t *pl;
if (slot >= MAX_SV_PLAYERS) {
qtv_printf ("bogus player: %d\n", slot);
return;
}
pl = sv->players + slot;
pl->time = time;
}
static void
save_signon (server_t *sv, qmsg_t *msg, int start)
{
@ -868,6 +849,10 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
int signon_saved = 0;
while (1) {
int bc_len = msg->readcount;
byte *bc_data = msg->message->data + bc_len;
int send = 1;
svc = MSG_ReadByte (msg);
if (svc == -1)
break;
@ -878,6 +863,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
Sys_Quit ();
return;
case svc_nop:
send = 0;
break;
//case svc_setview:
// break;
@ -889,6 +875,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
break;
case svc_setangle:
sv_setangle (sv, msg);
send = 0;
break;
case svc_updatefrags:
sv_updatefrags (sv, msg);
@ -916,11 +903,11 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
break;
case svc_killedmonster:
for (pl = sv->players; pl; pl = pl->next)
pl->stats[14]++; //FIXME STAT_MONSTERS
pl->stats[STAT_MONSTERS]++;
break;
case svc_foundsecret:
for (pl = sv->players; pl; pl = pl->next)
pl->stats[13]++; //FIXME STAT_SECRETS
pl->stats[STAT_SECRETS]++;
break;
case svc_intermission:
//XXX
@ -945,9 +932,7 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
//XXX
break;
case svc_updateentertime:
//XXX
MSG_ReadByte (msg);
MSG_ReadFloat (msg);
sv_updateentertime (sv, msg);
break;
case svc_updatestat:
case svc_updatestatlong:
@ -962,16 +947,20 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
break;
case svc_playerinfo:
sv_playerinfo (sv, msg);
send = 0;
break;
case svc_nails:
case svc_nails2:
sv_nails (sv, msg, svc == svc_nails2);
send = 0;
break;
case svc_packetentities:
sv_packetentities (sv, msg, 0);
send = 0;
break;
case svc_deltapacketentities:
sv_packetentities (sv, msg, 1);
send = 0;
break;
case svc_maxspeed:
//XXX
@ -1033,6 +1022,10 @@ sv_parse (server_t *sv, qmsg_t *msg, int reliable)
sv_lightstyle (sv, msg);
break;
}
if (send) {
bc_len = msg->readcount - bc_len;
Server_Broadcast (sv, reliable, bc_data, bc_len);
}
}
if (sv->signon && !signon_saved) {
save_signon (sv, msg, start);