MiddleHeartBeat.lua 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. local Lang = require("common.Lang")
  2. local Util = require("common.Util")
  3. local CommonDB = require("common.CommonDB")
  4. local InnerMsg = require("core.InnerMsg")
  5. local MiddleManager = require("middle.MiddleManager")
  6. local MiddleLogic = require("middle.MiddleLogic")
  7. local MiddleConnect = require("middle.MiddleConnect")
  8. LAST_HEARTBEAT_TIME = LAST_HEARTBEAT_TIME or nil -- 上次收到心跳包的時間
  9. LAST_SEND_HB_TS = LAST_SEND_HB_TS or nil -- 上次發送心跳包的時間
  10. --定时发心跳30秒1次
  11. function heartbeat()
  12. if _G.is_middle == true then return end
  13. if MiddleConnect.IS_MIDDLE_CONNECT ~= true then return end
  14. local now = os.time()
  15. if LAST_SEND_HB_TS == nil or now - LAST_SEND_HB_TS >= 30 then
  16. LAST_SEND_HB_TS = now
  17. -- logic连middle 所以logic向middle发心跳
  18. local msg = InnerMsg.lw.LW_HEARTBEAT
  19. msg.svrIndexData = msg.svrIndexData or {}
  20. Util.cleanTable(msg.svrIndexData)
  21. local mergeSvrIndexTb = CommonDB.getMergeSvrIndex()
  22. if mergeSvrIndexTb and mergeSvrIndexTb[1] then
  23. for i = 1, #mergeSvrIndexTb do
  24. msg.svrIndexData[i] = mergeSvrIndexTb[i]
  25. end
  26. end
  27. InnerMsg.sendMsg(0, msg)
  28. end
  29. end
  30. function LW_HEARTBEAT(fd, msg)
  31. --print("LW_HEARTBEAT", msg.svrIndexData)
  32. MiddleManager.onHeartbeat(fd, msg.svrIndexData)
  33. msg = InnerMsg.wl.WL_HEARTBEAT
  34. InnerMsg.sendMsg(fd, msg)
  35. end
  36. function WL_HEARTBEAT(fd, msg)
  37. LAST_HEARTBEAT_TIME = os.time()
  38. end
  39. -- 设置开服时间
  40. function LW_OS(fd, msg)
  41. local value = msg.value
  42. if value == nil then
  43. local openSvrTime = CommonDB.getServerOpenTime()
  44. if openSvrTime == 0 then
  45. MiddleLogic.sendWLBroadcast(fd, msg.uuid, Lang.DRILL_NOT_SET_OPEN_TIME)
  46. else
  47. local tb = os.date("%Y%m%d", openSvrTime)
  48. MiddleLogic.sendWLBroadcast(fd, msg.uuid, Lang.DRILL_CUR_TIME..tb)
  49. end
  50. else
  51. local now = os.time()
  52. local temp = Util.getDayStartTime(now)
  53. temp = temp - (value - 1) * 24 * 3600
  54. CommonDB.setServerOpenTime(temp)
  55. local tb = os.date("%Y%m%d", temp)
  56. MiddleLogic.sendWLBroadcast(fd, msg.uuid, Lang.DRILL_CUR_TIME..tb)
  57. end
  58. end