X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=71d03604c22eb6081e1632232d3ffb852a5c9e41;hb=2fe0fbc2a34fd4b50081f1829931dea3ca2c4c1c;hp=f1cd50dafaa7dca21d6b7c4583d94300c0540e78;hpb=b2a0ff1ddd4430110b331129469dabb8ea7b6ba7;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index f1cd50da..71d03604 100644 --- a/src/events.c +++ b/src/events.c @@ -20,6 +20,7 @@ #include "misc.h" #include "tape.h" #include "joystick.h" +#include "network.h" void EventLoop(void) { @@ -244,7 +245,7 @@ void HandleClientMessageEvent(XClientMessageEvent *event) { if ((event->window == window) && (event->data.l[0] == XInternAtom(display, "WM_DELETE_WINDOW", FALSE))) - CloseAll(); + game_status = EXITGAME; } void HandleButton(int mx, int my, int button) @@ -693,199 +694,6 @@ void HandleKey(KeySym key, int key_status) } } - - -/* TEST STUFF -------------------------------------------------------------- */ - -#define PROT_VERS_1 1 -#define PROT_VERS_2 0 -#define PROT_VERS_3 1 - -#define OP_NICK 1 -#define OP_PLAY 2 -#define OP_FALL 3 -#define OP_DRAW 4 -#define OP_LOST 5 -#define OP_GONE 6 -#define OP_CLEAR 7 -#define OP_NEW 8 -#define OP_LINES 9 -#define OP_GROW 10 -#define OP_MODE 11 -#define OP_LEVEL 12 -#define OP_BOT 13 -#define OP_KILL 14 -#define OP_PAUSE 15 -#define OP_CONT 16 -#define OP_VERSION 17 -#define OP_BADVERS 18 -#define OP_MSG 19 -#define OP_YOUARE 20 -#define OP_LINESTO 21 -#define OP_WON 22 -#define OP_ZERO 23 - -/* server stuff */ - -#define BUFLEN 4096 - -extern int sfd; -extern unsigned char realbuf[], readbuf[], writbuf[]; -extern unsigned char *buf; -extern int nread, nwrite; - -extern void fatal(char *); -extern void flushbuf(void); -extern void sysmsg(char *); - -/* like memcpy, but guaranteed to handle overlap when s <= t */ -void copydown(char *s, char *t, int n) -{ - for (; n; n--) - *(s++) = *(t++); -} - -void handlemessages() -{ - unsigned int len; - static char msgbuf[300]; - - while (nread >= 4 && nread >= 4 + readbuf[3]) - { - len = readbuf[3]; - if (readbuf[0] || readbuf[1] || readbuf[2]) - fatal("Wrong server line length"); - - memcpy(buf, &readbuf[4], len); - nread -= 4 + len; - copydown(readbuf, readbuf + 4 + len, nread); - - switch(buf[1]) - { - case OP_YOUARE: - printf("OP_YOUARE: %d\n", buf[0]); - break; - - case OP_NEW: - printf("OP_NEW: %d\n", buf[0]); - sprintf(msgbuf, "new client %d connected", buf[0]); - sysmsg(msgbuf); - break; - - case OP_GONE: - printf("OP_GONE: %d\n", buf[0]); - sprintf(msgbuf, "client %d disconnected", buf[0]); - sysmsg(msgbuf); - break; - - case OP_BADVERS: - { - static char tmpbuf[128]; - - sprintf(tmpbuf, "Protocol version mismatch: server expects %d.%d.x instead of %d.%d.%d\n", buf[2], buf[3], PROT_VERS_1, PROT_VERS_2, PROT_VERS_3); - fatal(tmpbuf); - } - break; - - case OP_PLAY: - printf("OP_PLAY: %d\n", buf[0]); - sprintf(msgbuf, "client %d starts game", buf[0]); - sysmsg(msgbuf); - break; - - case OP_PAUSE: - printf("OP_PAUSE: %d\n", buf[0]); - sprintf(msgbuf, "client %d pauses game", buf[0]); - sysmsg(msgbuf); - break; - - case OP_CONT: - printf("OP_CONT: %d\n", buf[0]); - sprintf(msgbuf, "client %d continues game", buf[0]); - sysmsg(msgbuf); - break; - - case OP_WON: - printf("OP_WON: %d\n", buf[0]); - sprintf(msgbuf, "client %d wins the game", buf[0]); - sysmsg(msgbuf); - break; - - case OP_ZERO: - printf("OP_ZERO: %d\n", buf[0]); - sprintf(msgbuf, "client %d resets game counters", buf[0]); - sysmsg(msgbuf); - break; - - case OP_NICK: - printf("OP_NICK: %d\n", buf[0]); - sprintf(msgbuf, "client %d calls itself %s", buf[0], &buf[2]); - sysmsg(msgbuf); - break; - - case OP_MSG: - printf("OP_MSG: %d\n", buf[0]); - sprintf(msgbuf, "client %d sends message", buf[0]); - break; - - case OP_LOST: - printf("OP_MSG: %d\n", buf[0]); - sprintf(msgbuf, "client %d has lost", buf[0]); - break; - - case OP_LEVEL: - printf("OP_MSG: %d\n", buf[0]); - sprintf(msgbuf, "client %d sets level to %d", buf[0], buf[2]); - break; - } - } - - fflush(stdout); -} - - - -static void HandleNetworking() -{ - static struct timeval tv = { 0, 0 }; - fd_set rfds; - int r = 0; - - if (standalone) - return; - - flushbuf(); - - FD_ZERO(&rfds); - FD_SET(sfd, &rfds); - - r = select(sfd + 1, &rfds, NULL, NULL, &tv); - - if (r < 0 && errno != EINTR) - { - perror("select"); - fatal("fatal: select() failed"); - } - - if (r < 0) - FD_ZERO(&rfds); - - if (FD_ISSET(sfd, &rfds)) - { - int r; - - r = read(sfd, readbuf + nread, BUFLEN - nread); - - if (r < 0) - fatal("Error reading from server"); - if (r == 0) - fatal("Connection to server lost"); - nread += r; - - handlemessages(); - } -} - void HandleNoXEvent() { if (button_status && game_status != PLAYING) @@ -980,7 +788,12 @@ void HandleJoystick() if (tape.pausing || AllPlayersGone) joy = 0; - HandleGameActions(joy); + /* + if (!network_player_action_stored) + SendToServer_MovePlayer(joy, 0); + */ + + HandleGameActions((byte)joy); break; default: