Files
@ af6c160261c2
Branch filter:
Location: libtransport.git/include/transport/UserManager.h - annotation
af6c160261c2
5.4 KiB
text/plain
Web interface: support service.base_location=/something/ to override default '/' root location used by the web interface
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 | c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa cc64a76c8be5 cc64a76c8be5 78e71f9345c7 cc64a76c8be5 cc64a76c8be5 fe47e0979be9 cc64a76c8be5 c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa 2ae880ff94b5 c0a01941fc10 525a07a4d19a fe47e0979be9 78e71f9345c7 c5edfd19b1aa 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f 948987cb656f fe47e0979be9 c5edfd19b1aa 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 fe47e0979be9 2ae880ff94b5 2ae880ff94b5 fe47e0979be9 fe47e0979be9 fe47e0979be9 fe47e0979be9 fe47e0979be9 c5edfd19b1aa 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 13d843e18680 13d843e18680 34207065ceb5 34207065ceb5 34207065ceb5 34207065ceb5 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 632afeabe03a 2ae880ff94b5 56dd64999814 c5edfd19b1aa 56dd64999814 4c885cc94785 fe47e0979be9 3201977efb6a 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 c5edfd19b1aa 2ae880ff94b5 2ae880ff94b5 2ae880ff94b5 c5edfd19b1aa 632afeabe03a 632afeabe03a 1e8eb7076f17 1e8eb7076f17 1e8eb7076f17 1e8eb7076f17 632afeabe03a 632afeabe03a 25f5516757ed 25f5516757ed 320738eda85a 320738eda85a 320738eda85a 320738eda85a 25f5516757ed 25f5516757ed 632afeabe03a 632afeabe03a 9477e3f83882 632afeabe03a 632afeabe03a 632afeabe03a c7f2b6298073 1e8eb7076f17 d4769080ca30 d4769080ca30 d4769080ca30 d4769080ca30 d4769080ca30 d4769080ca30 d4769080ca30 c5edfd19b1aa c5edfd19b1aa c8006a0ebab6 5797b554ea69 5797b554ea69 3aff761db678 5797b554ea69 1b49b0cf36af c7f2b6298073 e23f8e3c7f9d 2ae880ff94b5 c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa 2ae880ff94b5 2ae880ff94b5 c0a01941fc10 1e8eb7076f17 629e93e34b42 d4769080ca30 d4769080ca30 8ab47cce7012 c5edfd19b1aa c5edfd19b1aa c5edfd19b1aa | /**
* libtransport -- C++ library for easy XMPP Transports development
*
* Copyright (C) 2011, Jan Kaluza <hanzz.k@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#pragma once
#include <string>
#include <map>
#include "Swiften/Elements/Message.h"
#include "Swiften/Elements/Presence.h"
#include "Swiften/JID/JID.h"
#include "Swiften/Disco/EntityCapsProvider.h"
#include "Swiften/Elements/DiscoInfo.h"
#include "Swiften/Elements/VCard.h"
#include "Swiften/Network/Timer.h"
namespace Transport {
class User;
class Component;
class StorageBackend;
class StorageResponder;
class RosterResponder;
class UserRegistration;
class UserRegistry;
/// Manages online XMPP Users.
/// This class handles presences and creates User classes when new user connects.
/// It also removes the User class once the last user's resource disconnected.
/// Basic user creation process:
/**
\msc
Component,UserManager,User,StorageBackend,Slot;
--- [ label = "Available presence received"];
Component->UserManager [label="handlePresence(...)", URL="\ref UserManager::handlePresence()"];
UserManager->StorageBackend [label="getUser(...)", URL="\ref StorageBackend::getUser()"];
UserManager->User [label="User::User(...)", URL="\ref User"];
UserManager->Slot [label="onUserCreated(...)", URL="\ref UserManager::onUserCreated()"];
UserManager->User [label="handlePresence(...)", URL="\ref User::handlePresence()"];
\endmsc
*/
class UserManager /*: public Swift::EntityCapsProvider*/ {
public:
/// Creates new UserManager.
/// \param component Component which's presence will be handled
/// \param storageBackend Storage backend used to fetch UserInfos
UserManager(Component *component, UserRegistry *userRegistry, StorageBackend *storageBackend = NULL);
/// Destroys UserManager.
virtual ~UserManager();
virtual void sendVCard(unsigned int id, Swift::VCard::ref vcard) = 0;
virtual UserRegistration *getUserRegistration() = 0;
/// Returns user according to his bare JID.
/// \param barejid bare JID of user
/// \return User class associated with this user
User *getUser(const std::string &barejid);
/// Returns map with all connected users.
/// \return All connected users.
const std::map<std::string, User *> &getUsers() {
return m_users;
}
/// Returns number of online users.
/// \return number of online users
int getUserCount();
/// Removes user. This function disconnects user and safely removes
/// User class. This does *not* remove user from StorageBackend.
/// \param user User class to remove
void removeUser(User *user, bool onUserBehalf = true);
void removeAllUsers(bool onUserBehalf = true);
// Swift::DiscoInfo::ref getCaps(const Swift::JID&) const;
/// Called when new User class is created.
/// \param user newly created User class
boost::signal<void (User *user)> onUserCreated;
/// Called when User class is going to be removed
/// \param user removed User class
boost::signal<void (User *user)> onUserDestroyed;
/// Returns true if user is connected.
/// \return True if user is connected.
bool isUserConnected(const std::string &barejid) const {
return m_users.find(barejid) != m_users.end();
}
/// Returns pointer to UserRegistry.
/// \return Pointer to UserRegistry.
UserRegistry *getUserRegistry() {
return m_userRegistry;
}
Component *getComponent() {
return m_component;
}
/// Connects user manually.
/// \param user JID of user.
void connectUser(const Swift::JID &user);
/// Disconnects user manually.
/// \param user JID of user.
void disconnectUser(const Swift::JID &user);
void messageToXMPPSent() { m_sentToXMPP++; }
void messageToBackendSent() { m_sentToBackend++; }
unsigned long getMessagesToXMPP() { return m_sentToXMPP; }
unsigned long getMessagesToBackend() { return m_sentToBackend; }
private:
void handlePresence(Swift::Presence::ref presence);
void handleMessageReceived(Swift::Message::ref message);
void handleGeneralPresenceReceived(Swift::Presence::ref presence);
void handleProbePresence(Swift::Presence::ref presence);
void handleErrorPresence(Swift::Presence::ref presence);
void handleSubscription(Swift::Presence::ref presence);
void handleMUCPresence(Swift::Presence::ref presence);
void handleRemoveTimeout(const std::string jid, User *user, bool reconnect);
void handleDiscoInfo(const Swift::JID& jid, boost::shared_ptr<Swift::DiscoInfo> info);
void addUser(User *user);
long m_onlineBuddies;
User *m_cachedUser;
std::map<std::string, User *> m_users;
Component *m_component;
StorageBackend *m_storageBackend;
StorageResponder *m_storageResponder;
UserRegistry *m_userRegistry;
Swift::Timer::ref m_removeTimer;
unsigned long m_sentToXMPP;
unsigned long m_sentToBackend;
friend class RosterResponder;
};
}
|