Skip to content

Commit 428b8bb

Browse files
author
Björn Ritzl
committed
broadcaster module now uses listener module
1 parent b08f948 commit 428b8bb

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

ludobits/m/broadcast.lua

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
--- Module to simplify sending a message to multiple receivers
2+
local listener = require "ludobits.m.listener"
23

34
local M = {}
45

@@ -13,38 +14,35 @@ end
1314
-- @param message
1415
function M.send(message_id, message)
1516
assert(message_id)
16-
local key = hash_to_hex(ensure_hash(message_id))
17+
local key = ensure_hash(message_id)
1718
if receivers[key] then
1819
message = message or {}
19-
for _,receiver_url in pairs(receivers[key]) do
20-
msg.post(receiver_url, message_id, message)
21-
end
20+
receivers[key].trigger(message_id, message)
2221
end
2322
end
2423

2524
--- Register the current script as a receiver for a specific message
2625
-- @param message_id
27-
function M.register(message_id)
26+
-- @param url_or_fn Optional URL or function to register. Defaults to the
27+
-- current script url
28+
function M.register(message_id, url_or_fn)
2829
assert(message_id)
29-
local key = hash_to_hex(ensure_hash(message_id))
30-
receivers[key] = receivers[key] or {}
31-
table.insert(receivers[key], msg.url())
30+
url_or_fn = url_or_fn or msg.url()
31+
local key = ensure_hash(message_id)
32+
receivers[key] = receivers[key] or listener.create()
33+
receivers[key].add(url_or_fn)
3234
end
3335

3436
--- Unregister the current script from receiving a previously registered message
3537
-- @param message_id
36-
function M.unregister(message_id)
38+
-- @param url_or_fn Optional URL or function to unregister. Defaults to the current
39+
-- script url
40+
function M.unregister(message_id, url_or_fn)
3741
assert(message_id)
38-
local key = hash_to_hex(ensure_hash(message_id))
39-
if not receivers[key] then
40-
return
41-
end
42-
local my_url = msg.url()
43-
for i,receiver_url in pairs(receivers[key]) do
44-
if receiver_url == my_url then
45-
table.remove(receivers[key], i)
46-
return
47-
end
42+
url_or_fn = url_or_fn or msg.url()
43+
local key = ensure_hash(message_id)
44+
if receivers[key] then
45+
receivers[key].remove(url_or_fn)
4846
end
4947
end
5048

0 commit comments

Comments
 (0)