GA好望角|魔力宝贝私服|魔力私服|魔力私服|GA反外挂

 找回密码
 立即注册
凤凰(QQ:715837)
售前咨询
GA白皮书(客户端)
GA白皮书(服务端)
cgdev.me开发者论坛
放映地(炫斗魔力公益PK服)
新服发布站
欢迎来到GA好望角~
价格公示表
回首页
关于妖城与某些恶意人士对我们恶意抹黑的回应
查看: 4021|回复: 2

[Lua高级应用] 服务端全栈开发 - 函数装箱拆箱与序列化

[复制链接]

135

主题

142

帖子

142

积分

管理员

Rank: 9Rank: 9Rank: 9

金钱
2297
号角币
474
发表于 2020-9-24 21:45:52 | 显示全部楼层 |阅读模式
提示:阅读以下脚本需要有一定的Lua基础
注意:鉴于这一两年来 会有其他友商的人偷用抄袭GA的脚本框架 所以我们从那时起即暂停了脚本分享
不过现在想想还是觉得 因为我们的脚本框架好用 所以别人才会抄袭对吧 所以从近日开始会重新恢复脚本 要抄袭就抄吧 没关系

现在很多资源文件都可以透过下载进行实时更新
服务器也与客户端可以用table方便的进行数据交换 可是有没有办法在服务端写一个函数 让客户端去调用呢
实际上可以透过函数装箱拆箱来解决这个问题

业务需求:

需要把客户端的一个函数放到服务端去书写 然后让客户端去调用 实现服务器全栈开发
首先我们在服务端写一个简单脚本
function add(a1,a2)
   return a1 + a2
end
然后我们需要在客户端调用这个add函数 实现加法


以下是实现代码:
      
--[[
Lua 装箱拆箱示例  序列化与反序列化
服务端脚本
[url=http://bbs.ml30.com]http://bbs.ml30.com[/url]
[url=http://cgdev.me]http://cgdev.me[/url]
]]
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 装箱拆箱示例  序列化与反序列化
客户端脚本
[url=http://bbs.ml30.com]http://bbs.ml30.com[/url]
[url=http://cgdev.me]http://cgdev.me[/url]

]]
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[tbl["funcname"]] = 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引擎中测试通过 其他引擎使用引起的任何问题概不负责















回复

使用道具 举报

1

主题

191

帖子

191

积分

注册会员

Rank: 2

金钱
104
号角币
0
发表于 2022-3-3 12:04:08 | 显示全部楼层
感谢大佬分享
回复 支持 反对

使用道具 举报

1

主题

191

帖子

191

积分

注册会员

Rank: 2

金钱
104
号角币
0
发表于 2022-3-4 10:45:18 | 显示全部楼层

希望论坛越办越好,会员越来越多,越来越活跃
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|GA好望角

GMT+8, 2024-12-31 01:18 , Processed in 0.090124 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表