X-Git-Url: http://git.shiar.net/netris.git/blobdiff_plain/45dc9d995860486f1758dcf79fd2d8cd8dfb210a..0e779d807aa1830dde2f4a75117fd16f5627dc76:/inet.c diff --git a/inet.c b/inet.c index 1549aa0..8da9956 100644 --- a/inet.c +++ b/inet.c @@ -20,6 +20,7 @@ */ #include "netris.h" + #include #include #include @@ -28,20 +29,33 @@ #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); +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;