mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 03:53:09 +00:00
bugfix
This commit is contained in:
@@ -14,7 +14,6 @@ package.cpath = "luaclib/?.so"
|
||||
]]
|
||||
|
||||
local socket = require "clientsocket"
|
||||
local cjson = require "cjson"
|
||||
local crypt = require "crypt"
|
||||
|
||||
local last
|
||||
@@ -61,7 +60,14 @@ local token = {
|
||||
pass = "password",
|
||||
}
|
||||
|
||||
local etoken = crypt.desencode(secret, cjson.encode(token))
|
||||
local function encode_token(token)
|
||||
return string.format("%s@%s:%s",
|
||||
crypt.base64encode(token.user),
|
||||
crypt.base64encode(token.server),
|
||||
crypt.base64encode(token.pass))
|
||||
end
|
||||
|
||||
local etoken = crypt.desencode(secret, encode_token(token))
|
||||
local b = crypt.base64encode(etoken)
|
||||
socket.writeline(fd, crypt.base64encode(etoken))
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
local login = require "gamefw.loginserver"
|
||||
local json = require "cjson"
|
||||
local crypt = require "crypt"
|
||||
local skynet = require "skynet"
|
||||
|
||||
@@ -12,32 +11,51 @@ local server = {
|
||||
local server_list = {}
|
||||
local user_online = {}
|
||||
|
||||
local server_mt = {}
|
||||
server_mt.__index = server_mt
|
||||
|
||||
function server_mt:kick(uid)
|
||||
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)
|
||||
end
|
||||
|
||||
function server.auth_handler(token)
|
||||
token = json.decode(token)
|
||||
assert(token.user)
|
||||
assert(token.pass == "password")
|
||||
return token.server, token.user
|
||||
-- the token is base64(user)@base64(server):base64(password)
|
||||
local user, server, password = token:match("([^@]+)@([^:]+):(.+)")
|
||||
user = crypt.base64decode(user)
|
||||
server = crypt.base64decode(server)
|
||||
password = crypt.base64decode(password)
|
||||
assert(password == "password")
|
||||
return server, user
|
||||
end
|
||||
|
||||
function server.login_handler(server, uid, secret)
|
||||
print(string.format("%s@%s is login, secret is %s", uid, server, crypt.hexencode(secret)))
|
||||
local u = user_online[uid]
|
||||
if u then
|
||||
local gameserver = server_list[u.server]
|
||||
skynet.call(gameserver, "lua", "kick", server, uid)
|
||||
u:kick(uid)
|
||||
end
|
||||
local gameserver = assert(server_list[server])
|
||||
skynet.call(gameserver, "lua", "login", server, uid, secret)
|
||||
assert(user_online[uid] == nil, "kick failed")
|
||||
local gameserver = assert(server_list[server], "Unknown server")
|
||||
gameserver:login(uid, secret)
|
||||
user_online[uid] = gameserver
|
||||
end
|
||||
|
||||
local CMD = {}
|
||||
|
||||
function CMD.register_gate(source, name)
|
||||
server_list[name] = source
|
||||
function CMD.register_gate(server, address)
|
||||
server_list[server] = setmetatable( { name = server, address = address }, server_mt )
|
||||
end
|
||||
|
||||
function CMD.logout(source, uid, server)
|
||||
print(string.format("%s@%s is logout", uid, server))
|
||||
function CMD.logout(uid)
|
||||
local u = user_online[uid]
|
||||
if u then
|
||||
print(string.format("%s@%s is logout", uid, u.name))
|
||||
user_online[uid] = nil
|
||||
end
|
||||
end
|
||||
|
||||
function server.command_handler(command, source, ...)
|
||||
|
||||
@@ -140,7 +140,7 @@ handler.error = handler.close
|
||||
function handler.open(source, conf)
|
||||
login_master = assert(conf.loginserver)
|
||||
local servername = assert(conf.servername)
|
||||
skynet.call(login_master, "lua", "register_gate", servername)
|
||||
skynet.call(login_master, "lua", "register_gate", servername, skynet.self())
|
||||
end
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ end
|
||||
function CMD.logout(source)
|
||||
local c = agent[source]
|
||||
if c then
|
||||
skynet.call(login_master, "lua", "logout", c.server, c.uid)
|
||||
skynet.call(login_master, "lua", "logout", c.uid)
|
||||
if c.fd then
|
||||
gateserver.closeclient(c.fd)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user