/***********************************************************
* Rocks'n'Diamonds -- McDuffin Strikes Back! *
*----------------------------------------------------------*
-* (c) 1995-2002 Artsoft Entertainment *
+* (c) 1995-2006 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
static int interrupt;
-static unsigned long ServerFrameCounter = 0;
+static unsigned int ServerFrameCounter = 0;
static void addtobuffer(struct NetworkServerPlayerInfo *player,
unsigned char *b, int len)
#if defined(TARGET_SDL)
SDLNet_TCP_Send(player->fd, player->writbuffer, player->nwrite);
#else
- write(player->fd, player->writbuffer, player->nwrite);
+ if (write(player->fd, player->writbuffer, player->nwrite) == -1)
+ Error(ERR_WARN, "write() failed; %s", strerror(errno));
#endif
player->nwrite = 0;
}
nxn = 1;
-#if 1
while (again)
{
again = FALSE;
v = v->next;
}
}
-#else
- again:
- v = player->next;
- while (v)
- {
- if (v->number == nxn)
- {
- nxn++;
- goto again;
- }
- v = v->next;
- }
-#endif
player->number = nxn;
#if !defined(TARGET_SDL)
Error(ERR_NETWORK_SERVER, "client %d (%s) switches to # %d",
player->number, player->player_name, nr_wanted);
else if (player->number == nr_wanted)
- Error(ERR_NETWORK_SERVER, "client %d (%s) still has # %d",
+ Error(ERR_NETWORK_SERVER, "client %d (%s) already has # %d",
player->number, player->player_name, nr_wanted);
else
Error(ERR_NETWORK_SERVER,
- "client %d (%s) cannot switch (client %d still exists)",
+ "client %d (%s) cannot switch (client %d already exists)",
player->number, player->player_name, nr_wanted);
}
if (options.verbose)
Error(ERR_NETWORK_SERVER,
- "client %d (%s) starts game [level %d from levedir %d (%s)]",
+ "client %d (%s) starts game [level %d from leveldir %d (%s)]",
player->number, player->player_name,
(buffer[2] << 8) + buffer[3],
(buffer[4] << 8) + buffer[5],
- &buffer[6]);
+ &buffer[10]);
for (w = first_player; w; w = w->next)
if (w->introduced)
/* reset frame counter */
ServerFrameCounter = 0;
+ Error(ERR_NETWORK_SERVER, "resetting ServerFrameCounter to 0");
+
/* reset player actions */
for (v = first_player; v; v = v->next)
{
static void Handle_OP_STOP_PLAYING(struct NetworkServerPlayerInfo *player)
{
+ int cause_for_stopping = buffer[2];
+
if (options.verbose)
- Error(ERR_NETWORK_SERVER, "client %d (%s) stops game",
- player->number, player->player_name);
- broadcast(NULL, 2, 0);
+ Error(ERR_NETWORK_SERVER, "client %d (%s) stops game [%d]",
+ player->number, player->player_name, cause_for_stopping);
+ broadcast(NULL, 3, 0);
}
static void Handle_OP_MOVE_PLAYER(struct NetworkServerPlayerInfo *player)
broadcast(NULL, 6 + last_client_nr, 0);
+#if 0
+ Error(ERR_NETWORK_SERVER, "sending ServerFrameCounter value %d",
+ ServerFrameCounter);
+#endif
+
ServerFrameCounter++;
}
setsid();
if (fork())
exit(0);
- chdir("/");
+ if (chdir("/") == -1)
+ Error(ERR_WARN, "chdir() failed; %s", strerror(errno));
/* open a fake stdin, stdout, stderr, just in case */
open("/dev/null", O_RDONLY);
#if defined(TARGET_SDL)
if ((sl = SDLNet_CheckSockets(fds, 500000)) < 1)
{
- Error(ERR_NETWORK_SERVER, SDLNet_GetError());
+ Error(ERR_NETWORK_SERVER, "SDLNet_CheckSockets failed: %s",
+ SDLNet_GetError());
perror("SDLNet_CheckSockets");
}
if (FD_ISSET(lfd, &fds))
{
- int newfd, slen;
+ int newfd;
+ socklen_t slen;
slen = sizeof(saddr);
newfd = accept(lfd, (struct sockaddr *)&saddr, &slen);
break;
}
- switch(buffer[1])
+ switch (buffer[1])
{
case OP_PLAYER_NAME:
Handle_OP_PLAYER_NAME(player, len);