00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef _XMPP_MUC
00035 #define _XMPP_MUC
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 #include <ptclib/xmpp_c2s.h>
00042
00043 #if P_EXPAT
00044
00046
00047 namespace XMPP
00048 {
00049 namespace MUC
00050 {
00051 extern PString Namespace;
00052
00053 class User : public PObject
00054 {
00055 PCLASSINFO(User, PObject);
00056 public:
00057 static PString Namespace;
00058
00059 enum Role {
00060 None,
00061 Moderator,
00062 Participant,
00063 Visitor,
00064 Unknown = 999
00065 };
00066
00067 enum Affiliation {
00068 None_a,
00069 Owner,
00070 Admin,
00071 Member,
00072 Outcast,
00073 Unknown_a = 999
00074 };
00075
00076 PString m_Nick;
00077 Role m_Role;
00078 Affiliation m_Affiliation;
00079
00080 Comparison Compare(const PObject & obj) const;
00081 };
00082 PSORTED_LIST(Users, User);
00083
00084 class Room : public PObject
00085 {
00086 PCLASSINFO(Room, PObject);
00087 PDECLARE_SMART_NOTIFIEE;
00088 public:
00089 Room(C2S::StreamHandler * handler,
00090 const JID& jid,
00091 const PString& nick);
00092
00093 const User& GetUser() const { return m_User; }
00094 const Users& GetOtherUsers() const { return m_OtherUsers; }
00095
00096 virtual BOOL Enter();
00097 virtual BOOL Leave();
00098 virtual BOOL SendMessage(const PString& msg);
00099 virtual BOOL SendMessage(Message& msg);
00100
00101
00102 virtual void OnMessage(Message& msg);
00103 virtual void OnRoomJoined();
00104 virtual void OnRoomLeft();
00105 virtual void OnUserAdded(User& user);
00106 virtual void OnUserRemoved(User& user);
00107 virtual void OnUserChanged(User& user);
00108
00109 protected:
00110 PDECLARE_SMART_NOTIFIER(C2S::StreamHandler, Room, OnSessionReleased);
00111 PDECLARE_SMART_NOTIFIER(Message, Room, OnMessage);
00112 PDECLARE_SMART_NOTIFIER(Presence, Room, OnPresence);
00113
00114 C2S::StreamHandler * m_Handler;
00115 BareJID m_RoomJID;
00116 User m_User;
00117 Users m_OtherUsers;
00118
00119 PNotifierList m_MessageHandlers;
00120 PNotifierList m_RoomJoinedHandlers;
00121 PNotifierList m_RoomLeftHandlers;
00122 PNotifierList m_UserAddedHandlers;
00123 PNotifierList m_UserRemovedHandlers;
00124 PNotifierList m_UserChangedHandlers;
00125 };
00126
00127 }
00128 }
00129
00130
00131 #endif // P_EXPAT
00132
00133 #endif // _XMPP_MUC
00134
00135
00136
00137
00138