Eris 1.3.19
|
00001 #ifndef ERIS_ROOM_H 00002 #define ERIS_ROOM_H 00003 00004 #include <Eris/Router.h> 00005 00006 #include <sigc++/trackable.h> 00007 #include <sigc++/signal.h> 00008 00009 #include <vector> 00010 #include <map> 00011 #include <string> 00012 00013 namespace Eris 00014 { 00015 00016 // forward decls 00017 class Person; 00018 class Lobby; 00019 00024 class Room : public sigc::trackable, public Router 00025 { 00026 public: 00027 virtual ~Room(); 00028 00030 void say(const std::string &tk); 00031 00034 void emote(const std::string &em); 00035 00038 void leave(); 00039 00044 Room* createRoom(const std::string &name); 00045 00047 std::string getName() const 00048 { 00049 return m_name; 00050 } 00051 00052 std::string getTopic() const 00053 { 00054 return m_topic; 00055 } 00056 00058 std::vector<Person*> getPeople() const; 00059 00061 std::vector<Room*> getRooms() const 00062 { 00063 return m_subrooms; 00064 } 00065 00068 std::string getId() const 00069 { 00070 return m_roomId; 00071 } 00072 00073 Person* getPersonByUID(const std::string& uid); 00074 00075 // signals 00078 sigc::signal<void, Room*> Entered; 00079 00082 sigc::signal<void, Room*, Person*, const std::string&> Speech; 00083 00085 sigc::signal<void, Room*, Person*, const std::string&> Emote; 00086 00090 sigc::signal<void, Room*, Person*> Appearance; 00091 00093 sigc::signal<void, Room*, Person*> Disappearance; 00094 00095 00096 protected: 00097 friend class Lobby; 00098 00099 typedef std::map<std::string, Person*> IdPersonMap; 00100 00103 explicit Room(Lobby *l, const std::string& id); 00104 00105 virtual RouterResult handleOperation(const Atlas::Objects::Operation::RootOperation& op); 00106 void handleSoundTalk(Person* p, const std::string& speech); 00107 void handleEmote(Person* p, const std::string& desc); 00108 00109 00110 std::string m_roomId; 00111 private: 00113 void checkEntry(); 00114 00115 void sight(const Atlas::Objects::Entity::RootEntity &room); 00116 00117 void appearance(const std::string& personId); 00118 void disappearance(const std::string& personId); 00119 00120 // callback slot when Lobby recives SIGHT(person) 00121 void notifyPersonSight(Person *p); 00122 00123 std::string m_name; 00124 std::string m_topic; 00125 bool m_entered; 00126 Lobby* m_lobby; 00127 00128 IdPersonMap m_members; 00129 00130 std::vector<Room*> m_subrooms; 00131 }; 00132 00133 } 00134 00135 #endif