From 8d8cb17e0a09a6617777cf8cf1b2b0b034414d78 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Thu, 8 May 2014 12:06:53 +0800 Subject: [PATCH] launch all the bootstrap services in bootstrap.lua --- service-src/service_harbor.c | 2 ++ service/bootstrap.lua | 18 ++++++++++++++-- skynet-src/skynet_harbor.c | 16 ++++---------- skynet-src/skynet_harbor.h | 2 +- skynet-src/skynet_imp.h | 4 ---- skynet-src/skynet_main.c | 4 ---- skynet-src/skynet_start.c | 41 ++++++++---------------------------- 7 files changed, 32 insertions(+), 55 deletions(-) diff --git a/service-src/service_harbor.c b/service-src/service_harbor.c index ead12d72..b881acb2 100644 --- a/service-src/service_harbor.c +++ b/service-src/service_harbor.c @@ -592,6 +592,8 @@ harbor_init(struct harbor *h, struct skynet_context *ctx, const char * args) { fprintf(stderr, "Harbor: Connect to master failed\n"); exit(1); } + skynet_harbor_start(ctx); + h->local_addr = skynet_strdup(local_addr); _launch_gate(ctx, local_addr); diff --git a/service/bootstrap.lua b/service/bootstrap.lua index a6338f0d..51a57999 100644 --- a/service/bootstrap.lua +++ b/service/bootstrap.lua @@ -1,10 +1,24 @@ local skynet = require "skynet" skynet.start(function() - local launcher = assert(skynet.launch("snlua launcher")) + assert(skynet.launch("logger", skynet.getenv "logger")) + + local standalone = skynet.getenv "standalone" + local master_addr = skynet.getenv "master" + + if standalone then + assert(skynet.launch("master", master_addr)) + end + + local local_addr = skynet.getenv "address" + local harbor_id = skynet.getenv "harbor" + + assert(skynet.launch("harbor",master_addr, local_addr, harbor_id)) + + local launcher = assert(skynet.launch("snlua","launcher")) skynet.name(".launcher", launcher) - if skynet.getenv "standalone" then + if standalone then local datacenter = assert(skynet.newservice "datacenterd") skynet.name("DATACENTER", datacenter) end diff --git a/skynet-src/skynet_harbor.c b/skynet-src/skynet_harbor.c index 023f1f6d..ae47cf45 100644 --- a/skynet-src/skynet_harbor.c +++ b/skynet-src/skynet_harbor.c @@ -34,6 +34,7 @@ skynet_harbor_register(struct remote_name *rname) { int skynet_harbor_message_isremote(uint32_t handle) { + assert(HARBOR != 0); int h = (handle & ~HANDLE_MASK); return h != HARBOR && h !=0; } @@ -43,16 +44,7 @@ skynet_harbor_init(int harbor) { HARBOR = (unsigned int)harbor << HANDLE_REMOTE_SHIFT; } -int -skynet_harbor_start(const char * master, const char *local) { - size_t sz = strlen(master) + strlen(local) + 32; - char args[sz]; - sprintf(args, "%s %s %d",master,local,HARBOR >> HANDLE_REMOTE_SHIFT); - struct skynet_context * inst = skynet_context_new("harbor",args); - if (inst == NULL) { - return 1; - } - REMOTE = inst; - - return 0; +void +skynet_harbor_start(void *ctx) { + REMOTE = ctx; } diff --git a/skynet-src/skynet_harbor.h b/skynet-src/skynet_harbor.h index 6ad6023a..0116a91a 100644 --- a/skynet-src/skynet_harbor.h +++ b/skynet-src/skynet_harbor.h @@ -26,6 +26,6 @@ void skynet_harbor_send(struct remote_message *rmsg, uint32_t source, int sessio void skynet_harbor_register(struct remote_name *rname); int skynet_harbor_message_isremote(uint32_t handle); void skynet_harbor_init(int harbor); -int skynet_harbor_start(const char * master, const char *local); +void skynet_harbor_start(void * ctx); #endif diff --git a/skynet-src/skynet_imp.h b/skynet-src/skynet_imp.h index cdfea566..81fad4c8 100644 --- a/skynet-src/skynet_imp.h +++ b/skynet-src/skynet_imp.h @@ -4,12 +4,8 @@ struct skynet_config { int thread; int harbor; - const char * logger; const char * module_path; - const char * master; - const char * local; const char * bootstrap; - const char * standalone; }; #define THREAD_WORKER 0 diff --git a/skynet-src/skynet_main.c b/skynet-src/skynet_main.c index b4b898d7..3b8cf1b2 100644 --- a/skynet-src/skynet_main.c +++ b/skynet-src/skynet_main.c @@ -115,12 +115,8 @@ main(int argc, char *argv[]) { config.thread = optint("thread",8); config.module_path = optstring("cpath","./cservice/?.so"); - config.logger = optstring("logger",NULL); config.harbor = optint("harbor", 1); - config.master = optstring("master","127.0.0.1:2012"); config.bootstrap = optstring("bootstrap","snlua bootstrap"); - config.local = optstring("address","127.0.0.1:2525"); - config.standalone = optstring("standalone",NULL); lua_close(L); diff --git a/skynet-src/skynet_start.c b/skynet-src/skynet_start.c index 0128d444..d1f80e10 100644 --- a/skynet-src/skynet_start.c +++ b/skynet-src/skynet_start.c @@ -5,7 +5,6 @@ #include "skynet_handle.h" #include "skynet_module.h" #include "skynet_timer.h" -#include "skynet_harbor.h" #include "skynet_monitor.h" #include "skynet_socket.h" @@ -181,18 +180,15 @@ _start(int thread) { free_monitor(m); } -static int -_start_master(const char * master) { - struct skynet_context *ctx = skynet_context_new("master", master); - if (ctx == NULL) - return 1; - return 0; -} - static void -bootstrap(struct skynet_context * ctx, const char * cmdline) { - if (!skynet_command(ctx, "LAUNCH", cmdline)) { - fprintf(stderr, "Bootstrap error : %s\n", cmdline); +bootstrap(const char * cmdline) { + int sz = strlen(cmdline); + char name[sz+1]; + char args[sz+1]; + sscanf(cmdline, "%s %s", name, args); + struct skynet_context *ctx = skynet_context_new(name, args); + if (ctx == NULL) { + skynet_error(NULL, "Bootstrap error : %s\n", cmdline); exit(1); } } @@ -206,26 +202,7 @@ skynet_start(struct skynet_config * config) { skynet_timer_init(); skynet_socket_init(); - struct skynet_context *ctx; - ctx = skynet_context_new("logger", config->logger); - if (ctx == NULL) { - fprintf(stderr,"launch logger error\n"); - exit(1); - } - - if (config->standalone) { - if (_start_master(config->standalone)) { - fprintf(stderr, "Init failed : master\n"); - return; - } - } - // harbor must be init first - if (skynet_harbor_start(config->master , config->local)) { - fprintf(stderr, "Init failed : no master\n"); - return; - } - - bootstrap(ctx, config->bootstrap); + bootstrap(config->bootstrap); _start(config->thread); skynet_socket_free();