I have used the following code, which is working until I called it multiple time: class ImapProtocol(twisted.mail.imap4.IMAP4Client): ... implementation ... class ImapFactory(twisted.internet.protocol.ClientFactory): def __init__(self, account): self.account = account self.deferred = twisted.internet.defer.Deferred() self.protocol = ImapProtocol def clientConnectionFailed(self, connection, reason): """ Called when the client has failed to connect """ self.deferred.errback(reason) class ImapClient(gobject.GObject): def __init__(self, account): super(ImapClient, self).__init__() self.account = account self.host = self.account.get_server_address() self.port = self.account.get_server_port() self.ssl = self.account.get_use_ssl() def got_mailbox_list(self, result): twisted.internet.reactor.stop() def handle_error(self, error): twisted.internet.reactor.stop() def get_mailbox_list(self): """ Get the list of existing mailboxes. """ imapfactory = ImapFactory(self.account, self.LIST_MAILBOX) imapfactory.deferred.addCallback(self.got_mailbox_list) imapfactory.deferred.addErrback(self.handle_error) if self.ssl: # Using SSL for encrypted connections contextfactory = twisted.internet.ssl.ClientContextFactory() twisted.internet.reactor.connectSSL(self.host, self.port, imapfactory, contextfactory, 4) else: # Server doesn't require SSL twisted.internet.reactor.connectTCP(self.host, self.port, imapfactory, 4) twisted.internet.reactor.run() I call it in the following way: imap_client = imapclient.ImapClient(account) imap_client.get_mailbox_list() If I call it only once, it executes successfully, but if I call it twice it get blocks and never finishes... So how can I start the reactor and use the connectSSL/connectTCP methods multiple times? How to add new clients to an existing reactor? On Friday 18 June 2010 16:01:02 exarkun@twistedmatrix.com wrote:
On 10:36 am, bszabolcs@gmail.com wrote:
Hy,
Can somebody send me a small example how to use multiple clients at same time? For example to connect to 3 different IMAP server. I need this because I'm working on an email client engine. I can connect to POP/IMAP/SMTP server to download and send messages, but I have created those methods separated, and each time when I check for new messages or send a message I use reactor.run() and reactor.stop(). But calling it multiple times is a problem.
Why?
So I need something: - when I press button1, the application checks for new messages on POP server. - when I press button2, the application checks for new messages on IMAP server.
How about:
def onbutton1(self): checkPOP()
def onbutton2(self): checkIMAP()
I know how to check for messages on IMAP/POP server, but I don't know how to do it periodically with twisted...
Periodically as in "once every N seconds"? Check out reactor.callLater or twisted.internet.task.LoopingCall.
Jean-Paul
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python