X-Git-Url: http://git.shiar.nl/netris.git/blobdiff_plain/45dc9d995860486f1758dcf79fd2d8cd8dfb210a..HEAD:/inet.c diff --git a/inet.c b/inet.c index 1549aa0..33d49b0 100644 --- a/inet.c +++ b/inet.c @@ -15,11 +15,10 @@ * 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 #include #include @@ -28,20 +27,34 @@ #include #include #include +#include + +#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 - */