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
14namespace Eris
15{
16
17// forward decls
18class Person;
19class Lobby;
20
25class Room : public sigc::trackable, public Router
26{
27public:
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
102protected:
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;
114private:
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
void leave()
Definition: Room.cpp:92
Room * createRoom(const std::string &name)
Definition: Room.cpp:112
sigc::signal< void, Room *, Person *, const std::string & > Emote
Definition: Room.h:91
std::vector< Room * > getRooms() const
Obtain a list of rooms within this room.
Definition: Room.h:67
Room(Lobby *l, const std::string &id)
Definition: Room.cpp:29
sigc::signal< void, Room * > Entered
Definition: Room.h:84
std::string getName() const
Obtain the human-readable name of this room.
Definition: Room.h:53
void say(const std::string &tk)
Send a piece of text to this room.
Definition: Room.cpp:48
sigc::signal< void, Room *, Person *, const std::string & > Speech
Definition: Room.h:88
void emote(const std::string &em)
Definition: Room.cpp:69
std::string getId() const
Definition: Room.h:74
std::vector< Person * > getPeople() const
obtain an array of pointers to everyone in this room
Definition: Room.cpp:141
sigc::signal< void, Room *, Person * > Disappearance
Similarly, emitted when the specifed person leaves the room.
Definition: Room.h:99
sigc::signal< void, Room *, Person * > Appearance
Definition: Room.h:96
Definition: Account.cpp:33