传奇GM论坛 发表于 2019-4-24 11:12:16

手机传奇服务端-Lua教程服务端与客户端通信工作原理

Lua教程第一章:服务端与客户端通信
Lua实现的功能都需要服务端与客户端之间通信合作才可以完成,所以两者之间的通信是所有功能实现的基础

本例将实现一个最基本的服务端与客户端通信功能:在游戏中按下Ctrl+C键,发送一条消息到服务端,服务端接收到消息后,返回一条消息给客户端。

一、传奇服务端文件结构图如下:



只有了解的文件结构,才知道Lua脚本文件如何放置以及它的作用!

二、传奇客户端Lua

首先,我们在客户端目录下创建一个“lua”文件夹,并在里面创建一个“client.lua”脚本文件
通过上面的文件结构,我们可以知道,该文件在游戏启动时就会加载

我们开始编辑“client.lua”脚本文件:
BINDKEYEVENT("C", "test.lua", "keydown")
BINDLUASOCKET(1, "test.lua", "servermsg")

第一行BINDKEYEVENT函数是一个绑定按键事件的函数,有三个参数:
1、对应的按键
2、对应的lua脚本文件
3、对应的函数名
作用说明:绑定Ctrl+C键,当按下这组合键时,会执行同级目录下“test.lua”脚本文件里的“keydown”函数


第二行BINDLUASOCKET函数是绑定服务端消息的函数,有三个参数:
1、消息ID
2、对应的lua脚本文件
3、对应的函数名
作用说明:当服务端发送ID为1的消息时,会执行同级目录下“test.lua”脚本文件里的“servermsg”函数


我们继续在客户端目录的“lua”文件夹里创建一个“test.lua”脚本文件,开始编辑:
function keydown()
      SENDTEXT(100, "来自客户端的消息")
end

function servermsg(msg)
      CHAT(msg)
end
复制代码
这里有两个函数,对应上面绑定的函数名

第一个keydown函数的执行内容是:
给服务端发送一个ID为100的消息

第二个servermsg函数的执行内容是:
将传入的参数输出到游戏聊天框中


三、服务端

我们在服务端的“Mir200”目录下创建一个“lua”文件夹,并在里面创建一个“SocketLua.lua”脚本文件并编辑:
BINDSOCKET(100, test_lua\\test.lua", "test", 0)
复制代码
这个函数是绑定客户端消息事件,有4个参数:
1、消息ID
2、对应的lua脚本文件,默认为服务端“Mir200\Envir”目录
3、对应的函数名
4、该参数暂时保留,传入0即可
作用说明:当客户端发送ID为100的消息时,就会执行服务端“Mir200\Envir\test_lua\test.lua”脚本文件里的“test”函数

我们继续在服务端“Mir200\Envir”目录下创建一个“test_lua”文件夹,并在里面创建一个“test.lua”脚本文件进行编辑:
function test()
      local msg = GETSOCKETMSG()
      PRINT(msg)
      SENDTEXT(1, "来自服务端的消息")
end


这个函数对应上面绑定的函数名,执行内容是:
首先通过GETSOCKETMSG()方法获取到客户端发送过来的消息并保存到变量
然后打印到M2窗口,再发送一条ID为1的消息

到此,通信功能部分全部完成,开启服务端,进入游戏,按下CTRL+C键,会看到:

客户端会显示从服务端发送过来的消息



服务端会显示从客户端发送过来的消息


四:总结
服务端与客户端之间的通信主要通过事件绑定来触发消息的发送与接收
当客户端发送消息到服务端时,根据服务端绑定的事件,执行对应的函数,再给客户端回消息
也可以从服务端主动发消息到客户端,两者之间是可以任意发送消息的


页: [1]
查看完整版本: 手机传奇服务端-Lua教程服务端与客户端通信工作原理