コード例 #1
0
ファイル: pubsub.py プロジェクト: 3rdandUrban-dev/Nuxleus
    def main(self):
        yield 1

        while 1:
            if self.dataReady("control"):
                mes = self.recv("control")
                
                if isinstance(mes, shutdownMicroprocess) or \
                        isinstance(mes, producerFinished):
                    self.send(producerFinished(), "signal")
                    break

            if self.dataReady("forward"):
                s = self.recv("forward")
                self.send(Node.to_purge_element(s), "outbox")

            if self.dataReady("inbox"):
                handled = False
                a = self.recv("inbox")
                e = a.xml_parent.xml_parent
                self.send(('INCOMING', e), "log")

                msg_type = e.get_attribute_value(u'type') or 'get'
                key = 'xmpp.%s' % unicode(msg_type)

                if key in self.outboxes:
                    self.send(Node.from_purge_element(e), key)
                    handled = True

                if not handled:
                    self.send(e, "unknown")
                    
            if not self.anyReady():
                self.pause()
  
            yield 1

        yield 1
コード例 #2
0
ファイル: pubsub.py プロジェクト: 3rdandUrban-dev/Nuxleus
    def main(self):
        yield self.initComponents()

        while 1:
            if self.dataReady("control"):
                mes = self.recv("control")
                
                if isinstance(mes, shutdownMicroprocess) or isinstance(mes, producerFinished):
                    self.send(producerFinished(), "signal")
                    break

            if self.dataReady("jid"):
                self.from_jid = self.recv('jid')
                self.pubsub_top_level_node = u'home/%s/%s' % (self.xmpphost, self.from_jid.node)
            
            if self.dataReady("initiate"):
                self.recv("initiate")
                
                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                         node_name=self.pubsub_top_level_node)
                self.send(p, "create-node")
                yield 1                    

                #d = FeaturesDiscovery(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost)
                #self.send(d, "features-disco")

                d = SubscriptionsDiscovery(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost)
                self.send(d, "subscriptions-disco")
                
                d = AffiliationsDiscovery(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost)
                self.send(d, "affiliations-disco")

                n = ItemsDiscovery(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost, 
                                   node_name=self.pubsub_top_level_node)
                self.send(n, "items-disco")

            # The response to our discovery query
            # is a a headstock.api.discovery.FeaturesDiscovery instance.
            # What we immediatly do is to notify all handlers
            # interested in that event about it.
            if self.dataReady('features.result'):
                disco = self.recv('features.result')
                for feature in disco.features:
                    print "  ", feature.var
                self.send(disco, 'features-announce')

            if self.dataReady('items.result'):
                items = self.recv('items.result')
                print "%s has %d item(s)" % (items.node_name, len(items.items))

                #for item in items.items:
                    #n = ItemsDiscovery(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost, 
                    #                   node_name=item.node)
                    #self.send(n, "items-disco")

            if self.dataReady('items.error'):
                items_disco = self.recv('items.error')
                print "DISCO ERROR: ", items_disco.node_name, items_disco.error

                if items_disco.error.condition == 'item-not-found':
                    p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                             node_name=items_disco.node_name)
                    self.send(p, "create-node")
                    yield 1                    
                
            if self.dataReady('subscriptions.result'):
                subscriptions = self.recv('subscriptions.result')
                for sub in subscriptions.subscriptions:
                    print "Subscription: %s (%s)" % (sub.node, sub.state)

            if self.dataReady('affiliations.result'):
                affiliations = self.recv('affiliations.result')
                for aff in affiliations.affiliations:
                    print "Affiliation: %s %s" % (aff.node, aff.affiliation)

            if self.dataReady('docreate'):
                nodeid = self.recv('docreate').strip()

                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                         node_name=nodeid)
                self.send(p, "create-node")

            if self.dataReady('docreatecollection'):
                nodeid = self.recv('docreatecollection').strip()

                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                         node_name=nodeid)
                p.set_default_collection_conf()
                self.send(p, "create-node")

            if self.dataReady('dodelete'):
                nodeid = self.recv('dodelete').strip()
                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                         node_name=nodeid)
                self.send(p, "delete-node")

            if self.dataReady('dosubscribe'):
                nodeid = self.recv('dosubscribe').strip()
                
                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                         node_name=nodeid, sub_jid=self.from_jid.nodeid())
                self.send(p, "subscribe-node")

            if self.dataReady('dounsubscribe'):
                nodeid = self.recv('dounsubscribe').strip()
                
                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                         node_name=nodeid, sub_jid=self.from_jid.nodeid())
                self.send(p, "unsubscribe-node")
            
            if self.dataReady('created'):
                node = self.recv('created')
                print "Node created: %s" % node.node_name
                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost,
                         node_name=node.node_name, sub_jid=self.from_jid.nodeid())
                self.send(p, "subscribe-node")
                
            if self.dataReady('subscribed'):
                node = self.recv('subscribed')
                print "Node subscribed: %s" % node.node_name

            if self.dataReady('deleted'):
                node = self.recv('deleted')
                print "Node deleted: %s" % node.node_name
                
            if self.dataReady('error'):
                node = self.recv('error')
                print node.error
                
            if not self.anyReady():
                self.pause()
  
            yield 1