[Lua高级应用] 服务端全栈开发 - 函数装箱拆箱与序列化
提示:阅读以下脚本需要有一定的Lua基础注意:鉴于这一两年来 会有其他友商的人偷用抄袭GA的脚本框架 所以我们从那时起即暂停了脚本分享
不过现在想想还是觉得 因为我们的脚本框架好用 所以别人才会抄袭对吧 所以从近日开始会重新恢复脚本 要抄袭就抄吧 没关系
现在很多资源文件都可以透过下载进行实时更新
服务器也与客户端可以用table方便的进行数据交换 可是有没有办法在服务端写一个函数 让客户端去调用呢
实际上可以透过函数装箱拆箱来解决这个问题
业务需求:
需要把客户端的一个函数放到服务端去书写 然后让客户端去调用 实现服务器全栈开发
首先我们在服务端写一个简单脚本
function add(a1,a2)
return a1 + a2
end
然后我们需要在客户端调用这个add函数 实现加法
以下是实现代码:
--[[
Lua 装箱拆箱示例序列化与反序列化
服务端脚本
http://bbs.ml30.com
http://cgdev.me
]]
function boxing(object)
local chck = {
value = string.dump(object);
asyncClient = function(player,fucname)
local ret_tbl = {
["funcname"] = fucname,
["object"] = value,
}
Protocol.PowerSend(player,"_boxing",ret_tbl);
end
}
return chck;
end
--[[
Lua 装箱拆箱示例序列化与反序列化
客户端脚本
http://bbs.ml30.com
http://cgdev.me
]]
Server = Server or {};
Server["func"] = Server["func"] or {};
function unboxing(object)
if load ~= nil then
return load(object);
end
return loadstring(object);
end
Cli.Send().wait["_boxing"] = function (tbl)
Server.func] = unboxing(tbl["object"])
end
透过以上代码
我们在服务端引用后 并添加一个脚本测试
function add(a1,a2)
return a1+a2;
end
function Event.RegLoginEvent.Ac(player)
boxing(add).asyncClient(player,"add");
end
然后客户端中就可以使用这个函数了
function test(a1,a2)
print(Server.func["add"](a1,a2));
end
以上代码仅在GA引擎中测试通过 其他引擎使用引起的任何问题概不负责
;P:lol:lol:lol感谢大佬分享
希望论坛越办越好,会员越来越多,越来越活跃
页:
[1]