diff sat_pubsub/tap.py @ 232:923281d4c5bc

renamed idavoll directory to sat_pubsub
author Goffi <goffi@goffi.org>
date Thu, 17 May 2012 12:48:14 +0200
parents idavoll/tap.py@8540825f85e0
children 564ae55219e1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sat_pubsub/tap.py	Thu May 17 12:48:14 2012 +0200
@@ -0,0 +1,94 @@
+# Copyright (c) 2003-2010 Ralph Meijer
+# See LICENSE for details.
+
+from twisted.application import service
+from twisted.python import usage
+from twisted.words.protocols.jabber.jid import JID
+
+from wokkel.component import Component
+from wokkel.disco import DiscoHandler
+from wokkel.generic import FallbackHandler, VersionHandler
+from wokkel.iwokkel import IPubSubResource
+from wokkel.pubsub import PubSubService
+
+from idavoll import __version__
+from idavoll.backend import BackendService
+
+class Options(usage.Options):
+    optParameters = [
+        ('jid', None, 'pubsub', 'JID this component will be available at'),
+        ('secret', None, 'secret', 'Jabber server component secret'),
+        ('rhost', None, '127.0.0.1', 'Jabber server host'),
+        ('rport', None, '5347', 'Jabber server port'),
+        ('backend', None, 'memory', 'Choice of storage backend'),
+        ('dbuser', None, None, 'Database user (pgsql backend)'),
+        ('dbname', None, 'pubsub', 'Database name (pgsql backend)'),
+        ('dbpass', None, None, 'Database password (pgsql backend)'),
+        ('dbhost', None, None, 'Database host (pgsql backend)'),
+        ('dbport', None, None, 'Database port (pgsql backend)'),
+    ]
+
+    optFlags = [
+        ('verbose', 'v', 'Show traffic'),
+        ('hide-nodes', None, 'Hide all nodes for disco')
+    ]
+
+    def postOptions(self):
+        if self['backend'] not in ['pgsql', 'memory']:
+            raise usage.UsageError, "Unknown backend!"
+
+        self['jid'] = JID(self['jid'])
+
+
+
+def makeService(config):
+    s = service.MultiService()
+
+    # Create backend service with storage
+
+    if config['backend'] == 'pgsql':
+        from twisted.enterprise import adbapi
+        from idavoll.pgsql_storage import Storage
+        dbpool = adbapi.ConnectionPool('psycopg2',
+                                       user=config['dbuser'],
+                                       password=config['dbpass'],
+                                       database=config['dbname'],
+                                       host=config['dbhost'],
+                                       port=config['dbport'],
+                                       cp_reconnect=True,
+                                       client_encoding='utf-8',
+                                       )
+        st = Storage(dbpool)
+    elif config['backend'] == 'memory':
+        from idavoll.memory_storage import Storage
+        st = Storage()
+
+    bs = BackendService(st)
+    bs.setName('backend')
+    bs.setServiceParent(s)
+
+    # Set up XMPP server-side component with publish-subscribe capabilities
+
+    cs = Component(config["rhost"], int(config["rport"]),
+                   config["jid"].full(), config["secret"])
+    cs.setName('component')
+    cs.setServiceParent(s)
+
+    cs.factory.maxDelay = 900
+
+    if config["verbose"]:
+        cs.logTraffic = True
+
+    FallbackHandler().setHandlerParent(cs)
+    VersionHandler('Idavoll', __version__).setHandlerParent(cs)
+    DiscoHandler().setHandlerParent(cs)
+
+    resource = IPubSubResource(bs)
+    resource.hideNodes = config["hide-nodes"]
+    resource.serviceJID = config["jid"]
+
+    ps = PubSubService(resource)
+    ps.setHandlerParent(cs)
+    resource.pubsubService = ps
+
+    return s