Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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

Utilisation des Components sur AutobahnPython

+1 vote

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 par daimebag (194 points)

Votre réponse

Preview

Votre nom à afficher ( en option ):
Vie privée: . Votre adresse de messagerie ne sera utilisée que pour l'envoi de ces notifications .
Vérification anti -spam:
Pour éviter cette vérification à l'avenir, Connectez vous ou inscrivez vous.
...