From be0b4ee0dbb6ca6b14f31a63236f31deefcbf789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Tue, 14 Aug 2012 23:16:40 +0800 Subject: [PATCH] bugfix: connection forward --- connection/main.c | 3 +-- service/main.lua | 2 +- service/redis-cli.lua | 11 ++++++++++- skynet-src/skynet_harbor.c | 6 +++++- skynet-src/skynet_server.c | 7 +++++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/connection/main.c b/connection/main.c index aa355ccf..9a377e9d 100644 --- a/connection/main.c +++ b/connection/main.c @@ -114,7 +114,6 @@ _poll(struct connection_server * server) { continue; } if (size == 0) { - printf("disconnect\n"); free(buffer); skynet_send(server->ctx, NULL, c->addr, 0x7fffffff, NULL, 0, DONTCOPY); } else { @@ -140,7 +139,7 @@ _main(struct skynet_context * ctx, void * ud, int session, const char * uid, con int addr_sz = sz - (endptr - (char *)msg); char * addr = malloc(addr_sz); memcpy(addr, endptr+1, addr_sz-1); - addr[addr_sz] = '\0'; + addr[addr_sz-1] = '\0'; _add(ud, fd, addr); } else if (memcmp(msg, "DEL ", 4)==0) { char * endptr; diff --git a/service/main.lua b/service/main.lua index a87e9917..e0193cd9 100644 --- a/service/main.lua +++ b/service/main.lua @@ -16,7 +16,7 @@ skynet.start(function() print("simpledb",db) local connection = skynet.launch("connection","256") print("connection",connection) - local redis = skynet.call(".launcher", "broker .redis snlua redis-cli 127.0.0.1:6379") + local redis = skynet.call(".launcher", "broker .redis snlua redis-cli 127.0.0.1:6379 0") print("redis",redis) skynet.exit() end) diff --git a/service/redis-cli.lua b/service/redis-cli.lua index 3ec019a7..8a729fee 100644 --- a/service/redis-cli.lua +++ b/service/redis-cli.lua @@ -5,7 +5,7 @@ local table = table local tonumber = tonumber local ipairs = ipairs local unpack = unpack -local redis_server = ... +local redis_server, redis_db = ... local function compose_message(msg) local lines = { "*" .. #msg } @@ -19,8 +19,17 @@ local function compose_message(msg) return cmd end +local function select_db(id) + local result , ok = skynet.call(skynet.self(), skynet.unpack, skynet.pack("SELECT", tostring(id))) + assert(result and ok == "OK") + print("select",id) +end + local function init() socket.connect(redis_server) + if redis_db then + select_db(redis_db) + end end local request_queue = { head = 1, tail = 1 } diff --git a/skynet-src/skynet_harbor.c b/skynet-src/skynet_harbor.c index 205e82d9..16e6397f 100644 --- a/skynet-src/skynet_harbor.c +++ b/skynet-src/skynet_harbor.c @@ -394,7 +394,11 @@ remote_query_harbor(int harbor_id) { char tmp2[sz+1]; memcpy(tmp2,zmq_msg_data(&reply),sz); tmp2[sz] = '\0'; - _remote_harbor_update(harbor_id, tmp2); + if (sz == 0) { + skynet_error(NULL,"Request harbor %d failed",harbor_id); + } else { + _remote_harbor_update(harbor_id, tmp2); + } zmq_msg_close(&reply); } diff --git a/skynet-src/skynet_server.c b/skynet-src/skynet_server.c index 391b5a96..ee46e6f0 100644 --- a/skynet-src/skynet_server.c +++ b/skynet-src/skynet_server.c @@ -263,6 +263,13 @@ skynet_command(struct skynet_context * context, const char * cmd , const char * return skynet_handle_namehandle(context->handle, param + 1); } else { assert(context->handle!=0); + int i; + for (i=0;i= '0' && param[i] <= '9')) { + break; + } + } + assert(param[i]); skynet_harbor_register(param, context->handle); return NULL; }