code duplication
[netris.git] / inet.c
diff --git a/inet.c b/inet.c
index 1549aa0b388b44c8c7b0c7a3d20e5133732649ce..33d49b05c0a767b826c951c031bc1caea82b76da 100644 (file)
--- a/inet.c
+++ b/inet.c
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: inet.c,v 1.18 1996/02/09 08:22:13 mhw Exp $
  */
 
 #include "netris.h"
+
 #include <sys/types.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <netdb.h>
 #include <string.h>
 #include <errno.h>
+#include <setjmp.h>
+
+#include "inet.h"
 
 #define HEADER_SIZE sizeof(netint2[2])
 #define HEADER_SIZE3 sizeof(netint4[3])
 
-ExtFunc MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
-EventGenRec netGen =
-       { NULL, 0, FT_read, -1, NetGenFunc, EM_net, 0, "\0", 0, HEADER_SIZE3 };
+static MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
+static EventGenRec netGen = {
+       NULL, 0, FT_read, -1, NetGenFunc, EM_net, 0, "\0", 0, HEADER_SIZE3
+};
 
 
-ExtFunc int InitiateConnection(char *hostStr, short port)
+static sigjmp_buf close_env;
+
+static void CatchInt(int sig)
+{
+       siglongjmp(close_env, 1);
+}
+
+int InitiateConnection(char *hostStr, short port)
 { //connect to host
        struct sockaddr_in addr;
        struct hostent *host;
 
+       if (sigsetjmp(close_env, 1))
+               exit(0);
+       signal(SIGINT, CatchInt);  //handle exit (^C)
        AtExit(CloseNet);
        host = gethostbyname(hostStr);
        if (!host)
@@ -63,9 +76,9 @@ ExtFunc int InitiateConnection(char *hostStr, short port)
        }
        AddEventGen(&netGen);
        return 0;
-} //InitiateConnection
+}
 
-ExtFunc void HandShake(void)
+void HandShake(void)
 { //talk to your host
        MyEvent event;
 
@@ -78,16 +91,15 @@ ExtFunc void HandShake(void)
 
        do {
                if (WaitMyEvent(&event, EM_net) == E_net)
-               switch (event.u.net.type) {
+                       switch (event.u.net.type) {
                        case NP_hello:
                        {
                                me = event.u.net.uid;
-                               memcpy(&Players[me], &Players[0], sizeof(Player));
+                               memcpy(&Players[me], &Players[0], sizeof(player_t));
                                fprintf(stderr, "Accepted (%s) as #%d (%s)\n",
                                        event.u.net.data, me, Players[me].name);
                                SendPacket(0, NP_newPlayer,
-                                       sizeof(Player) - sizeof(Players[me].host)
-                                       - sizeof(Players[me].spy) - sizeof(Players[me].small),
+                                       sizeof(player_t) - sizeof(Players[me].host),
                                        &Players[me]);
                                break;
                        }
@@ -101,17 +113,18 @@ ExtFunc void HandShake(void)
                        {
                                static struct {
                                        int playerflags;
-                                       int maxplayers; //1
-                                       int started;    //2
-                                       int continuous; //3
-                                       long seed;              //4
-                                       int initspeed;  //5
+                                       int gravity;     //1
+                                       int started;     //2
+                                       int continuous;  //3
+                                       long seed;       //4
+                                       float shapes[7];
+                                       int initspeed;   //5
                                } data;
 
                                memcpy(&data, event.u.net.data, event.u.net.size);
                                memcpy(&Players[me].flags, &data, sizeof(data.playerflags));
                                memcpy(&Players[me].flags, &data, sizeof(data.playerflags));
-                               memcpy(&Game, &data.maxplayers,
+                               memcpy(&Game.gravity, &data.gravity,
                                        sizeof(data) - sizeof(data.playerflags));
                                break;
                        } //NP_gamedata
@@ -122,19 +135,14 @@ ExtFunc void HandShake(void)
                        } //NP_error
                        default:
                                break;
-               }
+                       }
                else
                        fatal("Hm, the party apparantly ended prematurely.");
-       }
-       while (event.u.net.type != NP_gamedata);
-} //HandShake
-
-ExtFunc void CheckNetConn(void)
-{ //am I necessary?
+       } while (event.u.net.type != NP_gamedata);
 }
 
 
-ExtFunc MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
+static MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
 { //receive
        int result;
        short uid, type, size;
@@ -166,9 +174,9 @@ ExtFunc MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
        event->u.net.data = gen->buf + HEADER_SIZE3;
        if (type == NP_endConn) return E_lostConn;
        return E_net;
-} //NetGenFunc
+}
 
-ExtFunc void SendPacket(short uid, NetPacketType type, int size, void *data)
+void SendPacket(short uid, NetPacketType type, int size, void *data)
 { //send shit to server
        netint4 header[3];
 
@@ -179,9 +187,9 @@ ExtFunc void SendPacket(short uid, NetPacketType type, int size, void *data)
                die("write (header)");
        if (size > 0 && data && MyWrite(netGen.fd, data, size) != size)
                die("write");
-} //SendPacket
+}
 
-ExtFunc void CloseNet(void)
+void CloseNet(void)
 { //kick some connection's ass!
        MyEvent event;
 
@@ -192,9 +200,5 @@ ExtFunc void CloseNet(void)
        }
        if (netGen.next)
                RemoveEventGen(&netGen);
-} //CloseNet
+}
 
-/*
- * vi: ts=4 ai
- * vim: noai si
- */