| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- if jit then
- jit.off()
- jit.flush()
- print("jit close")
- end
-
- real_os_time = real_os_time or os.time
- local Timer
- function os.time(tb)
- if tb then
- return real_os_time(tb)
- end
- Timer = Timer or require("core.Timer")
- local t = Timer.now
- return 0 < t and (t - t % 1000) / 1000 or real_os_time()
- end
-
- real_os_date = real_os_date or os.date
- local tb = {}
- for i = 1, 64 do
- tb[i] = {}
- end
-
- local tblen = 0
- function os.date(fmt, t)
- t = t or os.time()
- if fmt == "*t" then
- tblen = tblen + 1
- if #tb < tblen then
- tblen = 1
- end
- local d = tb[tblen]
- d.year, d.month, d.day, d.hour, d.min, d.sec, d.wday,d.yday = global.date(t)
- return d
- else
- return real_os_date(fmt, t)
- end
- end
- adj = adj or {}
- envs = envs or {}
- file_last_modify_time = file_last_modify_time or {}
- loaded = loaded or {}
- str2filename = str2filename or {}
- local sta = {}
- tb_loadfile = tb_loadfile or {}
- local function hot_dfs(a)
- if loaded[a] then
- print("hot=====", a)
- loaded[a] = nil
- for b in pairs(adj[a]) do
- hot_dfs(b)
- end
- end
- end
- local function hot()
- for k, v in pairs(str2filename) do
- local a = global.get_file_last_modify_time(v)
- if a ~= file_last_modify_time[k] then
- file_last_modify_time[k] = a
- tb_loadfile[k] = nil
- hot_dfs(k)
- end
- end
- end
-
- collectgarbage("step", 100000)
- hot()
- collectgarbage("step", 100000)
- local path = {
- "script/",
- "script/module/",
- }
- local require_cnt = 0
- _G.old_require = _G.old_require or require
- threadID = threadID or nil
- function _G.get_tid()
- if not threadID then
- threadID = _G.get_thread_id(_G.logic_id)
- end
- return threadID
- end
-
- ConfigLoadFile = ConfigLoadFile or nil
- function require(str, not_need_exist)
-
- if not ConfigLoadFile then
- ConfigLoadFile = {}
- ConfigLoadFile = require("Config")
- print("load excel project:", ConfigLoadFile.PROJECT_NAME)
- end
- require_cnt = require_cnt + 1
- adj[str] = adj[str] or {}
- if sta[#sta] then
- adj[str][sta[#sta]] = true
- end
- sta[#sta + 1] = str
- if not loaded[str] then
- loaded[str] = true
- envs[str] = envs[str] or {
- _G = _G,
- assert = assert,
- error = error,
- getfenv = getfenv,
- ipairs = ipairs,
- load = load,
- next = next,
- pairs = pairs,
- pcall = pcall,
- print = print,
- require = require,
- setmetatable = setmetatable,
- tonumber = tonumber,
- tostring = tostring,
- type = type,
- debug = debug,
- io = io,
- math = math,
- string = string,
- table = table,
- os = os,
- }
- envs[str]._ENV = envs[str]
- if not str2filename[str] then
- local filename = string.gsub(str, "%.", "/") .. ".lua"
- local _, excelPos = string.find(filename, "excel/", 1, true)
- if excelPos then
- local prename = string.sub(filename, 1, excelPos)
- local lastname = string.sub(filename, excelPos+1, #filename)
- filename = prename .. ConfigLoadFile.PROJECT_NAME .. "/" .. lastname
- end
- local ac
- for _, v in ipairs(path) do
- local pre_filename = v .. filename
- local a = global.get_file_last_modify_time(pre_filename)
- if a ~= 0 then
- str2filename[str] = pre_filename
- file_last_modify_time[str] = a
- ac = true
- break
- end
- end
- if not ac then
- if not_need_exist then
- return
- else
- assert(nil, str .. " not exist")
- end
- end
- end
- local fun = tb_loadfile[str]
- if not fun then
- local err
- fun, err = loadfile(str2filename[str], nil, envs[str])
- if not fun then
- assert(nil, err)
- end
- end
- local require_cnt_old = require_cnt
- fun()
- if require_cnt_old < require_cnt then
- tb_loadfile[str] = fun
- end
- end
- sta[#sta] = nil
- return envs[str]
- end
- modtb = modtb or nil
- local function cmd2str(cmd)
- if modtb then
- return
- end
- local f = io.popen(cmd)
- local str = f:read("*a")
- assert(io.close(f))
- return str
- end
-
- local function get_modules(str)
- if modtb then
- return modtb
- end
- modtb = {}
- local i = 1
- while true do
- local j = string.find(str, "\n", i)
- if not j then
- break
- end
- modtb[#modtb + 1] = string.sub(str, i, j - 1)
- i = j + 1
- end
- table.sort(modtb)
- return modtb
- end
-
- local cmd = os.getenv("OS") == "Windows_NT" and "dir/b script\\module" or "ls script/module"
- local m = get_modules(cmd2str(cmd))
- local Msg = require("core.Msg")
- local InnerMsg = require("core.InnerMsg")
- local Config = require("Config")
- if Config.IS_MIDDLE == true then
- _G['is_middle'] = true
- end
- function init_proto_id()
- if has_init_proto_id then
- return
- end
- local protoIDS = require("common.ProtoID")
- has_init_proto_id = true
- Msg.proto_id = {}
-
- for k,v in pairs(protoIDS) do
- if type(k) == "number" then
- Msg.proto_id[v] = k
- end
- end
- protoIDS = require("common.InnerProtoID")
- InnerMsg.proto_id = {}
- for k,v in pairs(protoIDS) do
- if type(k) == "number" then
- InnerMsg.proto_id[v] = k
- end
- end
- end
- init_proto_id()
- require("core.PKLimit")
- local function requireModule(module_name)
- local proto = require(module_name .. ".Proto", true)
- if not proto then
- return
- end
- local handler = require(module_name .. ".Handler", true)
- for k, v in pairs(proto) do
- local sub = string.sub(k, 1, 2)
- if sub == "CG" or sub == "GC" then
- if sub == "CG" and not handler[k] then
- assert(nil, k .. " not exist in HandlerL.lua")
- end
- local pid = Msg.proto_id[k]
- Msg.register(k, pid, v, handler and handler[k])
- elseif sub == "WL" or sub == "LW" then
- assert(nil, k.." can't define here")
- end
- end
- end
- for _, v in pairs(m) do
- requireModule(v)
- end
-
- local function initInnerProto()
- local proto = require("common.InnerProto")
- if not proto then
- return
- end
- local handler = require("common.InnerHandler", true)
- for k, v in pairs(proto) do
- local sub = string.sub(k, 1, 2)
- local pid = InnerMsg.proto_id[k]
- if sub == "LW" or sub == "WL" then
- if sub == "LW" and not handler[k] then
- assert(nil, k .. " not exist in handler.lua")
- end
- InnerMsg.register(k, pid, v, handler and handler[k])
- elseif sub == "CG" or sub == "GC" then
- assert(nil, k.." can't define here")
- end
- end
- end
- initInnerProto()
-
- local Log = require("common.Log")
- local Timer = require("core.Timer")
- local Monitor = require("core.Monitor")
- local AdminLogic = require("AdminLogic")
- local ObjHuman = require("core.ObjHuman")
- local Obj = require("core.Obj")
- local msg_ex = _G.msg_ex
- function handlerMsg(fd, protoId)
- local container = Msg.cg[protoId]
- if msg_ex.read(protoId, container) then
- print("err handlerMsg msg_ex.read", protoId, Msg.proto_name[protoId])
- local mm = Msg.gc.GC_DISCONNECT
- mm.code = 0
- mm.msg = "proto err"
- Msg.send(mm, fd)
- return
- end
- local id = ObjHuman.fds[fd]
- if id then
- local human = Obj.objs[id]
- if not human then
- assert()
- end
- if protoId == Msg.proto_id.CG_ASK_LOGIN then
- assert()
- end
- Monitor.handlePacket(human, container, protoId)
- else
- if protoId ~= Msg.proto_id.CG_AA_DISCONNECT and
- protoId ~= Msg.proto_id.CG_ASK_LOGIN and
- protoId ~= Msg.proto_id.CG_MIDDLE_LOGIN and
- protoId ~= Msg.proto_id.CG_TEST_PROTO then
- --如果登录了两个相同的帐号,第二个帐号把第一个帐号踢掉后,第一个帐号在收到断开的消息之前,可能继续发包,就会跑到这里来
- return
- end
- Monitor.handlePacket(fd, container, protoId)
- end
- end
-
- Timer.now = global.get_msec() --当前时间
- function handlerTime(msec)
- Timer.handlerTime(msec)
- end
- function handlerAdmin(fd, input)
- return AdminLogic.handleAdminRequest(fd, input)
- end
- function handlerInner(fd) -- 处理跨服和普通服之间的消息
- local ret, proto_id = _G.msg_inner_parse.readint()
- assert(ret)
- local container = nil
- if Config.IS_MIDDLE then -- logic传来
- container = InnerMsg.lw[proto_id]
- else -- world传来
- container = InnerMsg.wl[proto_id]
- end
- InnerMsg.readMsg(proto_id, container)
- Monitor.handleInnerPacket(fd, container, proto_id)
- end
- -- 启动之后需要做的事情,没有直接写在某个模块的init里面的原因是因为这些init需要启动初始化完完整数据之后才能进行
- local function initAfterStart()
- if has_init then return end
- has_init = true
- math.randomseed(os.time())
- require("core.RoleDel").roleDel()
- require("common.Check").check()
- require("common.CommonDB").init()
- require("role.RoleDBLogic").roleDBInit()
- require("drill.DrillDB").initAfterStart()
- require("jjc.JjcDB").initAfterStart()
- require("billboard.BillboardDB").initAfterStart()
- require("middle.MiddleActGroup").initAfterStart()
- require("theStars.TheStarsDBLogic").init()
- require("copy.CopyManage").init()
- require("combat.CombatObj").initAfterStart()
- require("bag.DropSpecial").initAfterStart()
- require("warReport.WarReportLogic").initAfterStart()
- require("battle.BattleLogic").initAfterStart()
- require("jjcGodWar.JjcGodWarDB").initAfterStart()
- require("union.UnionWarDBLogic").init()
- require("middle.MiddleConnect").initAfterStart()
- require("role.RoleStrongLogic").initAfterStart()
- require("huanjingTower.HuanjingTowerLogic").initSeverTower()
- require("yjTreasure.YjTreasureDB").changeOldToNewDB()
- require("yjTreasure.YjTreasureDB").initAfterStart()
- require("union.UnionWarDBLogic").init()
- require("zhanbu.ZhanbuLogic").initAfterStart()
- require("absAct.HeroGrowUp").initAfterStart()
- require("present.OpenServerRankDB").initAfterStart()
- require("absAct.AbsActBillboardMiddleLogic").initAfterStart()
- require("mozhu.MoZhuDB").initAfterStart()
- require("common.CommonRankDB").initAfterStart()
- math.randomseed(os.time())
- end
- local function initAfterHot()
- require("platform.ProjectLogic").initAfterHot()
- require("hero.HeroDefine").initAfterHot()
- require("common.CommonDB").init()
- require("roleSystem.RoleSystemLogic").initAfterHot()
- require("drawCard.DrawCardLogic").initAfterHot()
- require("absAct.AbsActLogic").initAfterHot()
- require("yunying.YunYingLogic").init()
- require("fuwen.FuwenGrid").initAfterHot()
- require("skin.SkinLogic").initAfterHot()
- require("jjc.JjcActLogic").init()
- require("combat.CombatLogic").init()
- require("combat.Skill").initAfterHot()
- require("present.WelfareGiftLogic").initAfterHot()
- require("combat.JibanLogic").initAfterHot()
- require("guide.GuideLogic").initAfterHot()
- require("chengjiu.ChengjiuLogic").initAfterHot()
- require("huanjingTower.HuanjingTowerLogic").initSeverTower()
- require("core.RoleDel").initAfterHot()
- require("platform.FanliLogic").initAfterHot()
- require("moshou.MoshouLogic").initAfterHot()
- require("chengjiu.ChengjiuLogic").initAfterHotTemp()
- require("present.OpenAct").initAfterHot()
- require("absAct.PremiumGiftLogic").initAfterHot()
- require("absAct.HeroGrowUp").initAfterHot()
- require("absAct.WishGiftLogic").initAfterHot()
- require("present.CDK").initAfterHot()
- require("topup.BuyLogic").initAfterHot()
- Log.write(Log.LOGID_TEST, "hot success")
- end
- initAfterStart()
- initAfterHot()
- collectgarbage("collect")
- print("logic:"..collectgarbage("count"))--, jit.status())
|