Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Utilisation des Components sur AutobahnPython

+2 votes

Bon, je viens poser la question ici, car le peu de documentation et les exemples inexistant ou pas à jour couplé au fait que je sois un gros noob font que je suis complètement paumé.

J'arrive à comprendre à peu près l'utilisation des components mais je bloque sur un truc, je vais prendre un exemple tout bête genre ce timer là avec l'ancienne façon d'écrire sous autobahn:

from asyncio import sleep
from autobahn.asyncio.wamp import ApplicationSession, ApplicationRunner
import arrow

class Timer(ApplicationSession):
    def time(self):
        return arrow.utcnow().format('HH:mm:ss')

    def refresh(self):
        self.publish(self.uri("refresh"), self.time())

    async def onJoin(self, details):
        try:
            await self.subscribe(self.refresh, 'realm.timer.refresh')
        except Exception as err:
            print(err)
        while True:
            self.refresh()
            await sleep(1)


if __name__ == '__main__':
    runner = ApplicationRunner("ws://localhost:8080/ws", 'realm')
    runner.run(Timer)

Avec l'autre manière d'écrire recommandé par la doc je devrais faire ça:

from asyncio import sleep
from autobahn.asyncio.component import Component, run
import arrow

timer = Component(
    transports="ws://localhost:8080/ws",
    realm="realm",
)


def time():
    return arrow.utcnow().format('HH:mm:ss')

@timer.subscribe("timer.refresh")
def refresh():
    (timer?session?).publish("realm.timer.refresh", time())

@timer.on_join
async def joined(session, details):    
    while True:
        session.refresh()
        await sleep(1)


if __name__ == "__main__":
    run([timer])

Alors c'est pas un très bon exemple car si je remplace la fonction refresh par :

@timer.subscribe("timer.refresh")
def refresh():
    pass

et la boucle while par:

while True:
    session.publish('realm.timer.refresh', time())
    await sleep(1)

Le code marche.

Mais dans le cas où j'ai besoin de faire un self.publish ou self.call hors de la fonction "joined" comment je dois procéder?

demandé 15-Mai-2018 par daimebag (204 points)

la solution ??

Se connecter ou S'inscrire pour répondre à cette question.

...