Skip to content

Signal ​

Signal 是同端事件信号,可通过 Connect 持续监听、Once 单次监听,并用 Fire 传递一个可选参数。跨客户端与服务端的通信使用 RemoteEvent。

概览 ​

Signal 是同端事件信号,可通过 Connect 持续监听、Once 单次监听,并用 Fire 传递一个可选参数。跨客户端与服务端的通信使用 RemoteEvent。

可通过 Signal.New() 构造

代码示例 ​

创建 Signal 并持续监听

lua
-- @runtime client
local signal = Signal.New()
local conn = signal:Connect(function(payload)
    print('收到触发:', payload)
end)
signal:Fire({ name = 'Eggy', score = 100 })
conn:Disconnect()

函数 ​

Connect ​

签名:Connect(func: Function) -> Connection

为 Signal 对象注册一个持续生效的监听回调。注册后,每次该 Signal 被触发时都会调用这个回调函数,并把触发时传入的参数原样转发给回调。返回一个 Connection 连接句柄,代表本次注册的监听关系。

参数类型说明
funcFunction事件触发时调用的监听函数

返回值 Connection

持续监听并传递单个事件参数

lua
-- @runtime client
local sig = Signal.New()
local conn = sig:Connect(function(payload)
    print('收到触发:', payload)
end)
sig:Fire({ name = 'Eggy', score = 100 })
conn:Disconnect()

Once ​

签名:Once(func: Function) -> Connection

为 Signal 对象注册一个只触发一次的监听回调。该回调仅在信号首次被触发时执行一次,之后即使该 Signal 再次被触发也不会再进入此回调。返回一个 Connection 连接句柄,可用于提前断开这次监听。

参数类型说明
funcFunction第一次事件触发时调用的监听函数

返回值 Connection

单次监听:Once 只在首次触发时执行回调

lua
-- @runtime client
-- 创建同端通信使用的事件信号
local signal = Signal.New()
local count = 0
-- 单次监听:回调只在首次 Fire 时进入一次,之后的 Fire 不会再触发该回调
local conn = signal:Once(function(msg)
    count = count + 1
    print("Once 回调触发:", msg, "累计次数:", count)
end)
signal:Fire("第一次触发")
signal:Fire("第二次触发")
print("回调累计执行次数:", count)
-- conn 为本次单次监听返回的连接句柄,回调执行后该监听不再生效

Fire ​

签名:Fire(args: Any?)

触发信号,所有通过 Connect 或 Once 连接的监听函数将被调用,并接收传入的参数。

参数类型说明
argsAny事件参数

触发信号并在结束后释放持续监听

lua
-- @runtime client
local sig = Signal.New()
local conn = sig:Connect(function(payload)
    print('收到参数:', payload)
end)
sig:Fire({ message = 'hello', count = 123 })
conn:Disconnect()