HomeServer/lualib-src/Server-main/Lib/Http/HttpServer.lua
2024-11-20 15:41:37 +08:00

138 lines
4.4 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local skynet = require "skynet"
local oo = require "Class"
local socket = require "skynet.socket"
local httpd = require "http.httpd"
local sockethelper = require "http.sockethelper"
local urllib = require "http.url"
local table = table
local string = string
local json =require "json"
local cmd = require "GameCmd"
local crypt = require "skynet.crypt"
local log = require "Log"
local errorInfo = require "ErrorInfo"
local serverId = tonumber(skynet.getenv "serverId")
local HttpServer = oo.class()
HttpServer.desKey = "af4eQcgF"
function HttpServer:Init()
end
--URL是否带参数
function HttpServer:IsUrlParam( url )
if string.find(url,"?") then
return true
else
return false
end
end
function HttpServer:Translate(recv)
local t = {}
local s1 =""
local s2 =""
local startPos = 0
local endPos = 0
local endRepeat = false
repeat
endPos = string.find(recv,"=",startPos + 1)
if nil == endPos then
return nil
end
local t1 = string.sub(recv,startPos+1,endPos-1)
startPos = endPos
endPos = string.find(recv,"&",startPos+1)
if nil == endPos then
endPos = #recv + 1
endRepeat = true
end
local t2 = string.sub(recv,startPos+1 ,endPos-1)
startPos = endPos
t [t1] = tonumber(t2) or t2
until endRepeat
return t
end
function HttpServer:desencode(key, text, padding)
local c = crypt.desencode(key, text, crypt.padding[padding or "iso7816_4"])
return crypt.base64encode(c)
end
function HttpServer:desdecode(key, text, padding)
text = crypt.base64decode(text)
return crypt.desdecode(key, text, crypt.padding[padding or "iso7816_4"])
end
function HttpServer:Recv(url , c2sData , addr , header )
url = string.gsub(url ,"/","")
c2sData = c2sData or {}
local s2cData = {}
if header["x-real-ip"] then
--log.info("接收来自Ngix转发的玩家真实IP地址",header["x-real-ip"])
addr = header["x-real-ip"]
end
--检查IP是否进入了黑名单
local isBlack = skynet.server.defense:IsIPBlackList( addr )
if isBlack then
s2cData.code = errorInfo.ErrorCode.BlackList
return json:encode(s2cData)
end
--检查URL是否带参数是就进行处理
if self:IsUrlParam(url) then
url,c2sData = skynet.server.common:ParseUrlParam(url) --如果URL带参数就用URL带的参数
end
if not cmd[ url ] then
--不存在该接口
skynet.server.defense:CheckAttack( skynet.server.defense.TriggerType_ErrorRequest , addr )
s2cData.code = errorInfo.ErrorCode.NoExistInterface
return json:encode(s2cData)
end
local t1 = skynet.GetTime()
local t2 = os.clock()
--根据消息类型进行分发
if cmd[url] == cmd.Center then
s2cData = skynet.server.centerServer:HttpRecv( c2sData , url , addr )
elseif cmd[url] == cmd.Route then
s2cData = skynet.server.routeServer:HttpRecv( c2sData , url , addr )
elseif cmd[url] == cmd.Multi then
s2cData = skynet.server.multiServer:HttpRecv( c2sData , url , addr )
elseif cmd[url] == cmd.Pay then
s2cData = skynet.server.payServer:HttpRecv( c2sData , url , addr )
end
if cmd[url] == cmd.Pay then --充值服返回单独处理
if s2cData and s2cData.state.code then
if 0 == s2cData.state.code then
s2cData.state.msg = "成功接收通知"
elseif 1 == s2cData.state.code then
s2cData.state.msg = "发货成功"
elseif 2 == s2cData.state.code then
s2cData.state.msg = "发货失败"
end
log.info(string.format("消息返回 类型 %d 时间 %d %f 返回值 %s",cmd[url] , skynet.GetTime() - t1 , os.clock() - t2 ,skynet.server.common:TableToString(s2cData)))
return json:encode(s2cData)
end
else
--通用返回处理
if s2cData and s2cData.code then
s2cData.msg = errorInfo.ErrorMsg[s2cData.code] or "暂无消息提示"
log.info(string.format("消息返回 类型 %d 时间 %d %f 返回值 %s",cmd[url] , skynet.GetTime() - t1 , os.clock() - t2 ,skynet.server.common:TableToString(s2cData)))
if "metrics" == url then
return s2cData.data
else
return json:encode(s2cData)
end
end
end
end
skynet.server.httpServer = HttpServer
return HttpServer