projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnd-20040206-B-src
[rocksndiamonds.git]
/
src
/
netserv.c
diff --git
a/src/netserv.c
b/src/netserv.c
index 58c32a6e06d13391bb8d70d2dc8fcfffea75a48e..7343be6272fd4b431c259328a79d988061348eb8 100644
(file)
--- a/
src/netserv.c
+++ b/
src/netserv.c
@@
-20,11
+20,11
@@
#include <signal.h>
#include <sys/socket.h>
#include <errno.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 <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
+#include <sys/select.h> /* apparently needed by OS/2 */
#include "libgame/libgame.h"
#include "libgame/libgame.h"
@@
-90,8
+90,9
@@
static void broadcast(struct NetworkServerPlayerInfo *except,
realbuffer[0] = realbuffer[1] = realbuffer[2] = 0;
realbuffer[3] = (unsigned char)len;
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);
}
addtobuffer(player, realbuffer, 4 + len);
}
@@
-114,7
+115,7
@@
static void RemovePlayer(struct NetworkServerPlayerInfo *player)
first_player = player->next;
else
{
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)
{
{
if (v->next && v->next == player)
{
@@
-150,6
+151,7
@@
static void AddPlayer(int fd)
{
struct NetworkServerPlayerInfo *player, *v;
unsigned char nxn;
{
struct NetworkServerPlayerInfo *player, *v;
unsigned char nxn;
+ boolean again = TRUE;
player = checked_malloc(sizeof (struct NetworkServerPlayerInfo));
player = checked_malloc(sizeof (struct NetworkServerPlayerInfo));
@@
-167,9
+169,28
@@
static void AddPlayer(int fd)
nxn = 1;
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;
again:
v = player->next;
- while(v)
+ while
(v)
{
if (v->number == nxn)
{
{
if (v->number == nxn)
{
@@
-178,6
+199,7
@@
static void AddPlayer(int fd)
}
v = v->next;
}
}
v = v->next;
}
+#endif
player->number = nxn;
if (options.verbose)
player->number = nxn;
if (options.verbose)
@@
-234,7
+256,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);
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)
{
{
if (v->number == nr_wanted)
{
@@
-282,7
+304,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;
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] < ' ' ||
((unsigned char)(player->player_name[i]) > 0x7e &&
{
if (player->player_name[i] < ' ' ||
((unsigned char)(player->player_name[i]) > 0x7e &&
@@
-308,7
+330,7
@@
static void Handle_OP_PLAYER_NAME(struct NetworkServerPlayerInfo *player,
if (!player->introduced)
{
if (!player->introduced)
{
- for (v
=first_player; v; v=
v->next)
+ for (v
= first_player; v; v =
v->next)
{
if (v != player && v->introduced)
{
{
if (v != player && v->introduced)
{
@@
-337,7
+359,7
@@
static void Handle_OP_START_PLAYING(struct NetworkServerPlayerInfo *player)
(buffer[4] << 8) + buffer[5],
&buffer[6]);
(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;
if (w->introduced)
w->active = 1;
@@
-345,7
+367,7
@@
static void Handle_OP_START_PLAYING(struct NetworkServerPlayerInfo *player)
ServerFrameCounter = 0;
/* reset player actions */
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;
{
v->action = 0;
v->action_received = FALSE;
@@
-378,14
+400,14
@@
static void Handle_OP_STOP_PLAYING(struct NetworkServerPlayerInfo *player)
broadcast(NULL, 2, 0);
}
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 */
{
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)
{
{
if (v->number == player->number)
{
@@
-395,7
+417,7
@@
static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player)
}
/* check if server received action from each 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;
{
if (!v->action_received)
return;
@@
-405,11
+427,11
@@
static void Handle_OP_MOVE_FIGURE(struct NetworkServerPlayerInfo *player)
}
/* initialize all player actions to zero */
}
/* 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 */
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;
{
buffer[6 + v->number-1] = v->action;
v->action = 0;
@@
-479,7
+501,7
@@
void NetworkServer(int port, int serveronly)
{
/* become a daemon, breaking all ties with the controlling terminal */
options.verbose = FALSE;
{
/* become a daemon, breaking all ties with the controlling terminal */
options.verbose = FALSE;
- for (i
=0; i<
255; i++)
+ for (i
= 0; i <
255; i++)
{
if (i != lfd)
close(i);
{
if (i != lfd)
close(i);
@@
-505,11
+527,11
@@
void NetworkServer(int port, int serveronly)
PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, PROTOCOL_VERSION_3);
}
PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, PROTOCOL_VERSION_3);
}
- while(1)
+ while
(1)
{
interrupt = 0;
{
interrupt = 0;
- for (player
=first_player; player; player=
player->next)
+ for (player
= first_player; player; player =
player->next)
flushuser(player);
FD_ZERO(&fds);
flushuser(player);
FD_ZERO(&fds);
@@
-636,8
+658,8
@@
void NetworkServer(int port, int serveronly)
Handle_OP_STOP_PLAYING(player);
break;
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:
break;
case OP_BROADCAST_MESSAGE: