#include <errno.h>
#define HEADER_SIZE sizeof(netint2[2])
+#define HEADER_SIZE3 sizeof(netint4[3])
static MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
static EventGenRec netGen = { NULL, 0, FT_read, -1, NetGenFunc, EM_net };
static char netBuf[64];
-static int netBufSize, netBufGoal = HEADER_SIZE;
+static int netBufSize, netBufGoal = HEADER_SIZE3;
static int isServer, lostConn, gotEndConn;
ExtFunc void InitNet(void)
die("bind");
if (listen(sockListen, 1) < 0)
die("listen");
+
+ // while(1) {
addrLen = sizeof(addr);
- sock = accept(sockListen, (struct sockaddr *)&addr, &addrLen);
- if (sock < 0)
+ if ((sock = accept(sockListen, (struct sockaddr *)&addr, &addrLen)) < 0)
die("accept");
- close(sockListen);
- val2.l_onoff = 1;
- val2.l_linger = 0;
- setsockopt(sock, SOL_SOCKET, SO_LINGER,
- (void *)&val2, sizeof(val2));
- netGen.fd = sock;
- strcpy(opponentHost, "???");
- if (addr.sin_family == AF_INET) {
- host = gethostbyaddr((void *)&addr.sin_addr,
- sizeof(struct in_addr), AF_INET);
- if (host) {
- strncpy(opponentHost, host->h_name, sizeof(opponentHost)-1);
- opponentHost[sizeof(opponentHost)-1] = 0;
+ fprintf(stderr, "Connection: %s\n", inet_ntoa(addr.sin_addr));
+ // if (!fork()) {
+ close(sockListen);
+ val2.l_onoff = 1;
+ val2.l_linger = 0;
+ setsockopt(sock, SOL_SOCKET, SO_LINGER,
+ (void *)&val2, sizeof(val2));
+ netGen.fd = sock;
+ strcpy(opponentHost, "???");
+ if (addr.sin_family == AF_INET) {
+ host = gethostbyaddr((void *)&addr.sin_addr,
+ sizeof(struct in_addr), AF_INET);
+ if (host) {
+ strncpy(opponentHost, host->h_name, sizeof(opponentHost)-1);
+ opponentHost[sizeof(opponentHost)-1] = 0;
+ }
}
- }
- AddEventGen(&netGen);
+ AddEventGen(&netGen);
+// close(sock);
+ // exit(0);
+ // }
+// close(sock);
+ // }
isServer = 1;
return 0;
}
static MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event)
{
int result;
- short type, size;
- netint2 data[2];
+ short uid, type, size;
+ netint4 data[3];
result = MyRead(sock, netBuf + netBufSize, netBufGoal - netBufSize);
if (result < 0) {
if (netBufSize < netBufGoal)
return E_none;
memcpy(data, netBuf, sizeof(data));
- type = ntoh2(data[0]);
- size = ntoh2(data[1]);
+ uid = ntoh4(data[0]);
+ type = ntoh4(data[1]);
+ size = ntoh4(data[2]);
netBufGoal = size;
if (netBufSize < netBufGoal)
return E_none;
netBufSize = 0;
- netBufGoal = HEADER_SIZE;
+ netBufGoal = HEADER_SIZE3;
event->u.net.type = type;
- event->u.net.size = size - HEADER_SIZE;
- event->u.net.data = netBuf + HEADER_SIZE;
+ event->u.net.size = size - HEADER_SIZE3;
+ event->u.net.data = netBuf + HEADER_SIZE3;
if (type == NP_endConn) {
gotEndConn = 1;
return E_lostConn;
{
}
-ExtFunc void SendPacket(NetPacketType type, int size, void *data)
+ExtFunc void SendPacket(short uid, NetPacketType type, int size, void *data)
{
- netint2 header[2];
+ netint4 header[3];
- header[0] = hton2(type);
- header[1] = hton2(size + HEADER_SIZE);
- if (MyWrite(sock, header, HEADER_SIZE) != HEADER_SIZE)
+ header[0] = hton4(uid);
+ header[1] = hton4(type);
+ header[2] = hton4(size + HEADER_SIZE3);
+ if (MyWrite(sock, header, HEADER_SIZE3) != HEADER_SIZE3)
die("write");
if (size > 0 && data && MyWrite(sock, data, size) != size)
die("write");
if (sock >= 0) {
if (!lostConn) {
- SendPacket(NP_endConn, 0, NULL);
+ SendPacket(0, NP_endConn, 0, NULL);
if (isServer) {
while (!lostConn)
WaitMyEvent(&event, EM_net);
else {
while (!gotEndConn)
WaitMyEvent(&event, EM_net);
- SendPacket(NP_byeBye, 0, NULL);
+ SendPacket(0, NP_byeBye, 0, NULL);
}
}
close(sock);