170 likes | 325 Views
User Interface; Graphical User Interface;Jabber XMPP-Core. Communicating between two presence-aware entities. XML Stream Starts with <stream> Ends with </stream> Stream is unidirectional; but two streams allowed over one TCP connection initial stream and response stream XML Stanza
E N D
Communicating between two presence-aware entities • XML Stream • Starts with <stream> • Ends with </stream> • Stream is unidirectional; but two streams allowed over one TCP connection • initial stream and response stream • XML Stanza • the stuff (packets) of the stream • presence, message, iq are the only upper-level types
A basic session C: <?xml version='1.0'?> <stream:stream to='example.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> S: <?xml version='1.0'?> <stream:stream from='example.com' id='someid' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> ... encryption, authentication, and resource binding ... C: <message from='juliet@example.com' to='romeo@example.net' xml:lang='en'> C: <body>Art thou not Romeo, and a Montague?</body> C: </message> S: <message from='romeo@example.net' to='juliet@example.com' xml:lang='en'> S: <body>Neither, fair saint, if either thee dislike.</body> S: </message> C: </stream:stream> S: </stream:stream>
A session gone bad C: <?xml version='1.0'?> <stream:stream to='example.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> S: <?xml version='1.0'?> <stream:stream from='example.com' id='someid' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> ... encryption, authentication, and resource binding ... C: <message xml:lang='en'> <body>Bad XML, no closing body tag! </message> S: <stream:error> <xml-not-well-formed xmlns='urn:ietf:params:xml:ns:xmpp-streams'/> </stream:error> S: </stream:stream>
Email, Instant messages, chat • Email: send message based on name • must know name, but can guess it. • IM: can only send message to buddy • can have both sides agree to be buddies. • Chat: can only send message to “room” • must connect to “room” to get messages Asynchronous like “computation” Semi-synchronous like “interactive” Semi-synchronous like “parallelism”
Big Idea: Abstraction • “Any problem in computer programming can be solved by adding a level of abstraction” • “Performance can be improved in programs by removing a level of abstraction” • Indirection used to support abstraction
Big Idea for IM: Indirection • “Publish and subscribe” • Publish “presence” with a server • Subscribe to relevant published entities • Once when registering and whenever logon • “Interact” • direct communication • (mediated) indirect communication
Hard vs Soft State • Hard State: server knows buddy list • can send status of each buddy to requester • Soft State: client knows buddy list • can ask status of each buddy • But indirection always requires hard state
Instant Messaging • Clients register with server • When client logs on, others subscribe • Client sends message to server, server forwards to recipient • can only send messages to registered/published recipients • Supported operations: • Register, Unregister, Logon, Logoff, Send/Rec, Add/Remove Buddy, etc.
Many disconnected pieces • Client-Server protocol (messier than just this) • Client code • User Interface Code • Semantics of interaction • e.g. send only to published & subscribed entities
User Interface • Want to disconnect application from user interface • Application should work independent of UI • Character display and keyboard or fancier • main difference was number of columns and lines • Graphical user interface • make big assumptions about h/w abilities • not really independent of GUI
Separating events from handlers • Register handler for event • Two different types of events: • within application • within window system. • Events connect the two pieces but are developed separately.
Separation of GUI description • Glade
No semantic content • why bad? • no error correction