主题
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 连接句柄,代表本次注册的监听关系。
| 参数 | 类型 | 说明 |
|---|---|---|
func | Function | 事件触发时调用的监听函数 |
返回值 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 连接句柄,可用于提前断开这次监听。
| 参数 | 类型 | 说明 |
|---|---|---|
func | Function | 第一次事件触发时调用的监听函数 |
返回值 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 连接的监听函数将被调用,并接收传入的参数。
| 参数 | 类型 | 说明 |
|---|---|---|
args | Any | 事件参数 |
触发信号并在结束后释放持续监听
lua
-- @runtime client
local sig = Signal.New()
local conn = sig:Connect(function(payload)
print('收到参数:', payload)
end)
sig:Fire({ message = 'hello', count = 123 })
conn:Disconnect()