mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 12:20:41 +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
|
static void
|
||||||
databuffer_push(struct databuffer *db, struct messagepool *mp, int header_size,void *data, int sz) {
|
databuffer_push(struct databuffer *db, struct messagepool *mp, void *data, int sz) {
|
||||||
struct message * m;
|
struct message * m;
|
||||||
if (mp->freelist) {
|
if (mp->freelist) {
|
||||||
m = 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->next = m;
|
||||||
db->tail = m;
|
db->tail = m;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
databuffer_readheader(struct databuffer *db, struct messagepool *mp, int header_size) {
|
||||||
if (db->header == 0) {
|
if (db->header == 0) {
|
||||||
// parser header (2 or 4)
|
// parser header (2 or 4)
|
||||||
if (db->size < header_size) {
|
if (db->size < header_size) {
|
||||||
|
|||||||
@@ -183,10 +183,15 @@ _forward(struct gate *g, struct connection * c, int size) {
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
dispatch_message(struct gate *g, struct connection *c, int id, void * data, int sz) {
|
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);
|
databuffer_push(&c->buffer,&g->mp, data, sz);
|
||||||
if (size > 0) {
|
for (;;) {
|
||||||
_forward(g, c, size);
|
int size = databuffer_readheader(&c->buffer, &g->mp, g->header_size);
|
||||||
databuffer_reset(&c->buffer);
|
if (size < 0) {
|
||||||
|
return;
|
||||||
|
} else if (size > 0) {
|
||||||
|
_forward(g, c, size);
|
||||||
|
databuffer_reset(&c->buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user