launch all the bootstrap services in bootstrap.lua

This commit is contained in:
Cloud Wu
2014-05-08 12:06:53 +08:00
parent 4e00fce360
commit 8d8cb17e0a
7 changed files with 32 additions and 55 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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();