#include #include #include "ConnectionPool.h" #include "Config.h" #include "KnownNodeList.h" #include "Peer.h" #include "Application.h" ConnectionPool::ConnectionPool() { ; } void ConnectionPool::connectToNetwork(KnownNodeList& nodeList,boost::asio::io_service& io_service) { for(int n=0; nconnectTo(*node); // FIXME mPeers.push_back(peer); } } /* bool ConnectionPool::isMessageKnown(PackedMessage::pointer msg) { for(unsigned int n=0; nsendPacket(msg); } } bool ConnectionPool::addToMap(const uint160& hanko, Peer::pointer peer) { boost::mutex::scoped_lock sl(peerLock); return peerMap.insert(std::make_pair(hanko, peer)).second; } bool ConnectionPool::delFromMap(const uint160& hanko) { boost::mutex::scoped_lock sl(peerLock); std::map::iterator it=peerMap.find(hanko); if((it==peerMap.end()) || (it->first!=hanko)) return false; peerMap.erase(it); return true; } Peer::pointer ConnectionPool::findInMap(const uint160& hanko) { boost::mutex::scoped_lock sl(peerLock); std::map::iterator it=peerMap.find(hanko); if(it==peerMap.end()) return Peer::pointer(); return it->second; } bool ConnectionPool::inMap(const uint160& hanko) { boost::mutex::scoped_lock sl(peerLock); return peerMap.find(hanko) != peerMap.end(); } std::map ConnectionPool::getAllConnected() { boost::mutex::scoped_lock sl(peerLock); return peerMap; } bool ConnectionPool::connectTo(const std::string& host, const std::string& port) { try { boost::asio::ip::tcp::resolver res(theApp->getIOService()); boost::asio::ip::tcp::resolver::query query(host.c_str(), port.c_str()); boost::asio::ip::tcp::resolver::iterator it(res.resolve(query)), end; Peer::pointer peer(Peer::create(theApp->getIOService())); boost::system::error_code error = boost::asio::error::host_not_found; while (error && (it!=end)) { peer->getSocket().close(); peer->getSocket().connect(*it++, error); } if(error) return false; boost::mutex::scoped_lock sl(peerLock); mPeers.push_back(peer); peer->connected(boost::system::error_code()); } catch (...) { return false; } return true; }