Comparison

util/pubsub.lua @ 10521:cbb2c3f8bb1d

Merge 0.11->trunk
author Kim Alvefur <zash@zash.se>
date Mon, 23 Dec 2019 20:57:10 +0100
parent 10356:0a2d7efca039
parent 10519:641e3b7a6a39
child 10537:c5558138ce33
comparison
equal deleted inserted replaced
10517:6e1163fa2cd2 10521:cbb2c3f8bb1d
5 local service_mt = {}; 5 local service_mt = {};
6 6
7 local default_config = { 7 local default_config = {
8 itemstore = function (config, _) return cache.new(config["max_items"]) end; 8 itemstore = function (config, _) return cache.new(config["max_items"]) end;
9 broadcaster = function () end; 9 broadcaster = function () end;
10 subscriber_filter = function (subs) return subs end;
10 itemcheck = function () return true; end; 11 itemcheck = function () return true; end;
11 get_affiliation = function () end; 12 get_affiliation = function () end;
12 normalize_jid = function (jid) return jid; end; 13 normalize_jid = function (jid) return jid; end;
13 capabilities = { 14 capabilities = {
14 outcast = { 15 outcast = {
498 return ok, err; 499 return ok, err;
499 end 500 end
500 end 501 end
501 502
502 self.events.fire_event("node-deleted", { service = self, node = node, actor = actor }); 503 self.events.fire_event("node-deleted", { service = self, node = node, actor = actor });
503 self.config.broadcaster("delete", node, node_obj.subscribers, nil, actor, node_obj, self); 504 self:broadcast("delete", node, node_obj.subscribers, nil, actor, node_obj);
504 return true; 505 return true;
505 end 506 end
506 507
507 -- Used to check that the config of a node is as expected (i.e. 'publish-options') 508 -- Used to check that the config of a node is as expected (i.e. 'publish-options')
508 local function check_preconditions(node_config, required_config) 509 local function check_preconditions(node_config, required_config)
566 end 567 end
567 if type(ok) == "string" then id = ok; end 568 if type(ok) == "string" then id = ok; end
568 local event_data = { service = self, node = node, actor = actor, id = id, item = item }; 569 local event_data = { service = self, node = node, actor = actor, id = id, item = item };
569 self.events.fire_event("item-published/"..node, event_data); 570 self.events.fire_event("item-published/"..node, event_data);
570 self.events.fire_event("item-published", event_data); 571 self.events.fire_event("item-published", event_data);
571 self.config.broadcaster("items", node, node_obj.subscribers, item, actor, node_obj, self); 572 self:broadcast("items", node, node_obj.subscribers, item, actor, node_obj);
572 return true; 573 return true;
574 end
575
576 function service:broadcast(event, node, subscribers, item, actor, node_obj)
577 subscribers = self.config.subscriber_filter(subscribers, node, event);
578 return self.config.broadcaster(event, node, subscribers, item, actor, node_obj, self);
573 end 579 end
574 580
575 function service:retract(node, actor, id, retract) --> ok, err 581 function service:retract(node, actor, id, retract) --> ok, err
576 -- Access checking 582 -- Access checking
577 if not self:may(node, actor, "retract") then 583 if not self:may(node, actor, "retract") then
586 if not ok then 592 if not ok then
587 return nil, "internal-server-error"; 593 return nil, "internal-server-error";
588 end 594 end
589 self.events.fire_event("item-retracted", { service = self, node = node, actor = actor, id = id }); 595 self.events.fire_event("item-retracted", { service = self, node = node, actor = actor, id = id });
590 if retract then 596 if retract then
591 self.config.broadcaster("retract", node, node_obj.subscribers, retract, actor, node_obj, self); 597 self:broadcast("retract", node, node_obj.subscribers, retract, actor, node_obj);
592 end 598 end
593 return true 599 return true
594 end 600 end
595 601
596 function service:purge(node, actor, notify) --> ok, err 602 function service:purge(node, actor, notify) --> ok, err
608 else 614 else
609 self.data[node] = self.config.itemstore(self.nodes[node].config, node); 615 self.data[node] = self.config.itemstore(self.nodes[node].config, node);
610 end 616 end
611 self.events.fire_event("node-purged", { service = self, node = node, actor = actor }); 617 self.events.fire_event("node-purged", { service = self, node = node, actor = actor });
612 if notify then 618 if notify then
613 self.config.broadcaster("purge", node, node_obj.subscribers, nil, actor, node_obj, self); 619 self:broadcast("purge", node, node_obj.subscribers, nil, actor, node_obj);
614 end 620 end
615 return true 621 return true
616 end 622 end
617 623
618 function service:get_items(node, actor, ids) --> (true, { id, [id] = node }) or (false, err) 624 function service:get_items(node, actor, ids) --> (true, { id, [id] = node }) or (false, err)