*** empty log message ***

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@902 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Lee Salzman
2007-04-03 17:58:49 +00:00
parent 52b792ecf2
commit a735498b8e
8 changed files with 274 additions and 278 deletions
+65 -2
View File
@@ -642,6 +642,35 @@ void mastercmd(int sender, int cmd, int a)
sendf(-1, 1, "riii", SV_MASTERCMD, cmd, a);
}
// sending of maps between clients
string copyname;
int copysize;
uchar *copydata = NULL;
void sendmapserv(int n, string mapname, int mapsize, uchar *mapdata)
{
if(mapsize <= 0 || mapsize > 256*256) return;
s_strcpy(copyname, mapname);
copysize = mapsize;
DELETEA(copydata);
copydata = new uchar[mapsize];
memcpy(copydata, mapdata, mapsize);
}
ENetPacket *getmapserv(int n)
{
if(!copydata) return NULL;
ENetPacket *packet = enet_packet_create(NULL, MAXTRANS + copysize, ENET_PACKET_FLAG_RELIABLE);
ucharbuf p(packet->data, packet->dataLength);
putint(p, SV_RECVMAP);
sendstring(copyname, p);
putint(p, copysize);
p.put(copydata, copysize);
enet_packet_resize(packet, p.length());
return packet;
}
int checktype(int type, client *cl)
{
if(cl && cl->type==ST_LOCAL) return type;
@@ -789,14 +818,14 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1
p.forceoverread();
break;
}
sendmaps(sender, text, mapsize, &p.buf[p.len]);
sendmapserv(sender, text, mapsize, &p.buf[p.len]);
p.len += mapsize;
break;
}
case SV_RECVMAP:
{
ENetPacket *mappacket = recvmap(sender);
ENetPacket *mappacket = getmapserv(sender);
if(mappacket) sendpacket(sender, 2, mappacket);
else sendservmsg("no map to get", sender);
break;
@@ -1122,3 +1151,37 @@ void initserver(bool dedicated, int uprate, char *sdesc, char *ip, char *master,
for(;;) serverslice(/*enet_time_get_sec()*/time(NULL), 5);
}
}
#ifdef STANDALONE
void localservertoclient(int chan, uchar *buf, int len) {}
void fatal(char *s, char *o) { cleanupserver(); printf("fatal: %s\n", s); exit(EXIT_FAILURE); }
int main(int argc, char **argv) // EDIT: AH
{
int uprate = 0, maxcl = DEFAULTCLIENTS;
char *sdesc = "", *ip = "", *master = NULL, *passwd = "", *maprot = "", *masterpwd = NULL;
for(int i = 1; i<argc; i++)
{
char *a = &argv[i][2];
if(argv[i][0]=='-') switch(argv[i][1])
{
case 'u': uprate = atoi(a); break;
case 'n': sdesc = a; break;
case 'i': ip = a; break;
case 'm': master = a; break;
case 'p': passwd = a; break;
case 'c': maxcl = atoi(a); break;
case 'r': maprot = a; break;
case 'x' : masterpwd = a; break; // EDIT: AH
default: printf("WARNING: unknown commandline option\n");
}
}
if(enet_initialize()<0) fatal("Unable to initialise network module");
initserver(true, uprate, sdesc, ip, master, passwd, maxcl, maprot, masterpwd);
return EXIT_SUCCESS;
}
#endif