static int _start_master(const char * master) { struct skynet_context *ctx = skynet_context_new("master", master); if (ctx == NULL) return 1; return 0; }
void skynet_start(struct skynet_config * config) { skynet_group_init(); skynet_harbor_init(config->harbor); skynet_handle_init(config->harbor); skynet_mq_init(); skynet_module_init(config->module_path); skynet_timer_init(); skynet_socket_init(); if (config->standalone) { if (_start_master(config->standalone)) { fprintf(stderr, "Init fail : mater"); return; } } // harbor must be init first if (skynet_harbor_start(config->master , config->local)) { fprintf(stderr, "Init fail : no master"); return; } struct skynet_context *ctx; ctx = skynet_context_new("logger", config->logger); if (ctx == NULL) { fprintf(stderr,"launch logger error"); exit(1); } ctx = skynet_context_new("localcast", NULL); if (ctx == NULL) { fprintf(stderr,"launch local cast error"); exit(1); } ctx = skynet_context_new("snlua", "launcher"); if (ctx) { skynet_command(ctx, "REG", ".launcher"); ctx = skynet_context_new("snlua", config->start); } _start(config->thread); skynet_socket_free(); }
static void 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); } }
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; }
static struct skynet_context * _create_group(struct group * g, int handle) { int hash = handle % HASH_SIZE; struct skynet_context * inst = skynet_context_new("multicast",NULL); assert(inst); struct group_node * new_node = malloc(sizeof(struct group_node)); new_node->handle = handle; new_node->ctx = inst; new_node->next = g->node[hash]; g->node[hash] = new_node; return inst; }