code duplication
[netris.git] / server.c
index 3d6652ac43118fb24fb4bf724a32ae9491b7d9fd..70406a3b4daec99a11f2226fd91fd05302e77f6d 100644 (file)
--- a/server.c
+++ b/server.c
@@ -21,6 +21,7 @@
 #include "netris.h"
 
 #include <stdlib.h>
+#include <stdbool.h>
 #include <ctype.h>
 #include <string.h>
 #include <sys/types.h>
@@ -32,6 +33,7 @@
 #include <setjmp.h>
 
 #include "util.h"
+#include "msg.h"
 
 #define HEADER_SIZE sizeof(netint4[3])
 
@@ -57,7 +59,7 @@ static char verbose = 0;
 
 struct sockaddr_in addr;
 
-MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
+static MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
 static EventGenRec netGen[MAX_SCREENS] = {
        { NULL, 0, FT_read, -1, NetGenFunc, EM_net, 0, "\0", 0, HEADER_SIZE }
 };
@@ -77,19 +79,19 @@ static EventGenRec *nextGen = &alarmGen;
 static sigjmp_buf close_env;
 
 
-void SendPacketTo(short playa, short uid, NetPacketType type, int size, void *data)
+static void SendPacketTo(short player, short uid, NetPacketType type, int size, void *data)
 { //send to someone
        netint4 header[3];
 
-       if (netGen[playa].fd >= 0) {
+       if (netGen[player].fd >= 0) {
                if (verbose)
-                       fprintf(stderr, ": send %d from %d to %d\n", type, uid, playa);
+                       fprintf(stderr, MSG_SERVER_DBG_SEND "\n", type, uid, player);
                header[0] = hton4(uid);
                header[1] = hton4(type);
                header[2] = hton4(size + HEADER_SIZE);
-               if (MyWrite(netGen[playa].fd, header, HEADER_SIZE) != HEADER_SIZE)
+               if (MyWrite(netGen[player].fd, header, HEADER_SIZE) != HEADER_SIZE)
                        die("write (header)");
-               if (size > 0 && data && MyWrite(netGen[playa].fd, data, size) != size)
+               if (size > 0 && data && MyWrite(netGen[player].fd, data, size) != size)
                        die("write");
        }
 }
@@ -99,33 +101,33 @@ static MyEventType AlarmGenFunc(EventGenRec *gen, MyEvent *event)
        return E_alarm;
 }
 
-void SCloseNet(short playa)
+static void SCloseNet(short player)
 { //kick some connection's ass!
        MyEvent event;
 
-       if (netGen[playa].fd >= 0) {
-               if (Players[playa].alive >= 0) {
-                       SendPacketTo(playa, 0, NP_endConn, 0, NULL);
+       if (netGen[player].fd >= 0) {
+               if (Players[player].alive >= 0) {
+                       SendPacketTo(player, 0, NP_endConn, 0, NULL);
                        do {} while (WaitMyEvent(&event, EM_net) != E_lostConn);
                } //say bye to player
-               close(netGen[playa].fd);
-               netGen[playa].fd = -1;
+               close(netGen[player].fd);
+               netGen[player].fd = -1;
        }
-       if (netGen[playa].next)
-               RemoveEventGen(&netGen[playa]);
+       if (netGen[player].next)
+               RemoveEventGen(&netGen[player]);
 }
 
-void CloseNets(void)
+static void CloseNets(void)
 { //nou oogjes dicht en snaveltjes toe
        int i;
 
-       fprintf(stderr, "- Closing connections...\n");
+       fprintf(stderr, MSG_SERVER_CLOSE_ALL "\n");
        for (i = 1; i < MAX_SCREENS; i++)
                SCloseNet(i); // bye everybuddy
-       fprintf(stderr, "* All Done\n\n");
+       fprintf(stderr, MSG_SERVER_CLOSE_ALL_DONE "\n\n");
 }
 
-MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
+static MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
 { //receive
        int result;
        short uid, type, size;
@@ -134,7 +136,7 @@ MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
        result = MyRead(gen->fd, gen->buf + gen->bufSize,
                gen->bufGoal - gen->bufSize);
        if (result < 0) {
-               fprintf(stderr, "- Closed connection to player #%d\n", gen->player);
+               fprintf(stderr, MSG_SERVER_PLAYER_CLOSED "\n", gen->player);
                return E_lostConn;
        }
        gen->bufSize += result;
@@ -155,7 +157,7 @@ MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
        event->u.net.size = size - HEADER_SIZE;
        event->u.net.data = gen->buf + HEADER_SIZE;
        if (type == NP_endConn) {
-               fprintf(stderr, "- Quit player #%d\n", gen->player);
+               fprintf(stderr, MSG_SERVER_PLAYER_QUIT "\n", gen->player);
                return E_lostConn;
        } //client sent quit signal
        return E_net;
@@ -177,7 +179,7 @@ static MyEventType ConnGenFunc(EventGenRec *gen, MyEvent *event)
                netGen[new].fd = accept(gen->fd, (struct sockaddr *)&addr, &addrLen)
        ) < 0)
                die("accept");
-       fprintf(stderr, "+ Connection: %s\n", inet_ntoa(addr.sin_addr));
+       fprintf(stderr, MSG_SERVER_CONNECT "\n", inet_ntoa(addr.sin_addr));
        val2.l_onoff = 1;
        val2.l_linger = 0;
        setsockopt(netGen[new].fd, SOL_SOCKET, SO_LINGER,(void *)&val2,
@@ -202,7 +204,7 @@ static MyEventType ConnGenFunc(EventGenRec *gen, MyEvent *event)
        return E_connect;
 }
 
-void CountPlayers(void)
+static void CountPlayers(void)
 { //count number of players/teams
        int i, j;
        playercount = 0;
@@ -217,17 +219,13 @@ void CountPlayers(void)
        } //player alive
 }
 
