*** empty log message ***
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@758 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
+12
-11
@@ -43,7 +43,6 @@ struct client // server side version of "dynent" type
|
||||
bool ismaster;
|
||||
bool isauthed; // for passworded servers
|
||||
vector<uchar> 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);
|
||||
|
||||
Reference in New Issue
Block a user