Browse Source

Don't drop "action" keys in network

tags/sdlbomber-1.0.9
Stefan Bühler 10 years ago
parent
commit
fe507df7f0
2 changed files with 21 additions and 22 deletions
  1. 4
    9
      bomber.h
  2. 17
    13
      network.c

+ 4
- 9
bomber.h View File

@@ -9,7 +9,6 @@ extern int xcolors[256];
#define IXSIZE 640
#define IYSIZE 480


#define MYF1 0x180
#define MYF2 0x181
#define MYF3 0x182
@@ -36,9 +35,7 @@ extern int xcolors[256];
#define MYSHIFTED 0x40
#define MYALTED 0x200


typedef struct gfxset
{
typedef struct gfxset {
uchar gs_colormap[768];
uchar gs_inout[256];
uchar *gs_pic;
@@ -46,15 +43,13 @@ typedef struct gfxset
int gs_ysize;
} gfxset;

typedef struct figure
{
typedef struct figure {
int xsize,ysize;
int xdelta,ydelta;
uchar *graphics;
} figure;

typedef struct solid
{
typedef struct solid {
int xsize,ysize;
uchar *graphics;
} solid;
@@ -179,7 +174,7 @@ enum tile_types {
};


#define ACT_INVALID 0x88
// #define ACT_INVALID 0x88
#define ACT_NONE 0
#define ACT_UP 1
#define ACT_DOWN 2

+ 17
- 13
network.c View File

@@ -294,14 +294,18 @@ int networktraffic(void) {
if (myaction == ACT_QUIT) {
for (i = 1; i < MAXNETNODES; ++i) {
if (netnodes[i].used)
actions[i]=ACT_QUIT;
actions[i] = ACT_QUIT;
}
} else {
now=gtime();
for(;;) {
if(gtime()-now>15) break;
length=getmsg(5);
if(length>0 && *mesg!=PKT_MYDATA) fprintf(stderr, "Strange packet %d\n", (int) *mesg);
for (i = 1; i < MAXNETNODES; ++i) {
if (netnodes[i].used)
actions[i] &= ACT_MASK; /* only keep direction */
}
now = gtime();
for (;;) {
if (gtime() - now > 15) break;
length = getmsg(5);
if (length > 0 && *mesg != PKT_MYDATA) fprintf(stderr, "Strange packet %d\n", (int) *mesg);
/* check for unexpected old packets...
* for example JOIN on frame 0, respond with BEGIN if player already in game
* respond with uninvite INVITE on JOIN from others
@@ -312,7 +316,7 @@ int networktraffic(void) {
count = readuint32(mesg+5);
if (count > latestcounts[whosent]) {
latestcounts[whosent] = count;
actions[whosent] = mesg[9];
actions[whosent] = (actions[whosent] & ~ACT_MASK) | mesg[9]; /* don't drop "action" keys */
}
}
}
@@ -322,8 +326,8 @@ int networktraffic(void) {
for (i = 1; i < MAXNETNODES; ++i) {
if(netnodes[i].used) {
sendactions(i); /* send actions to every active node */
if (actions[i]==ACT_QUIT)
netnodes[i].used=0; /* remove disconnected clients */
if (actions[i] == ACT_QUIT)
netnodes[i].used = 0; /* remove disconnected clients */
}
}
return actioncount;
@@ -334,7 +338,7 @@ int networktraffic(void) {
++mydatacount;
sendmine(mydatacount);

for(;;) {
for (;;) {
/* if we got already one packet we only wait 3msec, otherwise 30msec */
long cur = gtime();
if (count >= 0 && cur - now > 3) break;
@@ -342,13 +346,13 @@ int networktraffic(void) {

length = getmsg(count >= 0 ? 3 : 20);

if (MAXNETNODES*ACTIONHIST+9 != length) continue;
if (MAXNETNODES * ACTIONHIST + 9 != length) continue;
if (!isvalidmsg_from_master()) continue;

i = readuint32(mesg+5);
i = readuint32(mesg + 5);
if (i < actioncount) continue;
count = actioncount = i;
memcpy(actionblock,mesg+9,MAXNETNODES*ACTIONHIST);
memcpy(actionblock, mesg + 9, MAXNETNODES * ACTIONHIST);
}
return actioncount;
}

Loading…
Cancel
Save