Software / code / prosody
Comparison
util/pubsub.lua @ 8211:5cbbe825d9d1
util.pubsub: Add a node parameter to itemstore().
This allows the backend to know the node name, when it needs to
differentiate it at storage for example.
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Sun, 02 Apr 2017 19:08:54 +0100 |
| parent | 7727:0011889c928f |
| child | 8212:66173e4b355a |
comparison
equal
deleted
inserted
replaced
| 8210:352d605b1178 | 8211:5cbbe825d9d1 |
|---|---|
| 3 | 3 |
| 4 local service = {}; | 4 local service = {}; |
| 5 local service_mt = { __index = service }; | 5 local service_mt = { __index = service }; |
| 6 | 6 |
| 7 local default_config = { __index = { | 7 local default_config = { __index = { |
| 8 itemstore = function (config) return cache.new(tonumber(config["pubsub#max_items"])) end; | 8 itemstore = function (config, _) return cache.new(tonumber(config["pubsub#max_items"])) end; |
| 9 broadcaster = function () end; | 9 broadcaster = function () end; |
| 10 get_affiliation = function () end; | 10 get_affiliation = function () end; |
| 11 capabilities = {}; | 11 capabilities = {}; |
| 12 } }; | 12 } }; |
| 13 local default_node_config = { __index = { | 13 local default_node_config = { __index = { |
| 221 name = node; | 221 name = node; |
| 222 subscribers = {}; | 222 subscribers = {}; |
| 223 config = setmetatable(options or {}, {__index=self.node_defaults}); | 223 config = setmetatable(options or {}, {__index=self.node_defaults}); |
| 224 affiliations = {}; | 224 affiliations = {}; |
| 225 }; | 225 }; |
| 226 self.data[node] = self.config.itemstore(self.nodes[node].config); | 226 self.data[node] = self.config.itemstore(self.nodes[node].config, node); |
| 227 self.events.fire_event("node-created", { node = node, actor = actor }); | 227 self.events.fire_event("node-created", { node = node, actor = actor }); |
| 228 local ok, err = self:set_affiliation(node, true, actor, "owner"); | 228 local ok, err = self:set_affiliation(node, true, actor, "owner"); |
| 229 if not ok then | 229 if not ok then |
| 230 self.nodes[node] = nil; | 230 self.nodes[node] = nil; |
| 231 self.data[node] = nil; | 231 self.data[node] = nil; |
| 306 -- | 306 -- |
| 307 local node_obj = self.nodes[node]; | 307 local node_obj = self.nodes[node]; |
| 308 if not node_obj then | 308 if not node_obj then |
| 309 return false, "item-not-found"; | 309 return false, "item-not-found"; |
| 310 end | 310 end |
| 311 self.data[node] = self.config.itemstore(self.nodes[node].config); | 311 self.data[node] = self.config.itemstore(self.nodes[node].config, node); |
| 312 self.events.fire_event("node-purged", { node = node, actor = actor }); | 312 self.events.fire_event("node-purged", { node = node, actor = actor }); |
| 313 if notify then | 313 if notify then |
| 314 self.config.broadcaster("purge", node, node_obj.subscribers); | 314 self.config.broadcaster("purge", node, node_obj.subscribers); |
| 315 end | 315 end |
| 316 return true | 316 return true |
| 422 end | 422 end |
| 423 | 423 |
| 424 for k,v in pairs(new_config) do | 424 for k,v in pairs(new_config) do |
| 425 node_obj.config[k] = v; | 425 node_obj.config[k] = v; |
| 426 end | 426 end |
| 427 local new_data = self.config.itemstore(self.nodes[node].config); | 427 local new_data = self.config.itemstore(self.nodes[node].config, node); |
| 428 for key, value in self.data[node]:items() do | 428 for key, value in self.data[node]:items() do |
| 429 new_data:set(key, value); | 429 new_data:set(key, value); |
| 430 end | 430 end |
| 431 self.data[node] = new_data; | 431 self.data[node] = new_data; |
| 432 return true; | 432 return true; |