diff --git a/examples/login/client.lua b/examples/login/client.lua index 7a72a036..537f614b 100644 --- a/examples/login/client.lua +++ b/examples/login/client.lua @@ -71,10 +71,13 @@ local etoken = crypt.desencode(secret, encode_token(token)) local b = crypt.base64encode(etoken) socket.writeline(fd, crypt.base64encode(etoken)) -print(readline()) - +local result = readline() +local code = tonumber(string.sub(result, 1, 3)) +assert(code == 200) socket.close(fd) +local subid = crypt.base64decode(string.sub(result, 5)) + ----- connect to game server local input = {} @@ -105,7 +108,7 @@ end local index = 0 local request = 0 -local handshake = string.format("%s@%s:%d:%d", crypt.base64encode(token.user), crypt.base64encode(token.server) , index, request) +local handshake = string.format("%s#%s@%s:%d:%d", crypt.base64encode(token.user), crypt.base64encode(subid),crypt.base64encode(token.server) , index, request) local hmac = crypt.hmac64(crypt.hashkey(handshake), secret) socket.send(fd, handshake .. ":" .. crypt.base64encode(hmac)) diff --git a/examples/login/logind.lua b/examples/login/logind.lua index b28c6721..df7f5fd8 100644 --- a/examples/login/logind.lua +++ b/examples/login/logind.lua @@ -15,11 +15,11 @@ local server_mt = {} server_mt.__index = server_mt function server_mt:kick(uid) - skynet.call(self.address, "lua", "kick", self.name, uid) + return skynet.call(self.address, "lua", "kick", self.name, uid) end function server_mt:login(uid, secret) - skynet.call(self.address, "lua", "login", self.name, uid, secret) + return skynet.call(self.address, "lua", "login", self.name, uid, secret) end function server.auth_handler(token) @@ -40,8 +40,9 @@ function server.login_handler(server, uid, secret) end assert(user_online[uid] == nil, "kick failed") local gameserver = assert(server_list[server], "Unknown server") - gameserver:login(uid, secret) + local subid = gameserver:login(uid, secret) user_online[uid] = gameserver + return tostring(subid) end local CMD = {} diff --git a/examples/login/msggate.lua b/examples/login/msggate.lua index fb74ffc2..a7315f4f 100644 --- a/examples/login/msggate.lua +++ b/examples/login/msggate.lua @@ -32,7 +32,7 @@ function handler.connect(fd, addr) end local function auth(fd, msg, sz) --- base64(base64(uid)@base64(server):index:request:base64(hmac) +-- base64(base64(uid)@base64(server)#base64(subid):index:request:base64(hmac) local message = netpack.tostring(msg, sz) local username, index, request , hmac = string.match(message, "([^:]*):([^:]*):([^:]*):([^:]*)") local content = users[username] @@ -147,7 +147,8 @@ end local CMD = {} function CMD.login(source, server, uid, secret) - local username = crypt.base64encode(uid) .. '@' .. crypt.base64encode(server) + local subid = "1" + local username = crypt.base64encode(uid) .. '#'..crypt.base64encode(subid)..'@' .. crypt.base64encode(server) users[username] = { server = server, uid = uid, @@ -157,6 +158,7 @@ function CMD.login(source, server, uid, secret) reserved = 0, response = {}, } + return subid end function CMD.logout(source)