/***********************************************************
-* 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 <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <signal.h>
#include <sys/socket.h>
#include <errno.h>
-#include <string.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
+#include <sys/select.h> /* apparently needed for OS/2 port */
+
+#include "libgame/libgame.h"
#include "netserv.h"
-#include "misc.h"
static int clients = 0;
static int onceonly = 0;
struct NetworkServerPlayerInfo
{
int fd;
- unsigned char player_name[16];
+ char player_name[16];
unsigned char number;
struct NetworkServerPlayerInfo *next;
char active;
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);
}
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)
{
{
struct NetworkServerPlayerInfo *player, *v;
unsigned char nxn;
+ boolean again = TRUE;
player = checked_malloc(sizeof (struct NetworkServerPlayerInfo));
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)
{
}
v = v->next;
}
+#endif
player->number = nxn;
if (options.verbose)
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)
{
len=16;
memcpy(player->player_name, &buffer[2], len-2);
player->player_name[len-2] = 0;
- for (i=0; i<len-2; i++)
+ for (i = 0; i < len - 2; i++)
{
if (player->player_name[i] < ' ' ||
- (player->player_name[i] > 0x7e && player->player_name[i] <= 0xa0))
+ ((unsigned char)(player->player_name[i]) > 0x7e &&
+ (unsigned char)(player->player_name[i]) <= 0xa0))
{
player->player_name[i] = 0;
break;
if (!player->introduced)
{
- for (v=first_player; v; v=v->next)
+ for (v = first_player; v; v = v->next)
{
if (v != player && v->introduced)
{
(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;
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;
}
- broadcast(NULL, 10 + strlen(&buffer[10])+1, 0);
+ broadcast(NULL, 10 + strlen((char *)&buffer[10])+1, 0);
}
static void Handle_OP_PAUSE_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)
{
}
/* 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;
}
/* initialize all player actions to zero */
- for (i=0; i<last_client_nr; i++)
+ for (i = 0; i < last_client_nr; i++)
buffer[6 + i] = 0;
/* broadcast actions of all players to all players */
- for (v=first_player; v; v=v->next)
+ for (v = first_player; v; v = v->next)
{
buffer[6 + v->number-1] = v->action;
v->action = 0;
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);
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);
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:
}
}
-#endif /* !MSDOS */
+#endif /* PLATFORM_UNIX */