I want to use twisted (and StarPy which is a protocol implementation for asterisk ami) to connect to an asterisk server. The application initiates a outgoing fax there. I found some hints on my problem, but I cannot find out how to handle this correctly.
The first fax is sent out correctly.
Problem is, if I call twisted for the
second time, the application keeps
hanging in main loop.
I know I may NOT do this like here:
from starpy import manager
from twisted.internet import reactor
def main():
f = manager.AMIFactory(cUser, cPass)
print "Login"
df = f.login(cServer, cPort)
def onLogin(protocol):
print "Logoff again"
df = protocol.logoff()
def onLogoff( result ):
print "Logoff erfolgt"
reactor.stop()
return df.addCallbacks( onLogoff, onLogoff )
def onFailure( reason ):
print "Login failed"
print reason.getTraceback()
df.addCallbacks( onLogin, onFailure )
return df
if __name__ == "__main__":
reactor.callWhenRunning( main )
reactor.run(installSignalHandlers=0)
print "runned the first time"
reactor.callWhenRunning( main )
reactor.run(installSignalHandlers=0)
print "will never reach this point"
I simplified the code – it does nothing than login + logoff again. It will never return from the second reactor.run() call.
How is this done correctly? I’m stuck here – thanks in advance.
Best Regards,
Florian.
Thanks for your answers, I haven’t implemented a solution right now but I know how I could do that now…
Here a short summary of things I learned.
First, in short – the problems I had with twisted:
In my concept I solved these problems:
I found an example here: http://oubiwann.blogspot.com/2008/06/async-batching-with-twisted-walkthrough.html
I needed a lot of re-thinking but as soon as you get it it looks really easy.
Thanks to iny and Jean-Paul Calderone for your help.