# Basic message routing and delivery [Client] Romeo jid: user@localhost password: password [Client] Juliet jid: juliet@localhost password: password [Client] Juliet's phone jid: juliet@localhost password: password resource: mobile --------- # Act 1, scene 1 # The clients connect Romeo connects Juliet connects Juliet's phone connects # Romeo publishes his presence. Juliet has not, and so does not receive presence. Romeo sends: <presence/> Romeo receives: <presence from="${Romeo's full JID}" /> # Romeo sends a message to Juliet's full JID Romeo sends: <message to="${Juliet's full JID}" type="chat"> <body>Hello Juliet!</body> </message> Juliet receives: <message to="${Juliet's full JID}" from="${Romeo's full JID}" type="chat"> <body>Hello Juliet!</body> </message> # Romeo sends a message to Juliet's phone Romeo sends: <message to="${Juliet's phone's full JID}" type="chat"> <body>Hello Juliet, on your phone.</body> </message> Juliet's phone receives: <message to="${Juliet's phone's full JID}" from="${Romeo's full JID}" type="chat"> <body>Hello Juliet, on your phone.</body> </message> # Scene 2 # This requires the server to support offline messages (which is optional). # Romeo sends a message to Juliet's bare JID. This is not immediately delivered, as she # has not published presence on either of her resources. Romeo sends: <message to="juliet@localhost" type="chat"> <body>Hello Juliet, are you there?</body> </message> # Juliet sends presence on her phone, and should receive the message there Juliet's phone sends: <presence/> Juliet's phone receives: <presence/> Juliet's phone receives: <message from="${Romeo's full JID}" type="chat"> <body>Hello Juliet, are you there?</body> <delay xmlns='urn:xmpp:delay' from='localhost' stamp='{scansion:any}' /> </message> # Romeo sends another bare-JID message, it should be delivered # instantly to Juliet's phone Romeo sends: <message to="juliet@localhost" type="chat"> <body>Oh, hi!</body> </message> Juliet's phone receives: <message from="${Romeo's full JID}" type="chat"> <body>Oh, hi!</body> </message> # Juliet's laptop goes online, but with a negative priority Juliet sends: <presence> <priority>-1</priority> </presence> Juliet receives: <presence from="${Juliet's full JID}"> <priority>-1</priority> </presence> Juliet's phone receives: <presence from="${Juliet's full JID}"> <priority>-1</priority> </presence> # Again, Romeo sends a message to her bare JID, but it should # only get delivered to her phone: Romeo sends: <message to="juliet@localhost" type="chat"> <body>How are you?</body> </message> Juliet's phone receives: <message from="${Romeo's full JID}" type="chat"> <body>How are you?</body> </message> # Romeo sends direct to Juliet's full JID, and she should receive it Romeo sends: <message to="${Juliet's full JID}" type="chat"> <body>Are you hiding?</body> </message> Juliet receives: <message from="${Romeo's full JID}" type="chat"> <body>Are you hiding?</body> </message> # Juliet publishes non-negative presence Juliet sends: <presence/> Juliet receives: <presence from="${Juliet's full JID}"/> Juliet's phone receives: <presence from="${Juliet's full JID}"/> # And now Romeo's bare JID messages get delivered to both resources # (server behaviour may vary here) Romeo sends: <message to="juliet@localhost" type="chat"> <body>There!</body> </message> Juliet receives: <message from="${Romeo's full JID}" type="chat"> <body>There!</body> </message> Juliet's phone receives: <message from="${Romeo's full JID}" type="chat"> <body>There!</body> </message> # The End Romeo disconnects Juliet disconnects Juliet's phone disconnects