-int StartServer(void)
+static int StartServer(void)
 {
        MyEvent event;
        netint2 currentpiece[MAX_SCREENS];
        int playersReady = 0;
-       int paused = 1;
+       bool paused = 1;
        int i;
-       char teams[10][7] = {
-               "", "Green", "Cyan", "Blue", "Purple",
-               "Red", "Grey", "White", "*Orange"
-       };
 
        do {
                switch (WaitMyEvent(&event, EM_any)) {
@@ -241,7 +239,7 @@ int StartServer(void)
                                SCloseNet(event.u.net.sender);
                                break; //NP_endConn
                        case E_net:
-                               if (verbose) fprintf(stderr, ": %d sent %d\n",
+                               if (verbose) fprintf(stderr, MSG_SERVER_DBG_RECV "\n",
                                        netGen[event.u.net.sender].fd, event.u.net.type);
                                switch(event.u.net.type) {
                                case NP_hello:
@@ -260,13 +258,13 @@ int StartServer(void)
                                                snprintf(data, sizeof(data),
                                                        "Version mismatch: received %d.%d",
                                                        major, protocolVersion);
-                                               fprintf(stderr, "= Wrong version player #%d (%s)\n",
+                                               fprintf(stderr, MSG_SERVER_PLAYER_EVERSION "\n",
                                                        event.u.net.sender, data);
                                                SendPacketTo(event.u.net.sender, 0, NP_error,
                                                        strlen(data)+1, data);
                                                SCloseNet(event.u.net.sender);
                                        } //version mismatch
-                                       fprintf(stderr, "* Accepted player #%d\n",
+                                       fprintf(stderr, MSG_SERVER_PLAYER_ACCEPT "\n",
                                                event.u.net.sender);
                                        break;
                                } //NP_hello
@@ -294,8 +292,8 @@ int StartServer(void)
                                        if (!Game.continuous && Game.started >= 2) {
                                                char data[40];
                                                strcpy(data, "Can't join: Game has already started");
-                                               fprintf(stderr, "- Can't join player #%d in "
-                                                       "non-continuous game\n", event.u.net.sender);
+                                               fprintf(stderr, MSG_SERVER_PLAYER_JOIN_ESTARTED,
+                                                       event.u.net.sender);
                                                SendPacketTo(event.u.net.sender, 0, NP_error,
                                                        strlen(data)+1, data);
 //                                             SCloseNet(event.u.net.sender, 0);
@@ -308,6 +306,7 @@ int StartServer(void)
                                                        int started;    //2
                                                        int continuous; //3
                                                        long seed;              //4
+                                                       float shapes[7];
                                                        int initspeed;  //5
                                                } data;
 
@@ -321,17 +320,17 @@ int StartServer(void)
                                        for (i = 1; i < MAX_SCREENS; i++)
                                                if (netGen[i].fd >= 0 && i != event.u.net.sender) {
                                                        SendPacketTo(event.u.net.sender, i, NP_newPlayer,
-                                                               sizeof(_Player), &Players[i]);
+                                                               sizeof(player_t), &Players[i]);
                                                        SendPacketTo(event.u.net.sender, i, NP_newPiece,
                                                                sizeof(Players[i].curShape), &Players[i].curShape);
                                                        SendPacketTo(i, event.u.net.sender, NP_newPlayer,
-                                                               sizeof(_Player), &Players[event.u.net.sender]);
+                                                               sizeof(player_t), &Players[event.u.net.sender]);
                                                } //send (to) players
-                                       fprintf(stderr, "> Joined player #%d: %s <%s> (%s)\n",
+                                       fprintf(stderr, MSG_SERVER_PLAYER_JOIN "\n",
                                                event.u.net.sender,
                                                Players[event.u.net.sender].name,
                                                Players[event.u.net.sender].host,
-                                               teams[Players[event.u.net.sender].team]);
+                                               teamname[Players[event.u.net.sender].team]);
                                        if (++playersReady >= minplayers) {
                                                if (Game.started > 1)
                                                        SendPacketTo(event.u.net.sender, 0,
@@ -351,7 +350,7 @@ int StartServer(void)
                                        goto sendtoall;
                                case NP_argghhh:
                                        Players[event.u.net.sender].alive = 0;
-                                       fprintf(stderr, "< Player #%d died\n",
+                                       fprintf(stderr, MSG_SERVER_PLAYER_DIE "\n",
                                                event.u.net.sender);
                                        //check for unpaused game
                                case NP_pause:
@@ -360,10 +359,9 @@ int StartServer(void)
                                        paused = Game.started < 1;
                                        for (i = 1; i < MAX_SCREENS; i++)
                                                if (Players[i].alive > 0)
-                                                       paused |= Players[i].flags & SCF_paused;
-                                       fprintf(stderr, "* Player #%d (un)paused (pause=%d)\n",
+                                                       paused |= (Players[i].flags & SCF_paused) != 0;
+                                       fprintf(stderr, MSG_SERVER_PLAYER_PAUSE "\n",
                                                event.u.net.sender, paused);
-                                       if (paused) paused = 1;
                                        goto sendtoall;
                                } //NP_pause
                                default: //relay data to all players
@@ -395,13 +393,13 @@ int StartServer(void)
                CountPlayers();
                if (Game.started < 1) {
                        if (playercount >= 2) {
-                               fprintf(stderr, "* Game (%010d) ready to start\n", Game.seed);
+                               fprintf(stderr, MSG_SERVER_GAME_READY "\n", Game.seed);
                                Game.started++;
                        } //give goahead
                } //game not yet started
                else {
                        if (playercount < 2) {
-                               fprintf(stderr, "* Stopping game\n");
+                               fprintf(stderr, MSG_SERVER_GAME_STOP "\n");
                                if (Game.seed) Game.seed++;
                                if (Game.started > 1) for (i = 1; i < MAX_SCREENS; i++) {
                                        if (Players[i].alive >= 0) {
@@ -416,7 +414,7 @@ int StartServer(void)
                        } //too few players for game
                        if (Game.started == 1 && !paused) {
                                Game.started++;
-                               fprintf(stderr, "* Game starts\n");
+                               fprintf(stderr, MSG_SERVER_GAME_START "\n");
                                for (i = 1; i < MAX_SCREENS; i++)
                                        if (Players[i].alive > 0)
                                                SendPacketTo(i, 0, NP_start, 0, NULL);
@@ -427,14 +425,12 @@ int StartServer(void)
 }
 
 
-void SHeader(void)
+static void SHeader(void)
 {
-       fprintf(stderr,
-               "NETRIS Server %s\t(c) 2002 Shiar <shiar@shiar.org>\n\n",
-               version_string);
+       fprintf(stderr, MSG_SERVER_TITLE "\n\n", version_string);
 }
 
-void SUsage(void)
+static void SUsage(void)
 {
        SHeader();
        fprintf(stderr,
@@ -455,7 +451,7 @@ void SUsage(void)
        );
 }
 
-void HandleOption(char tag, char *value)
+static void HandleOption(char tag, char *value)
 {
        switch (tag) {
        case 'v':  //verbose
@@ -494,7 +490,7 @@ void HandleOption(char tag, char *value)
        }
 }
 
-void ReadConf(char *filename)
+static void ReadConf(char *filename)
 {
        FILE *file_in;
        char buf[513];
@@ -529,13 +525,14 @@ void ReadConf(char *filename)
 
 }
 
-void CatchInt(int sig)
+static void CatchInt(int sig)
 {
        siglongjmp(close_env, 1);
 }
 
 int main(int argc, char **argv)
 {
+       int i;
        char ch;
 
        if (sigsetjmp(close_env, 1)) exit(0);
@@ -544,6 +541,8 @@ int main(int argc, char **argv)
        maxplayers = 8;
        Game.initspeed = DEFAULT_INTERVAL;
        Game.seed = time(0);
+       for (i = 0; i < sizeof(Game.shapes) / sizeof(Game.shapes[0]); i++)
+               Game.shapes[i] = 1;
        Game.gravity = 0;
        {
                int i;