上一回介紹過 CC: Tweaked Wired Modem 和 Wireless Modem 的網路功能
事實上,這在 CC: Tweaked 裡頭是比較低階的網路實作
彈性比較大,但功能比較少
CC: Tweaked 其實已經幫我們包裝好這些底層實作,另提供一個較高階的網路 API: rednet
透過 rednet API 除了可以實現電腦之間傳訊的基本功能之外
還有一些進階功能,包括廣播、無限長度傳輸、訊息分類與過濾、限時傳送、主機定義
而且撰寫 rednet API 的程式碼,也比直接用底層 peripheral/modem API 來得少
以下我是直接閱讀 /rom/apis/rednet.lua 後,以底層的 peripheral API 來解釋,總結 rednet API 的用途
為了避免解釋複雜,我先總結兩個共通特性:
全部 rednet API 的底層實作如下:
{
nMessageID = nMessageID, -- 亂數
nRecipient = nRecipient, -- receiverID
message = message, -- 真正的訊息內容
sProtocol = sProtocol, -- 過濾分類用的字串
}
介紹過 Rednet API 的大概實作後,來實際 demo 吧,我們來解決上一回的問題:Wireless Modem 的最遠傳輸距離是 64 格方塊。
無限距離傳輸超級簡單,CC: Tweaked 也包裝好工具了
架設你想要傳輸 A -> E 中間大約距離 240 格方塊,那麼只要在這中間大約每隔 60 方塊距離放置一台電腦,各自安裝一台 Wireless Modem,開機後直接執行 repeat,之後就不用管了
示意如下,要執行 repeat 的有 B, C, D 電腦
A (60方塊)-> B (60方塊)-> C (60方塊)-> D (60方塊)-> E
repeat 就是 /rom/programs/rednet/repeat.lua
它做的事情就是一直不斷接收 Repeat channel 的訊息並轉發,所以理論上,只要你肯大約每隔 60 方塊就放置一台電腦做 repeat,傳輸可以無限遠
要測試的話,其實也不用急著寫 code
還記得 CC: Tweaked 有個互動式的 Lua 環境可以用嗎?
輸入 lua 即可,程式在 /rom/programs/lua.lua
首先要到遙遠的接收端開啟 rednet 並持續接收訊息
rednet.open("top") -- 假設你數據機是放在上方
rednet.receive() -- 不限制 protocol,不限時間接收訊息
接著回到傳送端電腦
rednet.open("top") -- 假設你數據機是放在上方
rednet.send(19, "I love moon") -- 你必須先知道接收端電腦的 id
rednet.broadcast("I love moon") -- 不知道 id 就先用 broadcast 試試
接收端的畫面收到訊息如下
中間作為中繼站的電腦,畫面如下
最後,實際感受一下到底傳了多遠(遠目...
今天就介紹到這裡,至於 protocol, hostname, timeout 的設計,真的就看玩家自己怎麼應用了
你也可以試試~