Mercurial > libervia-backend
diff src/plugins/plugin_xep_0060.py @ 283:68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
- plugin for XEP 0060, 0163 and 0107, based on Wokkel's pubsub
- XEP 0115 plugin has been fixed, so generateHash can be called when features have changed (can be usefull to filter PEP)
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 03 Feb 2011 18:06:25 +0100 |
parents | |
children | 3b382fa0ac28 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/plugin_xep_0060.py Thu Feb 03 18:06:25 2011 +0100 @@ -0,0 +1,94 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +SAT plugin for Publish-Subscribe (xep-0060) +Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +""" + +from logging import debug, info, error +from twisted.internet import protocol +from twisted.words.protocols.jabber import client, jid +from twisted.words.protocols.jabber import error as jab_error +import twisted.internet.error + +from wokkel import disco, iwokkel, pubsub + +from zope.interface import implements + +PLUGIN_INFO = { +"name": "Publish-Subscribe", +"import_name": "XEP_0060", +"type": "XEP", +"protocols": ["XEP-0060"], +"dependencies": [], +"main": "XEP_0060", +"handler": "yes", +"description": _("""Implementation of PubSub Protocol""") +} + +class XEP_0060(): + + def __init__(self, host): + info(_("PubSub plugin initialization")) + self.host = host + self.managedNodes=[] + self.clients={} + + def getHandler(self, profile): + self.clients[profile] = SatPubSubClient(self.host, self) + return self.clients[profile] + + def addManagedNode(self, node_name, callback): + """Add a handler for a namespace + @param namespace: NS of the handler (will appear in disco info) + @param callback: method to call when the handler is found + @param profile: profile which manage this handler""" + self.managedNodes.append((node_name, callback)) + + +class SatPubSubClient(pubsub.PubSubClient): + implements(disco.IDisco) + + def __init__(self, host, parent_plugin): + self.host=host + self.parent_plugin = parent_plugin + pubsub.PubSubClient.__init__(self) + + def connectionInitialized(self): + pubsub.PubSubClient.connectionInitialized(self) + + def itemsReceived(self, event): + for node in self.parent_plugin.managedNodes: + if event.nodeIdentifier == node[0]: + return node[1](event, self.parent.profile) + + def deleteReceived(self, event): + import pdb + pdb.set_trace() + + def purgeReceived(self, event): + import pdb + pdb.set_trace() + + def getDiscoInfo(self, requestor, target, nodeIdentifier=''): + _disco_info = [] + self.host.trigger.point("PubSub Disco Info", _disco_info, self.parent.profile) + return _disco_info + + def getDiscoItems(self, requestor, target, nodeIdentifier=''): + return [] +