Added by Sergej, last edited by Maciek Ruckgaber on Mar 10, 2008  (view change)

Labels

 
Zend_Jabber

Zend Framework: Zend_Jabber Component Proposal

Proposed Component Name Zend_Jabber
Developer Notes http://framework.zend.com/wiki/display/ZFDEV/Zend_Jabber
Proposers Maciek Ruckgaber
Sergej Andrejev
Revision 1.0 - 21 July 2007: Ready for comments (wiki revision: 33)

Table of Contents

1. Overview

Zend_Jabber is a component allowing communication in Jabber/XMPP network.

2. References

3. Component Requirements, Constraints, and Acceptance Criteria

  • This component will support all features required XEP-0073 ("Basic IM Protocol Suite")
  • This component will not support features needed for back compability
  • This component may be configured so that it will log sent/received messages
  • This component may need a log file
  • This component will not have a configuration file
  • This component will be configured through parameters

4. Dependencies on Other Framework Components

  • Zend_Exception

5. Theory of Operation

This component will allow to create send XMPP stanzas using Zend_Jabber class methods. There will also be two ways of receiving messages. User will be able to specify to wait until the response arrives or he can register a callback function wich will be executed when the response arrived. Look at a google code repository for source code.

6. Milestones / Tasks

  • Milestone 1: Existing code will be ported to Zend Framework
  • Milestone 2: API will be redefined as required
  • Milestone 3: Working prototype checked into the incubator
  • Milestone 4: Write unit tests for socket requests
  • Milestone 5: Initial documentation exists.

7. Class Index

Also those are not all classes. XMPP protocol is huge. These classes will be created in the first milestone. Look at google code repository for how things really works.

  • Zend_Jabber
  • Zend_Jabber_Connection
  • Zend_Jabber_AddressBook
  • Zend_Jabber_AddressBook_Group
  • Zend_Jabber_AddressBook_Item
  • Zend_Jabber_User
  • Zend_Jabber_Stanza_Abstract
  • Zend_Jabber_Stanza_Null
  • Zend_Jabber_Stanza_Unknown
  • Zend_Jabber_Response_Abstract
  • Zend_Jabber_Response_Presence
  • Zend_Jabber_Response_Iq_Abstract
  • Zend_Jabber_Response_Iq_Error
  • Zend_Jabber_Response_Iq_Bind_Abstract
  • Zend_Jabber_Response_Iq_Bind_Error
  • Zend_Jabber_Response_Iq_Bind_Result
  • Zend_Jabber_Response_Iq_Register_Abstract
  • Zend_Jabber_Response_Iq_Register_Error
  • Zend_Jabber_Response_Iq_Register_Result
  • Zend_Jabber_Response_Iq_Roster_Abstract
  • Zend_Jabber_Response_Iq_Roster_Error
  • Zend_Jabber_Response_Iq_Roster_Result
  • Zend_Jabber_Response_Iq_Roster_Set
  • Zend_Jabber_Response_Iq_Session_Abstract
  • Zend_Jabber_Response_Iq_Session_Error
  • Zend_Jabber_Response_Iq_Session_Result
  • Zend_Jabber_Response_Message_Abstract
  • Zend_Jabber_Response_Message_Chat
  • Zend_Jabber_Response_Auth_Abstract
  • Zend_Jabber_Response_Auth_Failure
  • Zend_Jabber_Response_Auth_Success
  • Zend_Jabber_Request_Abstract
  • Zend_Jabber_Request_Auth
  • Zend_Jabber_Request_Iq_Abstract
  • Zend_Jabber_Request_Iq_Abstract
  • Zend_Jabber_Request_Iq_Bind_Abstract
  • Zend_Jabber_Request_Iq_Bind_Set
  • Zend_Jabber_Request_Iq_Register_Abstract
  • Zend_Jabber_Request_Iq_Register_Get
  • Zend_Jabber_Request_Iq_Register_Set
  • Zend_Jabber_Request_Iq_Roster_Abstract
  • Zend_Jabber_Request_Iq_Roster_Get
  • Zend_Jabber_Request_Iq_Roster_Set
  • Zend_Jabber_Request_Iq_Session_Abstract
  • Zend_Jabber_Request_Iq_Session_Set
  • Zend_Jabber_Request_Message_Abstract
  • Zend_Jabber_Request_Message_Set
  • Zend_Jabber_Request_Presence_Abstract
  • Zend_Jabber_Request_Presence_Normal
  • Zend_Jabber_Request_Presence_Subscribe
  • Zend_Jabber_Request_Presence_Unsubscribe

8. Use Cases

UC-01

Send a message to anoother jabber user:

UC-02

Receive message and display it using callback function:

UC-03

Display address book:

9. Class Skeletons

Zend_Jabber_Exception
Zend_Jabber
Zend_Jabber_Connection
Zend_Jabber_User
Zend_Jabber_AddressBook
Zend_Jabber_AddressBook_Group
Zend_Jabber_AddressBook_Item
Zend_Jabber_Stanza_Abstract

UML diagrams

Main classes. These classes will be most of the time used by user

Stanza

Detaild Iq request UML diagram

Detaild Iq response UML diagram

Detaild Message request UML diagram

Detaild Message response UML diagram

Detaild Presence request UML diagram

Detaild Presence response UML diagram

interesting

Very interesting i like it.

Is there a need for som many classes - e.g., do different messages have different behaviors/properties warranting different classes?

Well, actually, it is not a vital requirement. In the worst case I could do all this with no OOP at all, but the idea was that all messages are different thought requiring different classes.

Posted by Sergej at Aug 06, 2007 13:29

Hi,

Is there any implemented code that I can try?

BTW I also think that unless there is a very good reason to have so many classes, it's not a good idea, and would have a bad effect on performance. If request and response messages have the same general structure, I would suggest dropping the unique message-type subclasses.

Then again I don't know the XMPP protocol very well so it might be necessary.

Hi,
I'm currently redesigning the API for the extension. There will be many changes, and yes, I'm also concerned about the number of classes. I hope to have something published here by next week.

As soon as I publish the new API, would be great to have your comments.

Best regards.

Hi,

is there a method to entering a conference room?
Will this be implemented? Or can you implement this?

best regards

Hey, what's the status on this component? It would be really great opportunity for ZF to have that functionality, it would allow for enormous amount of functionality with web apps

Since 'Jabber' has given way to XMPP the component should be renamed Zend_Xmpp. If it does not function as an XMPP server then it should be renamed Zend_Xmpp_Client.

Posted by P at Oct 03, 2008 10:25