|
1 | 1 | --- Module to simplify sending a message to multiple receivers
|
| 2 | +local listener = require "ludobits.m.listener" |
2 | 3 |
|
3 | 4 | local M = {}
|
4 | 5 |
|
|
13 | 14 | -- @param message
|
14 | 15 | function M.send(message_id, message)
|
15 | 16 | assert(message_id)
|
16 |
| - local key = hash_to_hex(ensure_hash(message_id)) |
| 17 | + local key = ensure_hash(message_id) |
17 | 18 | if receivers[key] then
|
18 | 19 | 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) |
22 | 21 | end
|
23 | 22 | end
|
24 | 23 |
|
25 | 24 | --- Register the current script as a receiver for a specific message
|
26 | 25 | -- @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) |
28 | 29 | 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) |
32 | 34 | end
|
33 | 35 |
|
34 | 36 | --- Unregister the current script from receiving a previously registered message
|
35 | 37 | -- @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) |
37 | 41 | 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) |
48 | 46 | end
|
49 | 47 | end
|
50 | 48 |
|
|
0 commit comments