Handler.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. Json = Json or require("common.Json")
  2. local Config = require("Config")
  3. local CommonDefine = require("common.CommonDefine")
  4. local Log = require("common.Log")
  5. local CommonDB = require("common.CommonDB")
  6. local LogDefine = require("common.LogDefine")
  7. local Msg = require("core.Msg")
  8. local ObjHuman = require("core.ObjHuman")
  9. local CreateRole = require("role.CreateRole")
  10. local PlatformDefine = require("platform.Define")
  11. local PfLogic = require("platform.PfLogic")
  12. local LuaMongo = _G.lua_mongo
  13. local DB = require("common.DB")
  14. local RoleDBLogic = require("role.RoleDBLogic")
  15. local Util = require("common.Util")
  16. local AuthCheck = require("scene.AuthCheck")
  17. local ApiLogic = require("platform.ApiLogic")
  18. local CDKLoigc = require("present.CDK")
  19. local MailManager = require("mail.MailManager")
  20. local QQBigShot = require("platform.QQBigShot")
  21. local BanLogic = require("scene.BanLogic")
  22. local function HumanLogin_Handle(human, params)
  23. print("[HumanLogin_Handle] 进入了判断")
  24. table.print_lua_table(params)
  25. if params.dwkLevel then
  26. print("[HumanLogin_Handle] 获取到的等级 dwkLevel = "..params.dwkLevel)
  27. QQBigShot.QQBigShot_HumanLoginHandle(human, params.dwkLevel)
  28. end
  29. end
  30. -- 是否禁止登录
  31. local function isBan(uuid, channelId, account, appId)
  32. return BanLogic.CheckBan(uuid, channelId, account, appId)
  33. end
  34. --在线玩家列表不再从 ObjHuman.onlineAccount 获取, 改为从 ObjHuman.onlineNewUniqueTag 获取
  35. function CG_TEST_PROTO(fd,msg)
  36. print("============ CG_TEST_PROTO============", msg.param)
  37. local param = Json.Decode(msg.param)
  38. local uTag
  39. if param.type == "UseCDKV2" or param.type == "UseCDK" or param.type == "UseFixCDK" then
  40. uTag = RoleDBLogic.Generateuuid(param.channel_id, msg.account, msg.serverTag)
  41. end
  42. Util.printTable(param)
  43. if param.type == "UseCDKV2" then
  44. -- local human = ObjHuman.onlineAccount[msg.account]
  45. local human = ObjHuman.onlineNewUniqueTag[uTag]
  46. if not human then
  47. -- 玩家不在线 做一个离线处理
  48. return
  49. end
  50. CDKLoigc.cdkDoV2(human,{
  51. itemList = param.itemList,
  52. })
  53. elseif param.type == "UseCDK" then
  54. -- local human = ObjHuman.onlineAccount[msg.account]
  55. local human = ObjHuman.onlineNewUniqueTag[uTag]
  56. if not human then
  57. -- 玩家不在线 做一个离线处理
  58. return
  59. end
  60. local batch = Json.Decode(param.batchInfo)
  61. CDKLoigc.cdkDo(human,{
  62. itemList = Json.Decode(batch.itenList),
  63. serverList = Json.Decode(batch.serverList),
  64. batch = tonumber(batch.batch),
  65. useCnt = tonumber(batch.cnt),
  66. err = param.err,
  67. })
  68. elseif param.type == "UseFixCDK" then
  69. -- local human = ObjHuman.onlineAccount[msg.account]
  70. local human = ObjHuman.onlineNewUniqueTag[uTag]
  71. if not human then
  72. -- 玩家不在线 做一个离线处理
  73. return
  74. end
  75. CDKLoigc.cdkFixDo(human,param.code) --
  76. elseif param.type == "sendMail" then
  77. local mail = Json.Decode(param.mail)
  78. MailManager.add(MailManager.SYSTEM,mail.uuid,mail.title,mail.content,mail.items,nil,nil,nil,nil,nil,nil,mail.expire)
  79. elseif param.type == "kickAllUser" then
  80. -- for _,h in pairs(ObjHuman.onlineAccount) do
  81. -- ObjHuman.doDisconnect(h, CommonDefine.DISCONNECT_KICK_ALL)
  82. -- sendDisconnect(h.fd,CommonDefine.DISCONNECT_KICK_ALL)
  83. -- end
  84. for _,h in pairs(ObjHuman.onlineNewUniqueTag) do
  85. ObjHuman.doDisconnect(h, CommonDefine.DISCONNECT_KICK_ALL)
  86. sendDisconnect(h.fd,CommonDefine.DISCONNECT_KICK_ALL)
  87. end
  88. elseif param.type == "setBan" then
  89. local banInfo = {
  90. roleBanInfo = param.roleBanInfo,
  91. accountBanInfo = param.accountBanInfo,
  92. appBanInfo = param.appBanInfo
  93. }
  94. BanLogic.Update_Ban_Info(banInfo)
  95. end
  96. end
  97. function CG_AA_DISCONNECT(human)
  98. if type(human) ~= "table" then return end
  99. ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_NORMAL)
  100. end
  101. function setLoginParams(human, msg, params)
  102. human.lang = msg.lang
  103. human.region = (msg.region == "") and "CN" or string.upper(msg.region)
  104. human.ip = (msg.ip ~= "") and msg.ip or _G.global.get_ip_from_fd(human.fd)
  105. -- 有些字段重复赋值,看看以后要不要干掉。。。
  106. human.pf = params.pf
  107. human.isIOS = params.isIOS or 0
  108. human.vopenid = params.openid or ""
  109. human.openkey = params.openkey or ""
  110. human.phpChanelID = params.phpChanelID or ""
  111. human.appid = params.appid
  112. human.gameName = params.gameName or ""
  113. human.version = params.version or nil
  114. human.serverTag = msg.serverTag
  115. human.deviceNo = params.deviceNo or "" --设备号
  116. human.pf_info = human.pf_info or {}
  117. human.pf_info.openid = params.openid or ""
  118. human.pf_info.openkey = params.openkey or ""
  119. human.pf_info.pf = params.pf or ""
  120. human.pf_info.pfkey = params.pfkey or ""
  121. human.pf_info.zoneid = params.zoneid or 0
  122. human.pf_info.serverid = params.serverid or 0
  123. human.pf_info.tcTime = os.time()
  124. human.pf_info.lvYellow = params.lvYellow or 0
  125. human.pf_info.yearYellow = params.yearYellow or 0
  126. human.pf_info.superYellow = params.superYellow or 0
  127. human.pf_info.lvBlue = params.lvBlue or 0
  128. human.pf_info.yearBlue = params.yearBlue or 0
  129. human.pf_info.superBlue = params.superBlue or 0
  130. human.pf_info.validTimeBlue = params.validTimeBlue or 0
  131. human.pf_info.vipSevenk = params.vipSevenk or 0
  132. human.pf_info.validTimeSevenk = params.validTimeSevenk or 0
  133. human.pf_info.phpChanelID = params.phpChanelID or ""
  134. human.pf_info.phoneSystem = params.phoneSystem or "android"
  135. human.pf_info.from_openid = params.from_openid or ""
  136. end
  137. function sendDisconnect(fd, errCode)
  138. local mm = Msg.gc.GC_DISCONNECT
  139. mm.code = errCode
  140. mm.msg = CommonDefine.DISCONNECT_MSG[errCode]
  141. Msg.send(mm, fd)
  142. end
  143. function CG_ASK_LOGIN(fd, msg)
  144. -- 测试支付回调 有时间换个地方
  145. if msg.account == "H1EqhbpA80jt0Jw6Q3T2" then
  146. print("测试支付回调")
  147. local payParams = Json.Decode(msg.params)
  148. print(table.print_lua_table(payParams))
  149. oJsonInput = {
  150. type=1,
  151. id=payParams.id,--商品id
  152. cnt=payParams.cnt, --数量
  153. money=payParams.money, -- 金额
  154. account=payParams.account, --账号
  155. serverTag = msg.serverTag, --区服标识
  156. order=payParams.order,--订单号
  157. region="cn",
  158. channelID = payParams.channel_id
  159. }
  160. local buyRet = ApiLogic.deliver(oJsonInput,{})
  161. Log.write(Log.LOGID_OSS_DELIVER,Json.Encode(buyRet))
  162. -- if ApiLogic.deliver(oJsonInput,{}) then
  163. -- return
  164. -- end
  165. return
  166. end
  167. if _G.is_middle == true then return end
  168. --判断是否是数字类型
  169. if type(fd) ~= "number" then
  170. assert()
  171. end
  172. --如果在线人数大于最大可容纳在线人数时,断开链接
  173. local onlineCnt = ObjHuman.getOnlineCnt()
  174. if onlineCnt >= CommonDefine.MAX_ONLINE_COUNT then
  175. return sendDisconnect(fd, CommonDefine.DISCONNECT_MAX_ONLINE)
  176. end
  177. --目前暂未校验,返回的都是true,后续如果需要校验,再看看是否需要把区服标识传入
  178. local retAuth = AuthCheck.authCheck(msg.account, msg.authkey, msg.timestamp, msg.ip)
  179. if retAuth ~= true then
  180. return sendDisconnect(fd, CommonDefine.DISCONNECT_AUTH_FAIL)
  181. end
  182. local account = msg.account
  183. local serverTag = msg.serverTag
  184. local params = Json.Decode(msg.params)
  185. print("CG_ASK_LOGIN", msg.account, msg.serverTag, params.phpChanelID, type(params.phpChanelID), params.deviceNo, type(params.deviceNo))
  186. --如果是已经登录的,也断开连接
  187. --local human_old = ObjHuman.onlineAccount[account]
  188. local uTag = RoleDBLogic.Generateuuid(params.phpChanelID, account, serverTag)
  189. local human_old = ObjHuman.onlineNewUniqueTag[uTag]
  190. if human_old then
  191. ObjHuman.doDisconnect(human_old, CommonDefine.DISCONNECT_DUPLICATE)
  192. end
  193. --创建新角色
  194. -- local human = ObjHuman.create(fd, account, human_old and human_old.db, nil)
  195. local human = ObjHuman.create(fd, account, human_old and human_old.db, uTag)
  196. setLoginParams(human, msg, params) -- 设置登录参数
  197. -- 禁止登录检测
  198. if isBan(human.db and human.db._id, params.phpChanelID, account, params.deviceNo) then
  199. return
  200. end
  201. if human.db == nil then
  202. -- 新号
  203. -- local ip,time = CommonDB.getBanIp(msg.ip)
  204. -- if (time and time > os.time()) then
  205. -- ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANIP)
  206. -- return
  207. -- else
  208. -- CommonDB.delBanIp(msg.ip)
  209. -- end
  210. Log.write(Log.LOGID_OSS_CREATELOSS,account, "", LogDefine.HUMAN_LOST.ENTRANCE, human.ip, human.pf, human.appid, human.phpChanelID)
  211. CreateRole.createNewRole(human)
  212. -- HumanLogin_Handle(human, params)
  213. else
  214. -- 封号
  215. -- if human.db.banUserTime == -1 or
  216. -- (human.db.banUserTime and human.db.banUserTime > os.time()) then
  217. -- ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANUSER)
  218. -- return
  219. -- end
  220. -- local ip,time = CommonDB.getBanIp(msg.ip)
  221. -- if (time and time > os.time()) then
  222. -- ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANIP)
  223. -- return
  224. -- else
  225. -- CommonDB.delBanIp(msg.ip)
  226. -- end
  227. ObjHuman.onLogin(human, nil)
  228. -- HumanLogin_Handle(human, params)
  229. end
  230. -- -- 单次上报时长设置为登录时间
  231. -- human.db.onlineTimeDayReport = os.time()
  232. end
  233. function CG_HEART_BEAT(human, msg)
  234. local msgRet = Msg.gc.GC_HEART_BEAT
  235. msgRet.timeStamp = os.time()
  236. Msg.send(msgRet, human.fd)
  237. end
  238. -- 记录fps
  239. local FPS_TB = {["guaji"]=1, ["zhandou"]=1, ["zhucheng"]=1, ["buzhen"]=1}
  240. function CG_PHONE_FPS(human, msg)
  241. if FPS_TB[msg.fpsType] == nil then return end
  242. human.db.fpsTb = human.db.fpsTb or {}
  243. human.db.fpsTb[msg.fpsType] = { lv = human.db.lv, startFps = msg.startFps, endFps = msg.endFps}
  244. end
  245. function CG_HEART_BEAT_M(human)
  246. end
  247. function CG_ASK_DISCONNECT(human)
  248. ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_NORMAL)
  249. end
  250. function CG_CLIENT_ERROR(human, msg)
  251. Log.write(Log.LOGID_OSS_CLIENT_ERR, human.db and human.db._id or "", human.db and human.db.account or human.account, human.db and human.db.name or "", msg.err)
  252. end
  253. function CG_CLIENT_LOAD_ERROR(human, msg)
  254. Log.write(Log.LOGID_OSS_CLIENT_LOAD_ERR, human.db and human.db._id or "", human.db and human.db.account or human.account, human.db and human.db.name or "", msg.err)
  255. end
  256. IOS_FLAG_CHARGECLOSE = 0 -- 提示关闭
  257. IOS_FLAG_CHARGEOPENTIP = 1 -- 提示开放
  258. IOS_FLAG_CHARGEOPEN = 2 -- 充值开放
  259. function getIosChargeOpenFlag(human)
  260. if PfLogic.isFkwTishen() == true then
  261. if human.isIOS == 1 then
  262. return IOS_FLAG_CHARGECLOSE
  263. end
  264. end
  265. if PfLogic.isKunTangTishen() == true then
  266. return IOS_FLAG_CHARGECLOSE
  267. end
  268. return IOS_FLAG_CHARGEOPEN
  269. end
  270. function canCharge(human)
  271. if getIosChargeOpenFlag(human) == IOS_FLAG_CHARGECLOSE then
  272. return
  273. end
  274. return true
  275. end