/usr/include/Eris-1.3/Eris/Room.h is in liberis-1.3-dev 1.3.14-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #ifndef ERIS_ROOM_H
#define ERIS_ROOM_H
#include <Eris/Router.h>
#include <sigc++/trackable.h>
#include <sigc++/signal.h>
#include <vector>
#include <map>
#include <string>
namespace Eris
{
// forward decls
class Person;
class Lobby;
/** The out-of-game (OOG) heirarchy is composed of Rooms, containing Persons and other
Rooms. Generally rooms corespond to chanels in IRC, and the interface and commands should
be clear if you are familiar with that medium.
*/
class Room : public sigc::trackable, public Router
{
public:
virtual ~Room();
/// Send a piece of text to this room
void say(const std::string &tk);
/** Send an emote ( /me ) to the room. This is transmitted as an IMAGINARY op
in Atlas, with args[0]["id"] = "emote". */
void emote(const std::string &em);
/** Leave the room - no more signals will be emitted for this room again
(validity of Room pointer after this call?) */
void leave();
/** create a child room of this one, with the specified name. Note that most attributes,
<em>including the ID</em> will not be valid until the new room emits the 'Entered' signal.
If you need a unique, referenceable indentifier earlier than that point, use the pointer
value. */
Room* createRoom(const std::string &name);
/// Obtain the human-readable name of this room
std::string getName() const
{
return m_name;
}
std::string getTopic() const
{
return m_topic;
}
/// obtain an array of pointers to everyone in this room
std::vector<Person*> getPeople() const;
/// Obtain a list of rooms within this room
std::vector<Room*> getRooms() const
{
return m_subrooms;
}
/** Get the Atlas object ID of the Room; note that this may return an
empty value if called prior to entering the Lobby */
std::string getId() const
{
return m_roomId;
}
Person* getPersonByUID(const std::string& uid);
// signals
/** Emitted when entry into the room (after a Join) is complete, i.e the user list has been
transferred and resolved. */
sigc::signal<void, Room*> Entered;
/** The primary talk callback. The arguments are the source room, the person
talking, and the message itself */
sigc::signal<void, Room*, Person*, const std::string&> Speech;
/** Emote (/me) callback. The arguments are identical to those for Talk above */
sigc::signal<void, Room*, Person*, const std::string&> Emote;
/** Emitted when a person enters the room; argument is the account ID. Note that
Appearance is not generated for the local player when entering/leaving; use the
Entered signal instead. */
sigc::signal<void, Room*, Person*> Appearance;
/// Similarly, emitted when the specifed person leaves the room
sigc::signal<void, Room*, Person*> Disappearance;
protected:
friend class Lobby;
typedef std::map<std::string, Person*> IdPersonMap;
/** standard constructor. Issues a LOOK against the specified ID, and sets up
the necessary signals to drive the Room if id arg is provided */
explicit Room(Lobby *l, const std::string& id);
virtual RouterResult handleOperation(const Atlas::Objects::Operation::RootOperation& op);
void handleSoundTalk(Person* p, const std::string& speech);
void handleEmote(Person* p, const std::string& desc);
std::string m_roomId;
private:
/// helper to see if all the people in the room are valid, and if so, do entry
void checkEntry();
void sight(const Atlas::Objects::Entity::RootEntity &room);
void appearance(const std::string& personId);
void disappearance(const std::string& personId);
// callback slot when Lobby recives SIGHT(person)
void notifyPersonSight(Person *p);
std::string m_name;
std::string m_topic;
bool m_entered; ///< set once we enter the room, i.e have info on all the members
Lobby* m_lobby;
IdPersonMap m_members;
std::vector<Room*> m_subrooms;
};
}
#endif
|