mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 12:43:09 +00:00
use HANDLE_MASK & HANDLE_REMOTE_SHIFT
This commit is contained in:
@@ -358,7 +358,7 @@ _dispatch_queue(struct harbor *h, struct skynet_context * context, struct msg_qu
|
|||||||
struct msg * m = _pop_queue(queue);
|
struct msg * m = _pop_queue(queue);
|
||||||
while (m) {
|
while (m) {
|
||||||
struct remote_message_header * cookie = (struct remote_message_header *)(m->buffer + m->size - sizeof(*cookie));
|
struct remote_message_header * cookie = (struct remote_message_header *)(m->buffer + m->size - sizeof(*cookie));
|
||||||
cookie->destination |= (handle & 0xffffff);
|
cookie->destination |= (handle & HANDLE_MASK);
|
||||||
_header_to_message(cookie, (uint32_t *)cookie);
|
_header_to_message(cookie, (uint32_t *)cookie);
|
||||||
int err = _send_package(fd, m->buffer, m->size);
|
int err = _send_package(fd, m->buffer, m->size);
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -428,7 +428,7 @@ _remote_send_handle(struct harbor *h, struct skynet_context * context, uint32_t
|
|||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
struct remote_message_header cookie;
|
struct remote_message_header cookie;
|
||||||
cookie.source = source;
|
cookie.source = source;
|
||||||
cookie.destination = (destination & 0xffffff) | ((uint32_t)type << 24);
|
cookie.destination = (destination & HANDLE_MASK) | ((uint32_t)type << HANDLE_REMOTE_SHIFT);
|
||||||
cookie.session = (uint32_t)session;
|
cookie.session = (uint32_t)session;
|
||||||
int err = _send_remote(fd, msg,sz,&cookie);
|
int err = _send_remote(fd, msg,sz,&cookie);
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -471,7 +471,7 @@ _remote_send_name(struct harbor *h, struct skynet_context * context, uint32_t so
|
|||||||
}
|
}
|
||||||
struct remote_message_header header;
|
struct remote_message_header header;
|
||||||
header.source = source;
|
header.source = source;
|
||||||
header.destination = type << 24;
|
header.destination = type << HANDLE_REMOTE_SHIFT;
|
||||||
header.session = (uint32_t)session;
|
header.session = (uint32_t)session;
|
||||||
_push_queue(node->queue, msg, sz, &header);
|
_push_queue(node->queue, msg, sz, &header);
|
||||||
// 0 for request
|
// 0 for request
|
||||||
@@ -518,8 +518,8 @@ _mainloop(struct skynet_context * context, void * ud, int type, int session, uin
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
uint32_t destination = header.destination;
|
uint32_t destination = header.destination;
|
||||||
int type = (destination >> 24) | PTYPE_TAG_DONTCOPY;
|
int type = (destination >> HANDLE_REMOTE_SHIFT) | PTYPE_TAG_DONTCOPY;
|
||||||
destination = (destination & 0xffffff) | ((uint32_t)h->id << 24);
|
destination = (destination & HANDLE_MASK) | ((uint32_t)h->id << HANDLE_REMOTE_SHIFT);
|
||||||
skynet_send(context, header.source, destination, type, (int)header.session, (void *)msg, sz-12);
|
skynet_send(context, header.source, destination, type, (int)header.session, (void *)msg, sz-12);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "skynet.h"
|
#include "skynet.h"
|
||||||
|
#include "skynet_handle.h"
|
||||||
#include "skynet_multicast.h"
|
#include "skynet_multicast.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -42,7 +43,7 @@ _maincb(struct skynet_context * context, void * ud, int type, int session, uint3
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
sz |= type << 24;
|
sz |= type << HANDLE_REMOTE_SHIFT;
|
||||||
struct skynet_multicast_message * mc = skynet_multicast_create(msg, sz, source);
|
struct skynet_multicast_message * mc = skynet_multicast_create(msg, sz, source);
|
||||||
skynet_multicast_castgroup(context, g, mc);
|
skynet_multicast_castgroup(context, g, mc);
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ skynet_error(struct skynet_context * context, const char *msg, ...) {
|
|||||||
}
|
}
|
||||||
smsg.session = 0;
|
smsg.session = 0;
|
||||||
smsg.data = strdup(tmp);
|
smsg.data = strdup(tmp);
|
||||||
smsg.sz = len | (PTYPE_TEXT << 24);
|
smsg.sz = len | (PTYPE_TEXT << HANDLE_REMOTE_SHIFT);
|
||||||
skynet_context_push(logger, &smsg);
|
skynet_context_push(logger, &smsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ static int HARBOR = 0;
|
|||||||
|
|
||||||
void
|
void
|
||||||
skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session) {
|
skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session) {
|
||||||
int type = rmsg->sz >> 24;
|
int type = rmsg->sz >> HANDLE_REMOTE_SHIFT;
|
||||||
rmsg->sz &= 0xffffff;
|
rmsg->sz &= HANDLE_MASK;
|
||||||
assert(type != PTYPE_SYSTEM && type != PTYPE_HARBOR);
|
assert(type != PTYPE_SYSTEM && type != PTYPE_HARBOR);
|
||||||
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, type , session);
|
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, type , session);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "skynet.h"
|
#include "skynet.h"
|
||||||
#include "skynet_mq.h"
|
#include "skynet_mq.h"
|
||||||
|
#include "skynet_handle.h"
|
||||||
#include "skynet_multicast.h"
|
#include "skynet_multicast.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -193,7 +194,7 @@ _drop_queue(struct message_queue *q) {
|
|||||||
int s = 0;
|
int s = 0;
|
||||||
while(!skynet_mq_pop(q, &msg)) {
|
while(!skynet_mq_pop(q, &msg)) {
|
||||||
++s;
|
++s;
|
||||||
int type = msg.sz >> 24;
|
int type = msg.sz >> HANDLE_REMOTE_SHIFT;
|
||||||
if (type == PTYPE_MULTICAST) {
|
if (type == PTYPE_MULTICAST) {
|
||||||
assert(msg.sz == 0);
|
assert(msg.sz == 0);
|
||||||
skynet_multicast_dispatch((struct skynet_multicast_message *)msg.data, NULL, NULL);
|
skynet_multicast_dispatch((struct skynet_multicast_message *)msg.data, NULL, NULL);
|
||||||
|
|||||||
@@ -184,8 +184,8 @@ _forwarding(struct skynet_context *ctx, struct skynet_message *msg) {
|
|||||||
static void
|
static void
|
||||||
_mc(void *ud, uint32_t source, const void * msg, size_t sz) {
|
_mc(void *ud, uint32_t source, const void * msg, size_t sz) {
|
||||||
struct skynet_context * ctx = ud;
|
struct skynet_context * ctx = ud;
|
||||||
int type = sz >> 24;
|
int type = sz >> HANDLE_REMOTE_SHIFT;
|
||||||
sz &= 0xffffff;
|
sz &= HANDLE_MASK;
|
||||||
ctx->cb(ctx, ctx->cb_ud, type, 0, source, msg, sz);
|
ctx->cb(ctx, ctx->cb_ud, type, 0, source, msg, sz);
|
||||||
if (ctx->forward) {
|
if (ctx->forward) {
|
||||||
uint32_t des = ctx->forward;
|
uint32_t des = ctx->forward;
|
||||||
@@ -195,7 +195,7 @@ _mc(void *ud, uint32_t source, const void * msg, size_t sz) {
|
|||||||
message.session = 0;
|
message.session = 0;
|
||||||
message.data = malloc(sz);
|
message.data = malloc(sz);
|
||||||
memcpy(message.data, msg, sz);
|
memcpy(message.data, msg, sz);
|
||||||
message.sz = sz | (type << 24);
|
message.sz = sz | (type << HANDLE_REMOTE_SHIFT);
|
||||||
_send_message(des, &message);
|
_send_message(des, &message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -204,8 +204,8 @@ static void
|
|||||||
_dispatch_message(struct skynet_context *ctx, struct skynet_message *msg) {
|
_dispatch_message(struct skynet_context *ctx, struct skynet_message *msg) {
|
||||||
assert(ctx->init);
|
assert(ctx->init);
|
||||||
CHECKCALLING_BEGIN(ctx)
|
CHECKCALLING_BEGIN(ctx)
|
||||||
int type = msg->sz >> 24;
|
int type = msg->sz >> HANDLE_REMOTE_SHIFT;
|
||||||
size_t sz = msg->sz & 0xffffff;
|
size_t sz = msg->sz & HANDLE_MASK;
|
||||||
if (type == PTYPE_MULTICAST) {
|
if (type == PTYPE_MULTICAST) {
|
||||||
skynet_multicast_dispatch((struct skynet_multicast_message *)msg->data, ctx, _mc);
|
skynet_multicast_dispatch((struct skynet_multicast_message *)msg->data, ctx, _mc);
|
||||||
} else {
|
} else {
|
||||||
@@ -478,8 +478,8 @@ _filter_args(struct skynet_context * context, int type, int *session, void ** da
|
|||||||
}
|
}
|
||||||
*data = msg;
|
*data = msg;
|
||||||
|
|
||||||
assert((*sz & 0xffffff) == *sz);
|
assert((*sz & HANDLE_MASK) == *sz);
|
||||||
*sz |= type << 24;
|
*sz |= type << HANDLE_REMOTE_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -567,7 +567,7 @@ skynet_context_send(struct skynet_context * ctx, void * msg, size_t sz, uint32_t
|
|||||||
smsg.source = source;
|
smsg.source = source;
|
||||||
smsg.session = session;
|
smsg.session = session;
|
||||||
smsg.data = msg;
|
smsg.data = msg;
|
||||||
smsg.sz = sz | type << 24;
|
smsg.sz = sz | type << HANDLE_REMOTE_SHIFT;
|
||||||
|
|
||||||
skynet_mq_push(ctx->queue, &smsg);
|
skynet_mq_push(ctx->queue, &smsg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ timer_execute(struct timer *T)
|
|||||||
message.source = 0;
|
message.source = 0;
|
||||||
message.session = event->session;
|
message.session = event->session;
|
||||||
message.data = NULL;
|
message.data = NULL;
|
||||||
message.sz = PTYPE_RESPONSE << 24;
|
message.sz = PTYPE_RESPONSE << HANDLE_REMOTE_SHIFT;
|
||||||
|
|
||||||
skynet_context_push(event->handle, &message);
|
skynet_context_push(event->handle, &message);
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ skynet_timeout(uint32_t handle, int time, int session) {
|
|||||||
message.source = 0;
|
message.source = 0;
|
||||||
message.session = session;
|
message.session = session;
|
||||||
message.data = NULL;
|
message.data = NULL;
|
||||||
message.sz = PTYPE_RESPONSE << 24;
|
message.sz = PTYPE_RESPONSE << HANDLE_REMOTE_SHIFT;
|
||||||
|
|
||||||
if (skynet_context_push(handle, &message)) {
|
if (skynet_context_push(handle, &message)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user