Lua教程第一章:服務(wù)端與客戶端通信
Lua實(shí)現(xiàn)的功能都需要服務(wù)端與客戶端之間通信合作才可以完成,所以兩者之間的通信是所有功能實(shí)現(xiàn)的基礎(chǔ)
本例將實(shí)現(xiàn)一個(gè)最基本的服務(wù)端與客戶端通信功能:在游戲中按下Ctrl+C鍵,發(fā)送一條消息到服務(wù)端,服務(wù)端接收到消息后,返回一條消息給客戶端。
一、傳奇服務(wù)端文件結(jié)構(gòu)圖如下:
1副本.jpg (19.71 KB, 下載次數(shù): 228)
下載附件
手機(jī)傳奇服務(wù)端LUA
2019-4-24 11:07 上傳
只有了解的文件結(jié)構(gòu),才知道Lua腳本文件如何放置以及它的作用!
二、傳奇客戶端Lua
首先,我們?cè)诳蛻舳四夸浵聞?chuàng)建一個(gè)“l(fā)ua”文件夾,并在里面創(chuàng)建一個(gè)“client.lua”腳本文件
通過(guò)上面的文件結(jié)構(gòu),我們可以知道,該文件在游戲啟動(dòng)時(shí)就會(huì)加載
我們開(kāi)始編輯“client.lua”腳本文件:
BINDKEYEVENT("C", "test.lua", "keydown")
BINDLUASOCKET(1, "test.lua", "servermsg")
第一行BINDKEYEVENT函數(shù)是一個(gè)綁定按鍵事件的函數(shù),有三個(gè)參數(shù):
1、對(duì)應(yīng)的按鍵
2、對(duì)應(yīng)的lua腳本文件
3、對(duì)應(yīng)的函數(shù)名
作用說(shuō)明:綁定Ctrl+C鍵,當(dāng)按下這組合鍵時(shí),會(huì)執(zhí)行同級(jí)目錄下“test.lua”腳本文件里的“keydown”函數(shù)
第二行BINDLUASOCKET函數(shù)是綁定服務(wù)端消息的函數(shù),有三個(gè)參數(shù):
1、消息ID
2、對(duì)應(yīng)的lua腳本文件
3、對(duì)應(yīng)的函數(shù)名
作用說(shuō)明:當(dāng)服務(wù)端發(fā)送ID為1的消息時(shí),會(huì)執(zhí)行同級(jí)目錄下“test.lua”腳本文件里的“servermsg”函數(shù)
我們繼續(xù)在客戶端目錄的“l(fā)ua”文件夾里創(chuàng)建一個(gè)“test.lua”腳本文件,開(kāi)始編輯:
function keydown()
SENDTEXT(100, "來(lái)自客戶端的消息")
end
function servermsg(msg)
CHAT(msg)
end
復(fù)制代碼
這里有兩個(gè)函數(shù),對(duì)應(yīng)上面綁定的函數(shù)名
第一個(gè)keydown函數(shù)的執(zhí)行內(nèi)容是:
給服務(wù)端發(fā)送一個(gè)ID為100的消息
第二個(gè)servermsg函數(shù)的執(zhí)行內(nèi)容是:
將傳入的參數(shù)輸出到游戲聊天框中
三、服務(wù)端
我們?cè)诜?wù)端的“Mir200”目錄下創(chuàng)建一個(gè)“l(fā)ua”文件夾,并在里面創(chuàng)建一個(gè)“SocketLua.lua”腳本文件并編輯:
BINDSOCKET(100, test_lua\\test.lua", "test", 0)
復(fù)制代碼
這個(gè)函數(shù)是綁定客戶端消息事件,有4個(gè)參數(shù):
1、消息ID
2、對(duì)應(yīng)的lua腳本文件,默認(rèn)為服務(wù)端“Mir200\Envir”目錄
3、對(duì)應(yīng)的函數(shù)名
4、該參數(shù)暫時(shí)保留,傳入0即可
作用說(shuō)明:當(dāng)客戶端發(fā)送ID為100的消息時(shí),就會(huì)執(zhí)行服務(wù)端“Mir200\Envir\test_lua\test.lua”腳本文件里的“test”函數(shù)
我們繼續(xù)在服務(wù)端“Mir200\Envir”目錄下創(chuàng)建一個(gè)“test_lua”文件夾,并在里面創(chuàng)建一個(gè)“test.lua”腳本文件進(jìn)行編輯:
function test()
local msg = GETSOCKETMSG()
PRINT(msg)
SENDTEXT(1, "來(lái)自服務(wù)端的消息")
end
這個(gè)函數(shù)對(duì)應(yīng)上面綁定的函數(shù)名,執(zhí)行內(nèi)容是:
首先通過(guò)GETSOCKETMSG()方法獲取到客戶端發(fā)送過(guò)來(lái)的消息并保存到變量
然后打印到M2窗口,再發(fā)送一條ID為1的消息
到此,通信功能部分全部完成,開(kāi)啟服務(wù)端,進(jìn)入游戲,按下CTRL+C鍵,會(huì)看到:
客戶端會(huì)顯示從服務(wù)端發(fā)送過(guò)來(lái)的消息
2.png (21.32 KB, 下載次數(shù): 227)
下載附件
Lua發(fā)送消息
2019-4-24 11:09 上傳
服務(wù)端會(huì)顯示從客戶端發(fā)送過(guò)來(lái)的消息
3.png (8.19 KB, 下載次數(shù): 220)
下載附件
Lua端M2顯示
2019-4-24 11:10 上傳
四:總結(jié)
服務(wù)端與客戶端之間的通信主要通過(guò)事件綁定來(lái)觸發(fā)消息的發(fā)送與接收
當(dāng)客戶端發(fā)送消息到服務(wù)端時(shí),根據(jù)服務(wù)端綁定的事件,執(zhí)行對(duì)應(yīng)的函數(shù),再給客戶端回消息
也可以從服務(wù)端主動(dòng)發(fā)消息到客戶端,兩者之間是可以任意發(fā)送消息的
|
|