Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pyxmpp: quick tutorial for creating a muc client?

I'm attempting to write a quick load-test script for our ejabberd cluster that simply logs into a chat room, posts a couple of random messages, then exits.

We had attempted this particular test with tsung, but according to the authors, the muc functionality did not make it into this release.

pyxmpp seems to have this functionality, but darned if I can figure out how to make it work. Here's hoping someone has a quick explanation of how to build the client and join/post to the muc.

Thanks!

like image 578
Lysdexia Avatar asked Mar 02 '10 15:03

Lysdexia


1 Answers

Hey I stumbled over your question a few times, while trying the same thing. Here is my answer:

Using http://pyxmpp.jajcus.net/svn/pyxmpp/trunk/examples/echobot.py as a quickstart, all you have to do is import the MUC-Stuff

from pyxmpp.jabber.muc import MucRoomState, MucRoomManager

And once your Client is connected, you can connect to your room:

def session_started(self): 
    """Handle session started event. May be overriden in derived classes. 
    This one requests the user's roster and sends the initial presence.""" 
    print u'SESSION STARTED'
    self.request_roster() 
    p=Presence() 
    self.stream.send(p) 
    print u'ConnectToParty'
    self.connectToMUC()

def connectToMUC(self):
    self.roomManager = MucRoomManager(self.stream);
    self.roomHandler = MucRoomHandler()
    self.roomState = self.roomManager.join(
        room=JID('[email protected]'),
        nick='PartyBot',
        handler=self.roomHandler, 
        history_maxchars=0,
        password = None)
    self.roomManager.set_handlers()

To send a message, all you have to do is call self.roomState.send_message("Sending this Message")

To do stuff, inherit from MucRoomHandler and react on events. Notice the "set_handlers()" to roomManager though, it's is important, otherwise callbacks will not be called..

like image 157
Richy Avatar answered Nov 11 '22 21:11

Richy