PTLib
Version 2.10.4
|
00001 /* 00002 * xmpp_muc.h 00003 * 00004 * Extensible Messaging and Presence Protocol (XMPP) 00005 * JEP-0045 Multi-User Chat 00006 * 00007 * Portable Windows Library 00008 * 00009 * Copyright (c) 2004 Reitek S.p.A. 00010 * 00011 * The contents of this file are subject to the Mozilla Public License 00012 * Version 1.0 (the "License"); you may not use this file except in 00013 * compliance with the License. You may obtain a copy of the License at 00014 * http://www.mozilla.org/MPL/ 00015 * 00016 * Software distributed under the License is distributed on an "AS IS" 00017 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 00018 * the License for the specific language governing rights and limitations 00019 * under the License. 00020 * 00021 * The Original Code is Portable Windows Library. 00022 * 00023 * The Initial Developer of the Original Code is Post Increment 00024 * 00025 * Contributor(s): ______________________________________. 00026 * 00027 * $Revision: 25387 $ 00028 * $Author: rjongbloed $ 00029 * $Date: 2011-03-22 22:51:09 -0500 (Tue, 22 Mar 2011) $ 00030 */ 00031 00032 #ifndef PTLIB_XMPP_MUC_H 00033 #define PTLIB_XMPP_MUC_H 00034 00035 #ifdef P_USE_PRAGMA 00036 #pragma interface 00037 #endif 00038 00039 #include <ptclib/xmpp_c2s.h> 00040 00041 #if P_EXPAT 00042 00044 00045 namespace XMPP 00046 { 00047 namespace MUC 00048 { 00049 extern const PCaselessString & NamespaceTag(); 00050 00051 class User : public PObject 00052 { 00053 PCLASSINFO(User, PObject); 00054 public: 00055 User(); 00056 ~User(); 00057 00058 static const PCaselessString & NamespaceTag(); 00059 00060 enum Role { 00061 None, 00062 Moderator, 00063 Participant, 00064 Visitor, 00065 Unknown = 999 00066 }; 00067 00068 enum Affiliation { 00069 None_a, 00070 Owner, 00071 Admin, 00072 Member, 00073 Outcast, 00074 Unknown_a = 999 00075 }; 00076 00077 PString m_Nick; 00078 Role m_Role; 00079 Affiliation m_Affiliation; 00080 00081 Comparison Compare(const PObject & obj) const; 00082 }; 00083 PSORTED_LIST(Users, User); 00084 00085 class Room : public PObject 00086 { 00087 PCLASSINFO(Room, PObject); 00088 PDECLARE_SMART_NOTIFIEE; 00089 public: 00090 Room(C2S::StreamHandler * handler, 00091 const JID& jid, 00092 const PString& nick); 00093 00094 const User& GetUser() const { return m_User; } 00095 const Users& GetOtherUsers() const { return m_OtherUsers; } 00096 00097 virtual PBoolean Enter(); 00098 virtual PBoolean Leave(); 00099 virtual PBoolean SendMessage(const PString& msg); 00100 virtual PBoolean SendMessage(Message& msg); 00101 00102 // Event methods 00103 virtual void OnMessage(Message& msg); 00104 virtual void OnRoomJoined(); 00105 virtual void OnRoomLeft(); 00106 virtual void OnUserAdded(User& user); 00107 virtual void OnUserRemoved(User& user); 00108 virtual void OnUserChanged(User& user); 00109 00110 protected: 00111 PDECLARE_SMART_NOTIFIER(C2S::StreamHandler, Room, OnSessionReleased); 00112 PDECLARE_SMART_NOTIFIER(Message, Room, OnMessage); 00113 PDECLARE_SMART_NOTIFIER(Presence, Room, OnPresence); 00114 00115 C2S::StreamHandler * m_Handler; 00116 BareJID m_RoomJID; 00117 User m_User; 00118 Users m_OtherUsers; 00119 00120 PNotifierList m_MessageHandlers; 00121 PNotifierList m_RoomJoinedHandlers; 00122 PNotifierList m_RoomLeftHandlers; 00123 PNotifierList m_UserAddedHandlers; 00124 PNotifierList m_UserRemovedHandlers; 00125 PNotifierList m_UserChangedHandlers; 00126 }; 00127 00128 } // namespace MUC 00129 } // namespace XMPP 00130 00131 00132 #endif // P_EXPAT 00133 00134 #endif // PTLIB_XMPP_MUC_H 00135 00136 // End of File ///////////////////////////////////////////////////////////////