Room.h

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

Generated on Tue Mar 18 00:36:53 2008 for Eris by  doxygen 1.5.4