"""
This code is released under the MIT license. The full package
is available at http://achievewith.us/svn/public/examples/xmppclients/
"""

import base
import sys
from jabber import jabber
from threading import Thread

class JabberPyBot(base.JabberBot):
    def __init__(self, **kw):
        base.JabberBot.__init__(self, **kw)
        self.connection = jabber.Client(host=self.server)
        self.connection.connect()
        self.connection.registerHandler("message", self.receive)
        # Handlers can be registered for many message types.  For instance:
        # self.connection.registerHandler("presence", self.receive)
        self.connection.auth(self.username,
                             self.password,
                             "JabberPyBot")
        self.connection.sendInitPresence()

        # We need to spawn a thread to periodically receive messages
        self.receiverThread = Thread(target=self.receiver)
        self.receiverThread.start()

    def send(self, user, message):
        message = jabber.Message(user, message)
        message.setType("chat")
        self.connection.send(message)

    def receive(self, connection, message):
        # Grab the sender and payload from chat messages
        # and pass them on to the processMessage method
        self.processMessage(message.getFrom(),
                            message.getBody())
        
    def receiver(self):
        while True:
            # Process received messages.  Wait up to five seconds
            # before returning if there are no queued messages.
            self.connection.process(5)

if __name__ == "__main__":
    base.run_bot(JabberPyBot)