--Lua 实现类C++函数指针 动态 --By 602809934@qq.com local Opcode = {} local CMSG_A = 0x001 local CMSG_B = 0x002 local CMSG_C = 0x003 local CMSG_D = 0x004 local CMSG_E = 0x005 local CMSG_F = 0x006 Opcode.Opcodes = { { name = "CMSG_TESTFUNCTION_A", func_name = "HandleFunctionA"},--0x001 { name = "CMSG_TESTFUNCTION_B", func_name = "HandleFunctionB"},--0x002 { name = "CMSG_TESTFUNCTION_C", func_name = "HandleFunctionC"},--0x003 { name = "CMSG_TESTFUNCTION_D", func_name = "HandleFunctionD"},--0x004 { name = "CMSG_TESTFUNCTION_E", func_name = "HandleFunctionE"},--0x005 { name = "CMSG_TESTFUNCTION_F", func_name = "HandleFunctionF"},--0x006 } Opcode.MaxSize = #Opcode.Opcodes local WorldSession = {} WorldSession.Id = -1 function WorldSession:PrintDetal(message) print(self.Id.." Message = "..message) print("--End--\n\n") end function WorldSession:HandleFunctionA(message) print("This is A") self:PrintDetal(message) end function WorldSession:HandleFunctionB(message) print("This is B") self:PrintDetal(message) end function WorldSession:HandleFunctionC(message) print("This is C") self:PrintDetal(message) end function WorldSession:HandleFunctionD(message) print("This is D") self:PrintDetal(message) end function WorldSession:HandleFunctionE(message) print("This is E") self:PrintDetal(message) end function WorldSession:HandleFunctionF(message) print("This is F") self:PrintDetal(message) end function WorldSession:Create() local Return = {}; for k,v in pairs(self ~= nil and self or WorldSession) do Return[k] = v; end return Return; end function WorldSession:SetID(pId) self.Id = pId return self end function WorldSession:PExcuteOpcode(OpCodeIdx,Message) if OpCodeIdx ~= nil and OpCodeIdx <= Opcode.MaxSize then self[Opcode.Opcodes[OpCodeIdx].func_name](self,Message); end return self end local TempTestingA = WorldSession:Create():SetID(1) local TempTestingB = WorldSession:Create():SetID(2) for i = 1, 6 do TempTestingA:PExcuteOpcode(i,"A") TempTestingA:PExcuteOpcode(i,"B") end
Lua 实现类C++函数指针 数据包分发(动态分发)
最新推荐文章于 2023-02-24 16:07:31 发布