X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fnetserv.c;h=71834c3b1f17dbc8be3a778149e0db9ea569570e;hb=74c0f7de91268e40d15948f473eac51a9760b9c0;hp=a9ffa6a74ab9fdf8353d14e523b42fe874d308c0;hpb=0918c3eb2f6219a8cc72aa85bd9c4889788dd474;p=rocksndiamonds.git diff --git a/src/netserv.c b/src/netserv.c index a9ffa6a7..71834c3b 100644 --- a/src/netserv.c +++ b/src/netserv.c @@ -1,32 +1,33 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1995-2002 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* network.c * +* network.c * ***********************************************************/ -#ifndef MSDOS +#include "libgame/platform.h" + +#if defined(PLATFORM_UNIX) -#include #include #include #include #include #include -#include #include #include #include #include +#include "libgame/libgame.h" + #include "netserv.h" -#include "misc.h" static int clients = 0; static int onceonly = 0; @@ -88,8 +89,9 @@ static void broadcast(struct NetworkServerPlayerInfo *except, realbuffer[0] = realbuffer[1] = realbuffer[2] = 0; realbuffer[3] = (unsigned char)len; - for (player=first_player; player; player=player->next) - if (player != except && (player->active || !activeonly) && player->introduced) + for (player = first_player; player; player = player->next) + if (player != except && player->introduced && + (player->active || !activeonly)) addtobuffer(player, realbuffer, 4 + len); } @@ -112,7 +114,7 @@ static void RemovePlayer(struct NetworkServerPlayerInfo *player) first_player = player->next; else { - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v->next && v->next == player) { @@ -148,6 +150,7 @@ static void AddPlayer(int fd) { struct NetworkServerPlayerInfo *player, *v; unsigned char nxn; + boolean again = TRUE; player = checked_malloc(sizeof (struct NetworkServerPlayerInfo)); @@ -165,9 +168,28 @@ static void AddPlayer(int fd) nxn = 1; +#if 1 + while (again) + { + again = FALSE; + v = player->next; + + while (v) + { + if (v->number == nxn) + { + nxn++; + + again = TRUE; + break; + } + v = v->next; + } + } +#else again: v = player->next; - while(v) + while (v) { if (v->number == nxn) { @@ -176,6 +198,7 @@ static void AddPlayer(int fd) } v = v->next; } +#endif player->number = nxn; if (options.verbose) @@ -232,7 +255,7 @@ static void Handle_OP_NUMBER_WANTED(struct NetworkServerPlayerInfo *player) Error(ERR_NETWORK_SERVER, "client %d (%s) wants to switch to # %d", player->number, player->player_name, nr_wanted); - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v->number == nr_wanted) { @@ -280,7 +303,7 @@ static void Handle_OP_PLAYER_NAME(struct NetworkServerPlayerInfo *player, len=16; memcpy(player->player_name, &buffer[2], len-2); player->player_name[len-2] = 0; - for (i=0; iplayer_name[i] < ' ' || ((unsigned char)(player->player_name[i]) > 0x7e && @@ -306,7 +329,7 @@ static void Handle_OP_PLAYER_NAME(struct NetworkServerPlayerInfo *player, if (!player->introduced) { - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v != player && v->introduced) { @@ -335,7 +358,7 @@ static void Handle_OP_START_PLAYING(struct NetworkServerPlayerInfo *player) (buffer[4] << 8) + buffer[5], &buffer[6]); - for (w=first_player; w; w=w->next) + for (w = first_player; w; w = w->next) if (w->introduced) w->active = 1; @@ -343,7 +366,7 @@ static void Handle_OP_START_PLAYING(struct NetworkServerPlayerInfo *player) ServerFrameCounter = 0; /* reset player actions */ - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { v->action = 0; v->action_received = FALSE; @@ -376,14 +399,14 @@ static void Handle_OP_STOP_PLAYING(struct NetworkServerPlayerInfo *player) broadcast(NULL, 2, 0); } -static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player) +static void Handle_OP_MOVE_PLAYER(struct NetworkServerPlayerInfo *player) { struct NetworkServerPlayerInfo *v; int last_client_nr = 0; int i; /* store player action */ - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (v->number == player->number) { @@ -393,7 +416,7 @@ static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player) } /* check if server received action from each player */ - for (v=first_player; v; v=v->next) + for (v = first_player; v; v = v->next) { if (!v->action_received) return; @@ -403,11 +426,11 @@ static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player) } /* initialize all player actions to zero */ - for (i=0; inext) + for (v = first_player; v; v = v->next) { buffer[6 + v->number-1] = v->action; v->action = 0; @@ -476,8 +499,8 @@ void NetworkServer(int port, int serveronly) if (is_daemon) { /* become a daemon, breaking all ties with the controlling terminal */ - options.verbose = 0; - for (i=0; i<255; i++) + options.verbose = FALSE; + for (i = 0; i < 255; i++) { if (i != lfd) close(i); @@ -503,11 +526,11 @@ void NetworkServer(int port, int serveronly) PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, PROTOCOL_VERSION_3); } - while(1) + while (1) { interrupt = 0; - for (player=first_player; player; player=player->next) + for (player = first_player; player; player = player->next) flushuser(player); FD_ZERO(&fds); @@ -634,8 +657,8 @@ void NetworkServer(int port, int serveronly) Handle_OP_STOP_PLAYING(player); break; - case OP_MOVE_FIGURE: - Handle_OP_MOVE_FIGURE(player); + case OP_MOVE_PLAYER: + Handle_OP_MOVE_PLAYER(player); break; case OP_BROADCAST_MESSAGE: @@ -662,4 +685,4 @@ void NetworkServer(int port, int serveronly) } } -#endif /* !MSDOS */ +#endif /* PLATFORM_UNIX */