X-Git-Url: http://git.shiar.net/netris.git/blobdiff_plain/21add7c13bc1df386e45aad2939ee5ff2a152c2b..4f561019fc85c2817e3a72341397d1df32bc0868:/inet.c diff --git a/inet.c b/inet.c index b21b137..2caca52 100644 --- 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 /*