unofficial version 0.8: chat, code cleanup
[netris.git] / inet.c
diff --git a/inet.c b/inet.c
index 1549aa0b388b44c8c7b0c7a3d20e5133732649ce..8da9956b16917e3f236a9409432c8df139553e32 100644 (file)
--- a/inet.c
+++ b/inet.c
@@ -20,6 +20,7 @@
  */
 
 #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);
+MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
 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;
+
+void CatchInt(int sig)
+{
+       siglongjmp(close_env, 1);
+} //CatchInt
+
+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)
@@ -65,7 +79,7 @@ ExtFunc int InitiateConnection(char *hostStr, short port)
        return 0;
 } //InitiateConnection
 
-ExtFunc void HandShake(void)
+void HandShake(void)
 { //talk to your host
        MyEvent event;
 
@@ -78,16 +92,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));
                                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) - sizeof(Players[me].host),
                                        &Players[me]);
                                break;
                        }
@@ -122,19 +135,15 @@ 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?
-}
-
 
-ExtFunc MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
+MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
 { //receive
        int result;
        short uid, type, size;
@@ -168,7 +177,7 @@ ExtFunc MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
        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];
 
@@ -181,7 +190,7 @@ ExtFunc void SendPacket(short uid, NetPacketType type, int size, void *data)
                die("write");
 } //SendPacket
 
-ExtFunc void CloseNet(void)
+void CloseNet(void)
 { //kick some connection's ass!
        MyEvent event;