mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
bugfix: dispatch all message in one socket message
This commit is contained in:
@@ -88,8 +88,8 @@ databuffer_read(struct databuffer *db, struct messagepool *mp, void * buffer, in
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
databuffer_push(struct databuffer *db, struct messagepool *mp, int header_size,void *data, int sz) {
|
||||
static void
|
||||
databuffer_push(struct databuffer *db, struct messagepool *mp, void *data, int sz) {
|
||||
struct message * m;
|
||||
if (mp->freelist) {
|
||||
m = mp->freelist;
|
||||
@@ -120,7 +120,10 @@ databuffer_push(struct databuffer *db, struct messagepool *mp, int header_size,v
|
||||
db->tail->next = m;
|
||||
db->tail = m;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
databuffer_readheader(struct databuffer *db, struct messagepool *mp, int header_size) {
|
||||
if (db->header == 0) {
|
||||
// parser header (2 or 4)
|
||||
if (db->size < header_size) {
|
||||
|
||||
@@ -183,10 +183,15 @@ _forward(struct gate *g, struct connection * c, int size) {
|
||||
|
||||
static void
|
||||
dispatch_message(struct gate *g, struct connection *c, int id, void * data, int sz) {
|
||||
int size = databuffer_push(&c->buffer,&g->mp, g->header_size, data, sz);
|
||||
if (size > 0) {
|
||||
_forward(g, c, size);
|
||||
databuffer_reset(&c->buffer);
|
||||
databuffer_push(&c->buffer,&g->mp, data, sz);
|
||||
for (;;) {
|
||||
int size = databuffer_readheader(&c->buffer, &g->mp, g->header_size);
|
||||
if (size < 0) {
|
||||
return;
|
||||
} else if (size > 0) {
|
||||
_forward(g, c, size);
|
||||
databuffer_reset(&c->buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user