Changeset - 88865c1234e3
[Not reviewed]
0 7 0
HanzZ - 14 years ago 2011-03-20 23:04:20
hanzz.k@gmail.com
RosterManager
7 files changed with 46 insertions and 5 deletions:
0 comments (0 inline, 0 general)
include/transport/abstractbuddy.h
Show inline comments
 
@@ -28,13 +28,15 @@
 

	
 
typedef enum { 	SPECTRUM_BUDDY_NO_FLAG = 0,
 
				SPECTRUM_BUDDY_JID_ESCAPING = 2,
 
				SPECTRUM_BUDDY_IGNORE = 4
 
			} SpectrumBuddyFlag;
 

	
 
using namespace Transport;
 
namespace Transport {
 

	
 
class RosterManager;
 

	
 
// Wrapper for PurpleBuddy.
 
class AbstractBuddy {
 
	public:
 
		AbstractBuddy(long id);
 
		virtual ~AbstractBuddy();
 
@@ -66,12 +68,15 @@ class AbstractBuddy {
 
		// Sets SpectrumBuddyFlags.
 
		void setFlags(int flags);
 

	
 
		// Returns flags.
 
		int getFlags();
 

	
 
		void setRosterManager(RosterManager *rosterManager) { m_rosterManager = rosterManager; }
 
		RosterManager *getRosterManager() { return m_rosterManager; }
 

	
 
		// Returns buddy's name (so for example UIN for ICQ, JID for XMPP...).
 
		virtual std::string getName() = 0;
 

	
 
		// Returns buddy's alias (nickname).
 
		virtual std::string getAlias() = 0;
 

	
 
@@ -92,7 +97,10 @@ class AbstractBuddy {
 
	private:
 
		long m_id;
 
		bool m_online;
 
		std::string m_subscription;
 
		Swift::Presence::ref m_lastPresence;
 
		int m_flags;
 
		RosterManager *m_rosterManager;
 
};
 

	
 
}
include/transport/logger.h
Show inline comments
 
@@ -29,12 +29,14 @@ namespace Transport {
 
struct UserInfo;
 
class User;
 
class UserManager;
 
class Component;
 
class StorageBackend;
 
class UserRegistration;
 
class RosterManager;
 
class AbstractBuddy;
 

	
 
/// Basic logging class which logs various data into std::out (standard output).
 
class Logger
 
{
 
	public:
 
		/// Creates new Logger class instance.
 
@@ -53,12 +55,16 @@ class Logger
 
		void setUserRegistration(UserRegistration *userRegistration);
 

	
 
		/// Starts logging data related to UserManager class.
 
		/// \param userManager userManager class
 
		void setUserManager(UserManager *userManager);
 

	
 
		/// Starts logging data related to RosterManager class.
 
		/// \param rosterManager rosterManager class
 
		void setRosterManager(RosterManager *rosterManager);
 

	
 
	private:
 
		// Component
 
		void handleConnected();
 
		void handleConnectionError(const Swift::ComponentError &error);
 
		void handleXMLIn(const std::string &data);
 
		void handleXMLOut(const std::string &data);
 
@@ -71,9 +77,13 @@ class Logger
 
		void handleUserUnregistered(const UserInfo &user);
 
		void handleUserUpdated(const UserInfo &user);
 

	
 
		// UserManager
 
		void handleUserCreated(User *user);
 
		void handleUserDestroyed(User *user);
 

	
 
		// RosterManager
 
		void handleBuddyAdded(AbstractBuddy *buddy);
 
		void handleBuddyRemoved(AbstractBuddy *buddy);
 
};
 

	
 
}
include/transport/user.h
Show inline comments
 
@@ -26,12 +26,13 @@
 
#include "Swiften/Disco/EntityCapsManager.h"
 
#include "storagebackend.h"
 

	
 
namespace Transport {
 

	
 
class Component;
 
class RosterManager;
 
struct UserInfo;
 

	
 
/// Represents online XMPP user.
 
class User {
 
	public:
 
