From e8270ae11caf81a7b2eb3d6d2193129cd2fc52b2 Mon Sep 17 00:00:00 2001 From: Lee Salzman Date: Sat, 2 Dec 2006 22:11:45 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@758 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/server.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/source/src/server.cpp b/source/src/server.cpp index 5bcb94a1..df484b7d 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -43,7 +43,6 @@ struct client // server side version of "dynent" type bool ismaster; bool isauthed; // for passworded servers vector position, messages; - int positionoffset, messageoffset; void reset() { @@ -105,27 +104,29 @@ static bool reliablemessages = false; bool buildworldstate() { + static struct { int posoff, msgoff, msglen; } pkt[MAXCLIENTS]; worldstate &ws = *new worldstate; loopv(clients) { client &c = *clients[i]; if(c.type!=ST_TCPIP) continue; - if(c.position.empty()) c.positionoffset = -1; + if(c.position.empty()) pkt[i].posoff = -1; else { - c.positionoffset = ws.positions.length(); + pkt[i].posoff = ws.positions.length(); loopvj(c.position) ws.positions.add(c.position[j]); }; - if(c.messages.empty()) c.messageoffset = -1; + if(c.messages.empty()) pkt[i].msgoff = -1; else { - c.messageoffset = ws.messages.length(); + pkt[i].msgoff = ws.messages.length(); ucharbuf p = ws.messages.reserve(16); putint(p, SV_CLIENT); putint(p, c.clientnum); putuint(p, c.messages.length()); ws.messages.addbuf(p); loopvj(c.messages) ws.messages.add(c.messages[j]); + pkt[i].msglen = ws.messages.length()-pkt[i].msgoff; }; }; int psize = ws.positions.length(), msize = ws.messages.length(); @@ -137,10 +138,10 @@ bool buildworldstate() client &c = *clients[i]; if(c.type!=ST_TCPIP) continue; ENetPacket *packet; - if(psize && (c.positionoffset<0 || psize-c.position.length()>0)) + if(psize && (pkt[i].posoff<0 || psize-c.position.length()>0)) { - packet = enet_packet_create(&ws.positions[c.positionoffset<0 ? 0 : c.positionoffset+c.position.length()], - c.positionoffset<0 ? psize : psize-c.position.length(), + packet = enet_packet_create(&ws.positions[pkt[i].posoff<0 ? 0 : pkt[i].posoff+c.position.length()], + pkt[i].posoff<0 ? psize : psize-c.position.length(), ENET_PACKET_FLAG_NO_ALLOCATE); sendpacket(c.clientnum, 0, packet); if(!packet->referenceCount) enet_packet_destroy(packet); @@ -148,10 +149,10 @@ bool buildworldstate() }; c.position.setsizenodelete(0); - if(msize && (c.messageoffset<0 || msize-3-c.messages.length()>0)) + if(msize && (pkt[i].msgoff<0 || msize-pkt[i].msglen>0)) { - packet = enet_packet_create(&ws.messages[c.messageoffset<0 ? 0 : c.messageoffset+3+c.messages.length()], - c.messageoffset<0 ? msize : msize-3-c.messages.length(), + packet = enet_packet_create(&ws.messages[pkt[i].msgoff<0 ? 0 : pkt[i].msgoff+pkt[i].msglen], + pkt[i].msgoff<0 ? msize : msize-pkt[i].msglen, (reliablemessages ? ENET_PACKET_FLAG_RELIABLE : 0) | ENET_PACKET_FLAG_NO_ALLOCATE); sendpacket(c.clientnum, 1, packet); if(!packet->referenceCount) enet_packet_destroy(packet);