Files
        @ 1a7e4719eafc
    
        
              Branch filter: 
        
    Location: libtransport.git/backends/libyahoo2/yahoolocalaccount.cpp - annotation
        
            
            1a7e4719eafc
            1.9 KiB
            text/x-c++hdr
        
        
    
    Merge branch 'master' of github.com:hanzz/libtransport
    6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30 6b88ad945d30  | 
#include "yahoolocalaccount.h"
#include "yahoohandler.h"
YahooLocalAccount::YahooLocalAccount(const std::string &user, const std::string &legacyName, const std::string &password) : user(user), id(0), conn_tag(1), handler_tag(1), status(YAHOO_STATUS_OFFLINE), msg(""), buffer("") {
	id = yahoo_init_with_attributes(legacyName.c_str(), password.c_str(), 
			"local_host", "",
			"pager_port", 5050,
			NULL);
}
YahooLocalAccount::~YahooLocalAccount() {
	// remove handlers
	for (std::map<int, YahooHandler *>::iterator it = handlers.begin(); it != handlers.end(); it++) {
		delete it->second;
	}
	// remove conns
	for (std::map<int, boost::shared_ptr<Swift::Connection> >::iterator it = conns.begin(); it != conns.end(); it++) {
		it->second->onConnectFinished.disconnect_all_slots();
		it->second->onDisconnected.disconnect_all_slots();
		it->second->onDataRead.disconnect_all_slots();
		it->second->onDataWritten.disconnect_all_slots();
	}
}
void YahooLocalAccount::login() {
	yahoo_login(id, YAHOO_STATUS_AVAILABLE);
}
void YahooLocalAccount::addHandler(YahooHandler *handler) {
	handlers[handler->handler_tag] = handler;
	handlers_per_conn[handler->conn_tag][handler->handler_tag] = handler;
}
void YahooLocalAccount::removeOldHandlers() {
	std::vector<int> handlers_to_remove;
	for (std::map<int, YahooHandler *>::iterator it = handlers.begin(); it != handlers.end(); it++) {
		if (it->second->remove_later) {
			handlers_to_remove.push_back(it->first);
		}
	}
	BOOST_FOREACH(int tag, handlers_to_remove) {
		YahooHandler *handler = handlers[tag];
		handlers.erase(tag);
		handlers_per_conn[handler->conn_tag].erase(tag);
		delete handler;
	}
}
void YahooLocalAccount::removeConn(int conn_tag) {
	for (std::map<int, YahooHandler *>::iterator it = handlers_per_conn[conn_tag].begin(); it != handlers_per_conn[conn_tag].end(); it++) {
		it->second->remove_later = true;
	}
	removeOldHandlers();
	conns.erase(conn_tag);
}
 |