		/// Creates new User class.
 
@@ -49,12 +50,14 @@ class User {
 
		const Swift::JID &getJID();
 

	
 
		/// Returns UserInfo struct with informations needed to connect the legacy network.
 
		/// \return UserInfo struct
 
		UserInfo &getUserInfo() { return m_userInfo; }
 

	
 
		RosterManager *getRosterManager() { return m_rosterManager; }
 

	
 
		void setData(void *data) { m_data = data; }
 
		void *getData() { return m_data; }
 

	
 
		/// Handles presence from XMPP JID associated with this user.
 
		/// \param presence Swift::Presence.
 
		void handlePresence(Swift::Presence::ref presence);
 
@@ -66,13 +69,14 @@ class User {
 
		boost::signal<void ()> onReadyToConnect;
 

	
 
	private:
 
		void onConnectingTimeout();
 

	
 
		Swift::JID m_jid;
 
		Component *m_component;		
 
		Component *m_component;
 
		RosterManager *m_rosterManager;
 
		Swift::EntityCapsManager *m_entityCapsManager;
 
		Swift::PresenceOracle *m_presenceOracle;
 
		UserInfo m_userInfo;
 
		void *m_data;
 
		bool m_connected;
 
		bool m_readyForConnect;
spectrum/src/main.cpp
Show inline comments
 
@@ -7,12 +7,13 @@
 
#include "transport/usermanager.h"
 
#include "transport/logger.h"
 
#include "transport/sqlite3backend.h"
 
#include "transport/userregistration.h"
 
#include "transport/user.h"
 
#include "transport/storagebackend.h"
 
#include "transport/rostermanager.h"
 
#include "spectrumeventloop.h"
 
#include "spectrumbuddy.h"
 
#include "geventloop.h"
 

	
 
#define Log(X, STRING) std::cout << "[SPECTRUM] " << X << " " << STRING << "\n";
 

	
 
@@ -62,13 +63,14 @@ static void buddyListNewNode(PurpleBlistNode *node) {
 
		s_buddy->addBuddy(buddy);
 
	}
 
	else {
 
		buddy->node.ui_data = (void *) new SpectrumBuddy(-1, buddy);
 
		SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data;
 
		s_buddy->setFlags(SPECTRUM_BUDDY_JID_ESCAPING);
 
		// TODO: add buddy to RosterManager
 

	
 
		user->getRosterManager()->addBuddy(s_buddy);
 
	}
 
}
 

	
 
static void NodeRemoved(PurpleBlistNode *node, void *data) {
 
	if (!PURPLE_BLIST_NODE_IS_BUDDY(node))
 
		return;
 
@@ -78,13 +80,13 @@ static void NodeRemoved(PurpleBlistNode *node, void *data) {
 
	User *user = (User *) account->ui_data;
 
	if (buddy->node.ui_data) {
 
		SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data;
 
		s_buddy->removeBuddy(buddy);
 
		buddy->node.ui_data = NULL;
 
		if (s_buddy->getBuddiesCount() == 0) {
 
			// TODO: remove buddy from RosterManager
 
			user->getRosterManager()->removeBuddy(s_buddy);
 
			delete s_buddy;
 
		}
 
	}
 
}
 

	
 
static PurpleBlistUiOps blistUiOps =
src/abstractbuddy.cpp
Show inline comments
 
@@ -17,12 +17,14 @@
 
 * along with this program; if not, write to the Free Software
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
 
 */
 

	
 
#include "transport/abstractbuddy.h"
 

	
 
namespace Transport {
 

	
 
AbstractBuddy::AbstractBuddy(long id) : m_id(id), m_online(false), m_subscription("ask"), m_flags(0) {
 
}
 

	
 
AbstractBuddy::~AbstractBuddy() {
 
}
 

	
 
@@ -104,6 +106,8 @@ Swift::Presence::ref AbstractBuddy::generatePresenceStanza(int features, bool on
 
		}
 
		m_lastPresence = presence;
 
	}
 

	
 
	return presence;
 
}
 

	
 
}
src/logger.cpp
Show inline comments
 
@@ -21,12 +21,14 @@
 
#include "transport/logger.h"
 
#include "transport/usermanager.h"
 
#include "transport/user.h"
 
#include "transport/transport.h"
 
#include "transport/storagebackend.h"
 
#include "transport/userregistration.h"
 
#include "transport/abstractbuddy.h"
 
#include "transport/rostermanager.h"
 
#include <boost/bind.hpp>
 

	
 
using namespace boost;
 

	
 
namespace Transport {
 

	
 
@@ -101,7 +103,15 @@ void Logger::handleUserCreated(User *user) {
 
}
 

	
 
void Logger::handleUserDestroyed(User *user) {
 
	std::cout << "[USERMANAGER] User \"" << user->getJID().toBare().toString() << "\" (UIN: \"" << user->getUserInfo().uin << "\") disconnected and User class is going to be destroyed\n";
 
}
 

	
 
void Logger::handleBuddyAdded(AbstractBuddy *buddy) {
 
	std::cout << "[ROSTERMANAGER] \"" << buddy->getRosterManager()->getUser()->getJID().toBare().toString() << "\": Buddy \"" << buddy->getSafeName() << "\" (ALIAS: \"" << buddy->getAlias() << "\") has been bound with this user's roster.\n";
 
}
 

	
 
void Logger::handleBuddyRemoved(AbstractBuddy *buddy) {
 
	std::cout << "[ROSTERMANAGER] \"" << buddy->getRosterManager()->getUser()->getJID().toBare().toString() << "\": Buddy \"" << buddy->getSafeName() << "\" (ALIAS: \"" << buddy->getAlias() << "\") has been unbound with this user's roster.\n";
 
}
 

	
 
}
src/user.cpp
Show inline comments
 
@@ -18,12 +18,13 @@
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
 
 */
 

	
 
#include "transport/user.h"
 
#include "transport/transport.h"
 
#include "transport/storagebackend.h"
 
#include "transport/rostermanager.h"
 
#include "Swiften/Swiften.h"
 

	
 
namespace Transport {
 

	
 
User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component) {
 
	m_jid = jid;
 
@@ -34,16 +35,18 @@ User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component) {
 
	m_userInfo = userInfo;
 
	m_connected = false;
 
	m_readyForConnect = false;
 

	
 
	m_reconnectTimer = m_component->getFactories()->getTimerFactory()->createTimer(10000);
 
	m_reconnectTimer->onTick.connect(boost::bind(&User::onConnectingTimeout, this)); 
 

	
 
	m_rosterManager = new RosterManager(this, m_component);
 
}
 

	
 
User::~User(){
 

	
 
	delete m_rosterManager;
 
}
 

	
 
const Swift::JID &User::getJID() {
 
	return m_jid;
 
}
 

	
0 comments (0 inline, 0 general)