00001 #ifndef ERIS_ROOM_H
00002 #define ERIS_ROOM_H
00003
00004 #include <Eris/Types.h>
00005
00006 #include <sigc++/object.h>
00007 #include <sigc++/signal.h>
00008
00009 namespace Atlas { namespace Objects {
00010 namespace Operation {
00011 class Imaginary;
00012 class Talk;
00013 class Appearance;
00014 class Disappearance;
00015 }
00016 namespace Entity {
00017 class RootEntity;
00018 }
00019 }}
00020
00021 namespace Eris
00022 {
00023
00024
00025 class Person;
00026 class Lobby;
00027
00032 class Room : virtual public SigC::Object
00033 {
00034 public:
00035 virtual ~Room();
00036
00038 void say(const std::string &tk);
00039
00042 void emote(const std::string &em);
00043
00046 void leave();
00047
00052 Room* createRoom(const std::string &name);
00053
00055 const std::string& getName() const
00056 { return _name; }
00057
00059 StringList getPeople() const
00060 { return StringList(_people.begin(), _people.end()); }
00061
00063 StringList getRooms() const
00064 { return StringList(_subrooms.begin(), _subrooms.end()); }
00065
00069 const std::string& getID() const;
00070
00072 Lobby* getLobby() const {return _lobby;}
00073
00074 Person* getPersonByUID(const std::string& uid);
00075
00077 void sight(const Atlas::Objects::Entity::RootEntity &room);
00078
00081 SigC::Signal1<void, Room*> Entered;
00082
00085 SigC::Signal3<void, Room*, const std::string&, const std::string&> Talk;
00086
00088 SigC::Signal3<void, Room*, const std::string&, const std::string&> Emote;
00089
00093 SigC::Signal2<void, Room*, const std::string&> Appearance;
00095 SigC::Signal2<void, Room*, const std::string&> Disappearance;
00096
00098 SigC::Signal1<void, const StringSet&> Changed;
00099
00100 protected:
00101 friend class Lobby;
00102
00105 explicit Room(Lobby *l, const std::string &id = "");
00106
00109 void setup();
00110
00112 void notifyPersonSight(Person *p);
00113
00114
00115 void recvSoundTalk(const Atlas::Objects::Operation::Talk &tk);
00116 void recvAppear(const Atlas::Objects::Operation::Appearance &ap);
00117 void recvDisappear(const Atlas::Objects::Operation::Disappearance &dis);
00118 void recvSightImaginary(const Atlas::Objects::Operation::Imaginary &im);
00119
00120 std::string _id;
00121 Lobby* _lobby;
00122 bool _parted;
00123
00124 std::string _name,
00125 _creator;
00126 bool _initialGet;
00127
00128 StringSet _subrooms;
00129 StringSet _people,
00130 _pending;
00131 };
00132
00133 }
00134
00135 #endif