git.shiar.nl
/
netris.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
avoid tabs in documentation
[netris.git]
/
inet.c
diff --git
a/inet.c
b/inet.c
index 2caca525b91fb3c6b336cf6bc41868186c6c5c60..ca3230c9fbd162cb5db623b210b1ec0463fc0385 100644
(file)
--- a/
inet.c
+++ b/
inet.c
@@
-20,6
+20,7
@@
*/
#include "netris.h"
*/
#include "netris.h"
+
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
@@
-28,20
+29,33
@@
#include <netdb.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>
+#include <setjmp.h>
+
+#include "inet.h"
#define HEADER_SIZE sizeof(netint2[2])
#define HEADER_SIZE3 sizeof(netint4[3])
#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 };
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);
+}
+
+int InitiateConnection(char *hostStr, short port)
{ //connect to host
struct sockaddr_in addr;
struct hostent *host;
{ //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)
AtExit(CloseNet);
host = gethostbyname(hostStr);
if (!host)
@@
-63,9
+77,9
@@
ExtFunc int InitiateConnection(char *hostStr, short port)
}
AddEventGen(&netGen);
return 0;
}
AddEventGen(&netGen);
return 0;
-}
//InitiateConnection
+}
-
ExtFunc
void HandShake(void)
+void HandShake(void)
{ //talk to your host
MyEvent event;
{ //talk to your host
MyEvent event;
@@
-78,57
+92,58
@@
ExtFunc void HandShake(void)
do {
if (WaitMyEvent(&event, EM_net) == E_net)
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;
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,
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;
}
&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;
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));
} 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));
memcpy(&Game, &data.maxplayers,
sizeof(data) - sizeof(data.playerflags));
- SRandom(Game.seed);
break;
break;
- }
+ }
//NP_gamedata
case NP_error:
{
fprintf(stderr, "Rejected by server: %s\n", event.u.net.data);
exit(1);
case NP_error:
{
fprintf(stderr, "Rejected by server: %s\n", event.u.net.data);
exit(1);
- }
+ }
//NP_error
default:
break;
default:
break;
- }
+
}
else
fatal("Hm, the party apparantly ended prematurely.");
}
while (event.u.net.type != NP_gamedata);
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;
{ //receive
int result;
short uid, type, size;
@@
-160,9
+175,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;
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];
{ //send shit to server
netint4 header[3];
@@
-173,9
+188,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");
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;
{ //kick some connection's ass!
MyEvent event;
@@
-186,9
+201,5
@@
ExtFunc void CloseNet(void)
}
if (netGen.next)
RemoveEventGen(&netGen);
}
if (netGen.next)
RemoveEventGen(&netGen);
-}
//CloseNet
+}
-/*
- * vi: ts=4 ai
- * vim: noai si
- */