fix a legacy problem. make harbor service more stable

This commit is contained in:
Cloud Wu
2018-02-12 17:47:57 +08:00
committed by 云风
parent 484404295e
commit 0846a6533d
4 changed files with 21 additions and 9 deletions

View File

@@ -690,21 +690,27 @@ mainloop(struct skynet_context * context, void * ud, int type, int session, uint
harbor_command(h, msg,sz,session,source);
return 0;
}
default: {
case PTYPE_SYSTEM : {
// remote message out
const struct remote_message *rmsg = msg;
if (rmsg->destination.handle == 0) {
if (remote_send_name(h, source , rmsg->destination.name, type, session, rmsg->message, rmsg->sz)) {
if (remote_send_name(h, source , rmsg->destination.name, rmsg->type, session, rmsg->message, rmsg->sz)) {
return 0;
}
} else {
if (remote_send_handle(h, source , rmsg->destination.handle, type, session, rmsg->message, rmsg->sz)) {
if (remote_send_handle(h, source , rmsg->destination.handle, rmsg->type, session, rmsg->message, rmsg->sz)) {
return 0;
}
}
skynet_free((void *)rmsg->message);
return 0;
}
default:
skynet_error(context, "recv invalid message from %x, type = %d", source, type);
if (session != 0) {
skynet_send(context,0,source,PTYPE_ERROR, session, NULL, 0);
}
return 0;
}
}

View File

@@ -11,12 +11,15 @@
static struct skynet_context * REMOTE = 0;
static unsigned int HARBOR = ~0;
static inline int
invalid_type(int type) {
return type != PTYPE_SYSTEM && type != PTYPE_HARBOR;
}
void
skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session) {
int type = rmsg->sz >> MESSAGE_TYPE_SHIFT;
rmsg->sz &= MESSAGE_TYPE_MASK;
assert(type != PTYPE_SYSTEM && type != PTYPE_HARBOR && REMOTE);
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, type , session);
assert(invalid_type(rmsg->type) && REMOTE);
skynet_context_send(REMOTE, rmsg, sizeof(*rmsg) , source, PTYPE_SYSTEM , session);
}
int

View File

@@ -16,6 +16,7 @@ struct remote_message {
struct remote_name destination;
const void * message;
size_t sz;
int type;
};
void skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int session);

View File

@@ -718,7 +718,8 @@ skynet_send(struct skynet_context * context, uint32_t source, uint32_t destinati
struct remote_message * rmsg = skynet_malloc(sizeof(*rmsg));
rmsg->destination.handle = destination;
rmsg->message = data;
rmsg->sz = sz;
rmsg->sz = sz & MESSAGE_TYPE_MASK;
rmsg->type = sz >> MESSAGE_TYPE_SHIFT;
skynet_harbor_send(rmsg, source, session);
} else {
struct skynet_message smsg;
@@ -758,7 +759,8 @@ skynet_sendname(struct skynet_context * context, uint32_t source, const char * a
copy_name(rmsg->destination.name, addr);
rmsg->destination.handle = 0;
rmsg->message = data;
rmsg->sz = sz;
rmsg->sz = sz & MESSAGE_TYPE_MASK;
rmsg->type = sz >> MESSAGE_TYPE_SHIFT;
skynet_harbor_send(rmsg, source, session);
return session;