/usr/include/Eris-1.3/Eris/Account.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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | #ifndef ERIS_PLAYER_H
#define ERIS_PLAYER_H
#include <Eris/Types.h>
#include <Atlas/Objects/ObjectsFwd.h>
#include <sigc++/signal.h>
#include <vector>
#include <map>
#include <memory>
namespace Eris
{
class Connection;
class Avatar;
class AccountRouter;
class Timeout;
/** Type used to return available characters */
typedef std::map<std::string, Atlas::Objects::Entity::RootEntity> CharacterMap;
typedef std::map<std::string, Avatar*> ActiveCharacterMap;
/// Encapsulates all the state of an Atlas Account, and methods that operation on that state
/** An Account object represents the encapsulation of a server account, and it's binding to a character in the
game world. Future versions of Eris will support multiple Account objects per Connection, allowing various
configurations of interface, proxies and so forth.
<br>
Account is also the mechanism by which Lobby and Avatars objects are made available to the client,
in response to login / create operations */
class Account : virtual public sigc::trackable
{
public:
/// Create a new Account associated with a Connection object
/**
Create a new Account object : currently only one is assumed, but multiple
Accounts might be supported in the future
@param con A valid (but not necessarily connected) Connection instance
*/
Account(Connection *con);
~Account();
/// Login to the server using user-supplied account information
/** This is the basic way of logging into an existing account. Server-side
failures during the login process, such as the account being unknown
or an incorrect password being supplied, will result in the 'LoginFailure' signal being
emitted with some vaugely helpful error message, and an error code. The LoginSuccess
signal will be emitted upon sucessful completion of the login process.
@param uname The username of the account
@param pwd The correct password for the account
*/
Result login(const std::string &uname, const std::string &pwd);
/// Attempt to create a new account on the server and log into it.
/* Create a new account on the server, if possible.
Server-side failures, such as an account already existing with the specified
username, will cause the 'LoginFailure' signal to be emitted with an error message
and a code. As for 'login', LoginSuccess wil be emitted if everything goes as plan.
@param uname The desired username of the account (eg 'ajr')
@param fullName The real name of the user (e.g 'Al Riddoch')
@param pwd The plaintext password for the new account
*/
Result createAccount(const std::string &uname,
const std::string &fullName,
const std::string &pwd);
/// Request logout from the server.
/** Initiate a clean disconnection from the server. The LogoutComplete
signal will be emitted when the process completes. Calling this on an Account
which is not logged in will produce an error. */
Result logout();
/// Check if the account is logged in.
/** Many operations will produce errors if the account is not logged in. */
bool isLoggedIn() const;
/// Returns a container of character types that the client is allowed to create.
const std::vector< std::string > & getCharacterTypes(void) const;
/// Get the characters owned by this account.
/**
Note you should call
refreshCharacterInfo, and wait for the GotAllCharacters signal, prior to the
initial call : otherwise, it will return an empty or incomplete list.
*/
const CharacterMap& getCharacters();
/**
Update the charcter list (based on changes to play). The intention here is
that clients will call this method for some kind of'choose character' interface
or menu, and wait for the GotAllCharacters signal before displaying the list.
Alternatively, you can display the UI immediatley, and add character entries
based on the GotCharacterInfo signal, which will be emitted once for each character.
*/
Result refreshCharacterInfo();
/// Enter the game using an existing character
/**
@param id The id of the game entity to activate; this must be owned by the account.
@result The Avatar that represents the character. Note ownership of this passes to
the caller.
*/
Result takeCharacter(const std::string &id);
/// enter the game using a new character
Result createCharacter(const Atlas::Objects::Entity::RootEntity &character);
/// pop up the game's character creation dialog, if present
//void createCharacter();
/// returns true if the game has defined a character creation dialog
bool canCreateCharacter() {return false;}
const ActiveCharacterMap& getActiveCharacters() const
{ return m_activeCharacters; }
/**
Request de-activation of a character. The 'AvatarDeactivated' signal will
be emitted when the deactivation completes.
*/
Result deactivateCharacter(Avatar* av);
/// returns the account ID if logged in
const std::string& getId() const
{
return m_accountId;
}
/** Return the username of this account. */
const std::string& getUsername() const
{ return m_username; }
/// Access the underlying Connection for this account
Connection* getConnection() const
{
return m_con;
}
// signals
/// emitted when a character has been retrived from the server
sigc::signal<void, const Atlas::Objects::Entity::RootEntity&> GotCharacterInfo;
/// emitted when the entire character list had been updated
sigc::signal<void> GotAllCharacters;
/// Emitted when a server-side error occurs during account creation / login.
/**
The argument is an error message from the server - hopefully this will
become something more useful such as an enum code, in the future.
*/
sigc::signal<void, const std::string &> LoginFailure;
/** Emitted when login or character creation is successful. */
sigc::signal<void> LoginSuccess;
/// Emitted when a logout completes
/** Depending on whether the logout completed with a positive server
acknowledgement or just timedout, the argument will be either true
(success, clean logout) or false (failure, timeout or other problem)
*/
sigc::signal<void, bool> LogoutComplete;
/**
Emitted when creating a character or taking an existing one
succeeds.
*/
sigc::signal<void, Avatar*> AvatarSuccess;
/**
Emitted when creating or taking a character fails for some reason.
String argument is the error messgae from the server.
*/
sigc::signal<void, const std::string &> AvatarFailure;
/**
Emitted when an active avatar is deactivated. Clients <em>must not</em>
refer to the Avatar or View objects after this signal is emitted (it is
safe to access them in a slot connected to this signal)
*/
sigc::signal<void, Avatar*> AvatarDeactivated;
protected:
friend class AccountRouter;
friend class Avatar; // so avatar can call deactivateCharacter
void sightCharacter(const Atlas::Objects::Operation::RootOperation& op);
void loginComplete(const Atlas::Objects::Entity::Account &p);
void loginError(const Atlas::Objects::Operation::Error& err);
Result internalLogin(const std::string &unm, const std::string &pwd);
void internalLogout(bool clean);
/// Callback for network re-establishment
void netConnected();
/// help! the plug is being pulled!
bool netDisconnecting();
void netFailure(const std::string& msg);
void loginResponse(const Atlas::Objects::Operation::RootOperation& op);
void logoutResponse(const Atlas::Objects::Operation::RootOperation& op);
void avatarResponse(const Atlas::Objects::Operation::RootOperation& op);
void avatarLogoutResponse(const Atlas::Objects::Operation::RootOperation& op);
void handleLogoutTimeout();
// void recvRemoteLogout(const Atlas::Objects::Operation::Logout &lo);
void handleLoginTimeout();
typedef enum
{
DISCONNECTED = 0, ///< Default state, no server account active
LOGGING_IN, ///< Login sent, waiting for initial INFO response
LOGGED_IN, ///< Fully logged into a server-side account
LOGGING_OUT, ///< Sent a logout op, waiting for the INFO response
TAKING_CHAR, ///< sent a LOOK op for a character, awaiting INFO response
CREATING_CHAR ///< send a character CREATE op, awaiting INFO response
} Status;
void internalDeactivateCharacter(Avatar* av);
void updateFromObject(const Atlas::Objects::Entity::Account &p);
Connection* m_con; ///< underlying connection instance
Status m_status; ///< what the Player is currently doing
AccountRouter* m_router;
std::string m_accountId; ///< the account ID
std::string m_username; ///< The player's username ( != account object's ID)
std::string m_pass;
std::vector< std::string > m_characterTypes;
CharacterMap _characters; ///< characters belonging to this player
StringSet m_characterIds;
bool m_doingCharacterRefresh; ///< set if we're refreshing character data
ActiveCharacterMap m_activeCharacters;
std::auto_ptr<Timeout> m_timeout;
};
} // of namespace Eris
#endif
|