Пример #1
0
def manageSubscriptions(sender, name, subs, xs):
    old_subscriptions = yield psaff.getSubscriptions(
        sender=sender,
        node=name,
        xs=xs)

    old_subs = set()
    for s in old_subscriptions:
        s.state = 'none'
        old_subs.add(s)

    if len(old_subs) > 0:
        yield psaff.makeSubscriptions(
            sender=sender,
            node=name,
            subscriptions=old_subs,
            xs=xs)

    new_subs = set()
    for s in subs:
        new_subs.add(ps.Subscription(
            nodeIdentifier=None, subscriber=s, state='subscribed'
            ))

    if len(new_subs) > 0:
        yield psaff.makeSubscriptions(
            sender=sender,
            node=name,
            subscriptions=new_subs,
            xs=xs)
Пример #2
0
        def cb(new_node):
            # need some way of identifying these nodes if APIMixin gets restarted
            # e.g. use pubsub node tree and have an API folder?
            self.clients[jid] = new_node
            ds = []
            ds.append(psaff.makeSubscriptions(
                self.jid,
                new_node,
                set([ps.Subscription(
                    nodeIdentifier=None, subscriber=jid, state='subscribed'
                    )]),
                self.psclient.xmlstream
                ))
            ds.append(psaff.makeAffiliations(
                self.jid,
                new_node,
                dict({jid.full(): 'publisher'}),
                self.psclient.xmlstream
                ))
            
            def inner(data):
                return new_node

            def eb(err):
                return self.api_unregister(jid)
                
            l = defer.DeferredList(ds)
            l.addCallbacks(inner, eb)
            return l