*** empty log message ***

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@716 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Lee Salzman
2006-11-20 17:54:58 +00:00
parent 76c24be52e
commit a32e9e559d
7 changed files with 103 additions and 87 deletions
+11 -11
View File
@@ -113,7 +113,7 @@ void connects(char *servername, char *password)
if(clienthost)
{
enet_host_connect(clienthost, &address, 4);
enet_host_connect(clienthost, &address, 3);
enet_host_flush(clienthost);
connecting = lastmillis;
connattempts = 0;
@@ -290,6 +290,16 @@ void c2sinfo(dynent *d) // send update to the server
sendstring(clientpassword, p);
clientpassword[0] = 0;
};
if(!c2sinit) // tell other clients who I am
{
packet->flags = ENET_PACKET_FLAG_RELIABLE;
c2sinit = true;
putint(p, SV_INITC2S);
sendstring(player1->name, p);
sendstring(player1->team, p);
putint(p, player1->skin);
putint(p, player1->lifesequence);
};
if(gun_changed)
{
packet->flags = ENET_PACKET_FLAG_RELIABLE;
@@ -306,16 +316,6 @@ void c2sinfo(dynent *d) // send update to the server
senditemstoserver = false;
serveriteminitdone = true;
};
if(!c2sinit) // tell other clients who I am
{
packet->flags = ENET_PACKET_FLAG_RELIABLE;
c2sinit = true;
putint(p, SV_INITC2S);
sendstring(player1->name, p);
sendstring(player1->team, p);
putint(p, player1->skin);
putint(p, player1->lifesequence);
};
int i = 0;
while(i < messages.length()) // send messages collected during the previous frames
{
+10 -14
View File
@@ -123,6 +123,14 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
break;
};
case SV_CLIENT:
{
int cn = getint(p), len = getuint(p);
ucharbuf q = p.subbuf(len);
parsemessages(cn, getclient(cn), q);
break;
};
case SV_SOUND:
if(!d) return;
playsound(getint(p), &d->o);
@@ -476,20 +484,8 @@ void localservertoclient(int chan, uchar *buf, int len) // processes any updat
switch(chan)
{
case 0: parsepositions(p); break;
case 1: parsemessages(-1, NULL, p); break;
case 2:
while(p.remaining())
{
int cn = p.get();
playerent *d = getclient(cn);
int len = p.get();
len += p.get()<<8;
ucharbuf q(&p.buf[p.len], min(len, p.maxlen-p.len));
parsemessages(cn, d, q);
p.len += min(len, p.maxlen-p.len);
};
break;
case 3: parsemessages(-1, NULL, p); break;
case 1:
case 2: parsemessages(-1, NULL, p); break;
case 42: // player1 demo data only
extern int democlientnum;
parsemessages(democlientnum, getclient(democlientnum), p);
+3 -3
View File
@@ -3,8 +3,8 @@
#define MAXTRANS 5000 // max amount of data to swallow in 1 go
#define CUBE_SERVER_PORT 28763
#define CUBE_SERVINFO_PORT 28764
#define PROTOCOL_VERSION 1123 // bump when protocol changes
#define SAVEGAMEVERSION 1006 // bump if dynent/netprotocol changes or any other savegame/demo data bumped from 5
#define PROTOCOL_VERSION 1124 // bump when protocol changes
#define SAVEGAMEVERSION 1007 // bump if dynent/netprotocol changes or any other savegame/demo data bumped from 5
// network messages codes, c2s, c2c, s2c
enum
@@ -20,7 +20,7 @@ enum
SV_FLAGPICKUP, SV_FLAGDROP, SV_FLAGRETURN, SV_FLAGSCORE, SV_FLAGINFO, SV_FLAGS, //EDIT: AH
SV_GETMASTER, SV_MASTERCMD,
SV_PWD,
SV_EXT,
SV_CLIENT,
};
enum { MCMD_KICK = 0, MCMD_BAN, MCMD_REMBANS };
+1 -1
View File
@@ -212,7 +212,7 @@ void startdemo()
demoplayback = true;
starttime = lastmillis;
conoutf("now playing demo");
dynent *d = getclient(democlientnum);
dynent *d = newclient(democlientnum);
ASSERT(d);
*d = *player1;
readdemotime();
+7 -5
View File
@@ -120,9 +120,11 @@ bool buildworldstate()
else
{
c.messageoffset = ws.messages.length();
ws.messages.add(c.clientnum);
ws.messages.add(c.messages.length()&0xFF);
ws.messages.add(c.messages.length()>>8);
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]);
};
};
@@ -151,7 +153,7 @@ bool buildworldstate()
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(),
(reliablemessages ? ENET_PACKET_FLAG_RELIABLE : 0) | ENET_PACKET_FLAG_NO_ALLOCATE);
sendpacket(c.clientnum, 2, packet);
sendpacket(c.clientnum, 1, packet);
if(!packet->referenceCount) enet_packet_destroy(packet);
else { ++ws.uses; packet->freeCallback = cleanworldstate; };
};
@@ -666,7 +668,7 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1
case SV_RECVMAP:
{
ENetPacket *mappacket = recvmap(sender);
if(mappacket) sendpacket(sender, 3, mappacket);
if(mappacket) sendpacket(sender, 2, mappacket);
else sendservmsg("no map to get", sender);
break;
};
+1 -1
View File
@@ -96,7 +96,7 @@ char msgsizesl[] = // size inclusive message token, 0 for variable
SV_FLAGPICKUP, 2, SV_FLAGDROP, 2, SV_FLAGRETURN, 2, SV_FLAGSCORE, 2, SV_FLAGINFO, 0, SV_FLAGS, 2, // EDIT: AH
SV_GETMASTER, 0, SV_MASTERCMD, 3,
SV_PWD, 0,
SV_EXT, 0,
SV_CLIENT, 0,
-1
};
+70 -52
View File
@@ -114,6 +114,65 @@ extern uint randomMT(void);
#define loopvk(v) if(false) {} else for(int k = 0; k<(v).length(); k++)
#define loopvrev(v) if(false) {} else for(int i = (v).length()-1; i>=0; i--)
template <class T>
struct databuf
{
enum
{
OVERREAD = 1<<0,
OVERWROTE = 1<<1
};
T *buf;
int len, maxlen;
uchar flags;
template <class U>
databuf(T *buf, U maxlen) : buf(buf), len(0), maxlen((int)maxlen), flags(0) {};
const T &get()
{
static T overreadval;
if(len<maxlen) return buf[len++];
flags |= OVERREAD;
return overreadval;
};
databuf subbuf(int sz)
{
sz = min(sz, maxlen-len);
len += sz;
return databuf(&buf[len-sz], sz);
};
void put(const T &val)
{
if(len<maxlen) buf[len++] = val;
else flags |= OVERWROTE;
};
void put(const T *vals, int numvals)
{
if(maxlen-len<numvals) flags |= OVERWROTE;
memcpy(&buf[len], vals, min(maxlen-len, numvals)*sizeof(T));
len += min(maxlen-len, numvals);
};
int length() const { return len; };
int remaining() const { return maxlen-len; };
bool overread() const { return flags&OVERREAD; };
bool overwrote() const { return flags&OVERWROTE; };
void forceoverread()
{
len = maxlen;
flags |= OVERREAD;
};
};
typedef databuf<char> charbuf;
typedef databuf<uchar> ucharbuf;
template <class T> struct vector
{
T *buf;
@@ -202,6 +261,17 @@ template <class T> struct vector
buf = (T *)_realloc(buf, olen*sizeof(T), (alen *= 2)*sizeof(T));
};
ucharbuf reserve(int sz)
{
while(alen-ulen<sz) vrealloc();
return databuf<T>(&buf[ulen], sz);
};
void addbuf(const databuf<T> &p)
{
ulen += p.length();
};
void remove(int i, int n)
{
for(int p = i+n; p<ulen; p++) buf[p-n] = buf[p];
@@ -388,57 +458,5 @@ inline char *newstring(const char *s, size_t l) { return s_strncpy(newstring(l),
inline char *newstring(const char *s) { return newstring(s, strlen(s)); };
inline char *newstringbuf(const char *s) { return newstring(s, _MAXDEFSTR-1); };
template <class T>
struct databuf
{
enum
{
OVERREAD = 1<<0,
OVERWROTE = 1<<1
};
T *buf;
int len, maxlen;
uchar flags;
template <class U>
databuf(T *buf, U maxlen) : buf(buf), len(0), maxlen((int)maxlen), flags(0) {};
const T &get()
{
static T overreadval;
if(len<maxlen) return buf[len++];
flags |= OVERREAD;
return overreadval;
};
void put(const T &val)
{
if(len<maxlen) buf[len++] = val;
else flags |= OVERWROTE;
};
void put(const T *vals, int numvals)
{
if(maxlen-len<numvals) flags |= OVERWROTE;
memcpy(&buf[len], vals, min(maxlen-len, numvals)*sizeof(T));
len += min(maxlen-len, numvals);
};
int length() const { return len; };
int remaining() const { return maxlen-len; };
bool overread() const { return flags&OVERREAD; };
bool overwrote() const { return flags&OVERWROTE; };
void forceoverread()
{
len = maxlen;
flags |= OVERREAD;
};
};
typedef databuf<char> charbuf;
typedef databuf<uchar> ucharbuf;
#endif