unofficial version 0.7.1: ui improvements
[netris.git] / inet.c
diff --git a/inet.c b/inet.c
index b21b1374437b668bcbf4251401f3809676ea37b1..2caca525b91fb3c6b336cf6bc41868186c6c5c60 100644 (file)
--- a/inet.c
+++ b/inet.c
@@ -33,9 +33,8 @@
 #define HEADER_SIZE3 sizeof(netint4[3])
 
 ExtFunc MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
-
-EventGenRec netGen[MAX_SCREENS] = {
-       { NULL, 0, FT_read, -1, NetGenFunc, EM_net, 0, "\0", 0, HEADER_SIZE3 } };
+EventGenRec netGen =
+       { NULL, 0, FT_read, -1, NetGenFunc, EM_net, 0, "\0", 0, HEADER_SIZE3 };
 
 
 ExtFunc int InitiateConnection(char *hostStr, short port)
@@ -53,17 +52,16 @@ ExtFunc int InitiateConnection(char *hostStr, short port)
        addr.sin_family = host->h_addrtype;
        memcpy(&addr.sin_addr, host->h_addr, host->h_length);
        addr.sin_port = htons(port);
-       if ((netGen[0].fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+       if ((netGen.fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
                die("socket");
-       if (connect(netGen[0].fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+       if (connect(netGen.fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
                if (errno != ECONNREFUSED)
                        die("connect");
-               close(netGen[0].fd);
+               close(netGen.fd);
                sleep(1);
                goto again;
        }
-       AddEventGen(&netGen[0]);
-       totalPlayers = 1;
+       AddEventGen(&netGen);
        return 0;
 } //InitiateConnection
 
@@ -88,25 +86,29 @@ ExtFunc void HandShake(void)
                                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(Player) - sizeof(Players[me].host)
+                                       - sizeof(Players[me].spy) - sizeof(Players[me].small),
                                        &Players[me]);
                                break;
                        }
                        case NP_gamedata:
                        {
-                               memcpy(&Game, event.u.net.data, event.u.net.size);
+                               static struct {
+                                       int playerflags;
+                                       int maxplayers; //1
+                                       int started;    //2
+                                       int continuous; //3
+                                       long seed;              //4
+                                       int initspeed;  //5
+                               } data;
+
+                               memcpy(&data, event.u.net.data, event.u.net.size);
+                               memcpy(&Players[me].flags, &data, sizeof(data.playerflags));
+                               memcpy(&Game, &data.maxplayers,
+                                       sizeof(data) - sizeof(data.playerflags));
                                SRandom(Game.seed);
                                break;
                        }
-                       case NP_newPlayer:
-                       {
-                               totalPlayers++;
-                               memcpy(&Players[event.u.net.uid],
-                                       event.u.net.data, event.u.net.size);
-                               fprintf(stderr, "Receiving player #%d (%s)\n",
-                                       event.u.net.uid, Players[event.u.net.uid].name);
-                               break;
-                       }
                        case NP_error:
                        {
                                fprintf(stderr, "Rejected by server: %s\n", event.u.net.data);
@@ -118,69 +120,7 @@ ExtFunc void HandShake(void)
                else
                        fatal("Hm, the party apparantly ended prematurely.");
        }
-       while (event.u.net.type != NP_goAhead);
-
-       // send Players[0]
-       // receive seed, initspeed
-               // receive #players
-               // receive Players[*]
-
-       /*
-                       {
-                       netint4 data[3];
-                       int len;
-                       int seed;
-
-                       if (protocolVersion >= 3)
-                               len = sizeof(data);
-                       else
-                               len = sizeof(netint4[2]);
-                       if ((Players[0].flags & SCF_setSeed))
-                               seed = Game.seed;
-                       else
-                               seed = time(0);
-                       if (waitConn)
-                               SRandom(seed);
-                       data[0] = hton4(Players[0].flags);
-                       data[1] = hton4(seed);
-                       data[2] = hton4(Game.initspeed);
-                       SendPackets(0, NP_startConn, len, data);
-                       if (WaitMyEvent(&event, EM_net) != E_net ||
-                                       event.u.net.type != NP_startConn)
-                               fatal("Network negotiation failed");
-                       memcpy(data, event.u.net.data, len);
-                       Players[1].flags = ntoh4(data[0]);
-                       seed = ntoh4(data[1]);
-                       if (initConn) {
-                               if ((Players[0].flags & SCF_setSeed) != (Players[1].flags & SCF_setSeed))
-                                       fatal("If one player sets the random number seed, "
-                                                       "both must.");
-                               if ((Players[0].flags & SCF_setSeed) && seed != Game.seed)
-                                       fatal("Both players have set the random number seed, "
-                                                       "and they are unequal.");
-                               if (protocolVersion >= 3 && Game.initspeed != ntoh4(data[2]))
-                                       fatal("Your opponent is using a different step-down "
-                                               "interval (-i).\nYou must both use the same one.");
-                               SRandom(seed);
-                       }
-               }
-               */
-//             SendPackets(0, NP_initData, strlen(Players[0].name) + 1, Players[0].name);
-
-/*
-                       if (WaitMyEvent(&event, EM_net) != E_net ||
-                                       event.u.net.type != NP_userName)
-                               fatal("Network negotiation failed");
-                       strncpy(Players[1].name, event.u.net.data,
-                               sizeof(Players[1].name) - 1);
-                       Players[1].name[sizeof(Players[1].name)-1] = 0;
-                       for (i = 0; Players[1].name[i]; ++i)
-                               if (!isprint(Players[1].name[i]))
-                                       Players[1].name[i] = '?';
-                       for (i = 0; Players[1].host[i]; ++i)
-                               if (!isprint(Players[1].host[i]))
-                                       Players[1].host[i] = '?';
-*/
+       while (event.u.net.type != NP_gamedata);
 } //HandShake
 
 ExtFunc void CheckNetConn(void)
@@ -218,10 +158,7 @@ ExtFunc MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
        event->u.net.type = type;
        event->u.net.size = size - HEADER_SIZE3;
        event->u.net.data = gen->buf + HEADER_SIZE3;
-       if (type == NP_endConn) {
-               fprintf(stderr, "Close connection\n");
-               return E_lostConn;
-       }
+       if (type == NP_endConn) return E_lostConn;
        return E_net;
 } //NetGenFunc
 
@@ -232,9 +169,9 @@ ExtFunc void SendPacket(short uid, NetPacketType type, int size, void *data)
        header[0] = hton4(uid);
        header[1] = hton4(type);
        header[2] = hton4(size + HEADER_SIZE3);
-       if (MyWrite(netGen[0].fd, header, HEADER_SIZE3) != HEADER_SIZE3)
+       if (MyWrite(netGen.fd, header, HEADER_SIZE3) != HEADER_SIZE3)
                die("write (header)");
-       if (size > 0 && data && MyWrite(netGen[0].fd, data, size) != size)
+       if (size > 0 && data && MyWrite(netGen.fd, data, size) != size)
                die("write");
 } //SendPacket
 
@@ -242,13 +179,13 @@ ExtFunc void CloseNet(void)
 { //kick some connection's ass!
        MyEvent event;
 
-       if (netGen[0].fd >= 0) {
+       if (netGen.fd >= 0) {
                SendPacket(0, NP_endConn, 0, NULL);
-               close(netGen[0].fd);
-               netGen[0].fd = -1;
+               close(netGen.fd);
+               netGen.fd = -1;
        }
-       if (netGen[0].next)
-               RemoveEventGen(&netGen[0]);
+       if (netGen.next)
+               RemoveEventGen(&netGen);
 } //CloseNet
 
 /*