X-Git-Url: http://git.shiar.nl/netris.git/blobdiff_plain/4f561019fc85c2817e3a72341397d1df32bc0868..f281a885d14a7d110b222ada3659ba36adcc2c84:/inet.c diff --git a/inet.c b/inet.c index 2caca52..4300eb7 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 }; +MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event); +EventGenRec netGen = { + NULL, 0, FT_read, -1, NetGenFunc, EM_net, 0, "\0", 0, HEADER_SIZE3 +}; + +static sigjmp_buf close_env; + +void CatchInt(int sig) +{ + siglongjmp(close_env, 1); +} -ExtFunc int InitiateConnection(char *hostStr, short port) +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,57 +91,57 @@ 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; } + case NP_team: + { //receive your teamnumber + memcpy(&Players[event.u.net.uid].team, event.u.net.data, + event.u.net.size); + break; + } //NP_team case NP_gamedata: { static struct { int playerflags; - int maxplayers; //1 - int started; //2 - int continuous; //3 - long seed; //4 - int initspeed; //5 + 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(&Players[me].flags, &data, sizeof(data.playerflags)); memcpy(&Game, &data.maxplayers, sizeof(data) - sizeof(data.playerflags)); - SRandom(Game.seed); break; - } + } //NP_gamedata case NP_error: { fprintf(stderr, "Rejected by server: %s\n", event.u.net.data); exit(1); - } + } //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) +MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event) { //receive int result; short uid, type, size; @@ -160,9 +173,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]; @@ -173,9 +186,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; @@ -186,9 +199,5 @@ ExtFunc void CloseNet(void) } if (netGen.next) RemoveEventGen(&netGen); -} //CloseNet +} -/* - * vi: ts=4 ai - * vim: noai si - */