tags:

views:

85

answers:

2

I am learning Twisted, especially its XMPP side. I am writing a Jabber client which must send and recieve messages. Here is my code: http://pastebin.com/m71225776 As I understood the workflow is like this: 1. I create handlers for important network events (i.e. connecting, message recieving, disconnecting, etc) 2. I run reactor. At this moment starts the loop which is waiting for any event. When event happens it is passed to specified handler. The problem is in sending messages. Sending is not associated with any network event so I can't create handler for it. Also I can't do anything with reactor until its loop stops working. But the goal is "To send messages when I need and recieve data when it comes". I think am not fully understand philosophy of twisted, so give me a right way please.

+1  A: 

You just need to find what events will trigger sending a message.

For example, in a GUI client, sending happens when the user types something. You should integrate with a graphics toolkit, using the Twisted reactor for its mainloop (there's a Gtk+ Twisted reactor for example). Then you'll be able to listen for some interface events, like the user typing enter in a text area; and you'll be able to react to that event by sending a message.

Other sources of events could be Twisted timers, any kind of protocol, including IPC, webhooks

Incidentally, if you need a higher-level library for XMPP with Twisted, have a look at Wokkel.

Tobu
A: 

More accurately, you can't do anything with the reactor until it calls one of your callbacks. You don't call twisted, twisted calls you.

One way to experiment is to have one of your setup handlers which you know will be called (or just test code put in after you start the reactor) call callLater() or loopingCall().

Karl Anderson