From 961668d420d2241541f4facc64265932c66ad81c Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Wed, 17 Aug 2011 21:21:37 -0700 Subject: Add guide for sending a message and then disconnecting. --- docs/api/basexmpp.rst | 8 +++ docs/api/xmlstream.rst | 8 +++ docs/features.rst | 2 + docs/getting_started/echobot.rst | 126 +----------------------------------- docs/getting_started/sendlogout.rst | 95 ++++++++++++++++++++++++++- docs/index.rst | 14 ++-- docs/plugin_arch.rst | 2 + 7 files changed, 123 insertions(+), 132 deletions(-) create mode 100644 docs/api/basexmpp.rst create mode 100644 docs/api/xmlstream.rst create mode 100644 docs/features.rst create mode 100644 docs/plugin_arch.rst (limited to 'docs') diff --git a/docs/api/basexmpp.rst b/docs/api/basexmpp.rst new file mode 100644 index 00000000..841df3db --- /dev/null +++ b/docs/api/basexmpp.rst @@ -0,0 +1,8 @@ +======== +basexmpp +======== + +.. module:: sleekxmpp.basexmpp + +.. autoclass:: BaseXMPP + :members: diff --git a/docs/api/xmlstream.rst b/docs/api/xmlstream.rst new file mode 100644 index 00000000..7835bf57 --- /dev/null +++ b/docs/api/xmlstream.rst @@ -0,0 +1,8 @@ +========= +xmlstream +========= + +.. module:: sleekxmpp.xmlstream + +.. autoclass:: XMLStream + :members: diff --git a/docs/features.rst b/docs/features.rst new file mode 100644 index 00000000..4d93d5c3 --- /dev/null +++ b/docs/features.rst @@ -0,0 +1,2 @@ +How to Use Stream Features +========================== diff --git a/docs/getting_started/echobot.rst b/docs/getting_started/echobot.rst index 9defca6b..053a76f2 100644 --- a/docs/getting_started/echobot.rst +++ b/docs/getting_started/echobot.rst @@ -1,3 +1,5 @@ +.. _echobot: + =============================== SleekXMPP Quickstart - Echo Bot =============================== @@ -386,127 +388,3 @@ can also be found in the SleekXMPP `examples directory `_ + or join the chat room at `sleek@conference.jabber.org + `_. A common use case for SleekXMPP is to send one-off messages from -time to time. +time to time. For example, one use case could be sending out a notice when +a shell script finishes a task. + +We will create our one-shot bot based on the pattern explained in :ref:`echobot`. To +start, we create a client class based on :class:`ClientXMPP ` and +register a handler for the :term:`session_start` event. We will also accept parameters +for the JID that will receive our message, and the string content of the message. + +.. code-block:: python + + import sleekxmpp + + + class SendMsgBot(sleekxmpp.ClientXMPP): + + def __init__(self, jid, password, recipient, msg): + super(SendMsgBot, self).__init__(jid, password) + + self.recipient = recipient + self.msg = msg + + self.add_event_handler('session_start', self.start) + + def start(self, event): + self.send_presence() + self.get_roster() + +Note that as in :ref:`echobot`, we need to include send an initial presence and request +the roster. Next, we want to send our message, and to do that we will use :meth:`send_message `. + +.. code-block:: python + + def start(self, event): + self.send_presence() + self.get_roster() + + self.send_message(mto=self.recipient, mbody=self.msg) + +Finally, we need to disconnect the client using :meth:`disconnect `. +Now, sent stanzas are placed in a queue to pass them to the send thread. If we were to call +:meth:`disconnect ` without any parameters, then it is possible +for the client to disconnect before the send queue is processed and the message is actually +sent on the wire. To ensure that our message is processed, we use +:meth:`disconnect(wait=True) `. + +.. code-block:: python + + def start(self, event): + self.send_presence() + self.get_roster() + + self.send_message(mto=self.recipient, mbody=self.msg) + + self.disconnect(wait=True) + +.. warning:: + + If you happen to be adding stanzas to the send queue faster than the send thread + can process them, then :meth:`disconnect(wait=True) ` + will block and not disconnect. + +Final Product +------------- + +.. compound:: + + The final step is to create a small runner script for initialising our ``SendMsgBot`` class and adding some + basic configuration options. By following the basic boilerplate pattern in :ref:`echobot`, we arrive + at the code below. To experiment with this example, you can use: + + .. code-block:: sh + + python send_client.py -d -j oneshot@example.com -t someone@example.net -m "This is a message" + + which will prompt for the password and then log in, send your message, and then disconnect. To test, open + your regular IM client with the account you wish to send messages to. When you run the ``send_client.py`` + example and instruct it to send your IM client account a message, you should receive the message you + gave. If the two JIDs you use also have a mutual presence subscription (they're on each other's buddy lists) + then you will also see the ``SendMsgBot`` client come online and then go offline. + +.. include:: ../../examples/send_client.py + :literal: diff --git a/docs/index.rst b/docs/index.rst index 95e49743..5da389b9 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -67,7 +67,7 @@ SleekXMPP's design goals and philosphy are: Getting Started (with Examples) ------------------------------- .. toctree:: - :maxdepth: 2 + :maxdepth: 1 getting_started/echobot getting_started/sendlogout @@ -82,27 +82,29 @@ Getting Started (with Examples) Tutorials, FAQs, and How To Guides ---------------------------------- .. toctree:: - :maxdepth: 2 + :maxdepth: 1 xeps xmpp_tdg create_plugin + features sasl handlersmatchers Plugin Guides ~~~~~~~~~~~~~ .. toctree:: - :maxdepth: 2 + :maxdepth: 1 guide_xep_0030 SleekXMPP Architecture and Design --------------------------------- .. toctree:: - :maxdepth: 2 + :maxdepth: 3 - architecture.rst + architecture + plugin_arch API Reference ------------- @@ -111,6 +113,8 @@ API Reference event_index api/clientxmpp + api/basexmpp + api/xmlstream Additional Info --------------- diff --git a/docs/plugin_arch.rst b/docs/plugin_arch.rst new file mode 100644 index 00000000..0141b793 --- /dev/null +++ b/docs/plugin_arch.rst @@ -0,0 +1,2 @@ +Plugin Architecture +=================== -- cgit v1.2.3