eris  1.4.0
A WorldForge client library.
Room.h
1 #ifndef ERIS_ROOM_H
2 #define ERIS_ROOM_H
3 
4 #include "Router.h"
5 
6 #include <sigc++/trackable.h>
7 #include <sigc++/signal.h>
8 
9 #include <vector>
10 #include <unordered_map>
11 #include <string>
12 #include <memory>
13 
14 namespace Eris
15 {
16 
17 // forward decls
18 class Person;
19 class Lobby;
20 
25 class Room : public sigc::trackable, public Router
26 {
27 public:
28 
31  explicit Room(Lobby *l, const std::string& id);
32 
33  ~Room() override;
34 
36  void say(const std::string &tk);
37 
40  void emote(const std::string &em);
41 
44  void leave();
45 
50  Room* createRoom(const std::string &name);
51 
53  std::string getName() const
54  {
55  return m_name;
56  }
57 
58  std::string getTopic() const
59  {
60  return m_topic;
61  }
62 
64  std::vector<Person*> getPeople() const;
65 
67  std::vector<Room*> getRooms() const
68  {
69  return m_subrooms;
70  }
71 
74  std::string getId() const
75  {
76  return m_roomId;
77  }
78 
79  Person* getPersonByUID(const std::string& uid);
80 
81 // signals
84  sigc::signal<void, Room*> Entered;
85 
88  sigc::signal<void, Room*, Person*, const std::string&> Speech;
89 
91  sigc::signal<void, Room*, Person*, const std::string&> Emote;
92 
96  sigc::signal<void, Room*, Person*> Appearance;
97 
99  sigc::signal<void, Room*, Person*> Disappearance;
100 
101 
102 protected:
103  friend class Lobby;
104 
105  typedef std::unordered_map<std::string, std::unique_ptr<Person>> IdPersonMap;
106 
107 
108  RouterResult handleOperation(const Atlas::Objects::Operation::RootOperation& op) override;
109  void handleSoundTalk(Person* p, const std::string& speech);
110  void handleEmote(Person* p, const std::string& desc);
111 
112 
113  std::string m_roomId;
114 private:
116  void checkEntry();
117 
118  void sight(const Atlas::Objects::Entity::RootEntity &room);
119 
120  void appearance(const std::string& personId);
121  void disappearance(const std::string& personId);
122 
123  // callback slot when Lobby recives SIGHT(person)
124  void notifyPersonSight(Person *p);
125 
126  std::string m_name;
127  std::string m_topic;
128  bool m_entered;
129  Lobby* m_lobby;
130 
131  std::unordered_map<std::string, Person*> m_members;
132 
133  std::vector<Room*> m_subrooms;
134 };
135 
136 }
137 
138 #endif
Room(Lobby *l, const std::string &id)
Definition: Room.cpp:29
std::string getId() const
Definition: Room.h:74
sigc::signal< void, Room *, Person *, const std::string & > Emote
Definition: Room.h:91
std::string getName() const
Obtain the human-readable name of this room.
Definition: Room.h:53
void emote(const std::string &em)
Definition: Room.cpp:69
std::vector< Room * > getRooms() const
Obtain a list of rooms within this room.
Definition: Room.h:67
sigc::signal< void, Room *, Person * > Disappearance
Similarly, emitted when the specifed person leaves the room.
Definition: Room.h:99
Definition: Account.cpp:33
sigc::signal< void, Room *, Person * > Appearance
Definition: Room.h:96
sigc::signal< void, Room * > Entered
Definition: Room.h:84
sigc::signal< void, Room *, Person *, const std::string & > Speech
Definition: Room.h:88
void say(const std::string &tk)
Send a piece of text to this room.
Definition: Room.cpp:48
void leave()
Definition: Room.cpp:92
std::vector< Person * > getPeople() const
obtain an array of pointers to everyone in this room
Definition: Room.cpp:141
Room * createRoom(const std::string &name)
Definition: Room.cpp:112