From 55d0704438cabff878f8225b32be5d9ce63de628 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 17 Jan 2012 19:19:52 -0800 Subject: [PATCH] Structures needed for network broadcasts. --- Peer.h | 2 +- PeerDoor.cpp | 40 ++++++++++++++++++++++++++++++++++++++-- PeerDoor.h | 21 +++++++++++++++++++-- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/Peer.h b/Peer.h index 1bc6fdd2cf..fd1df5ded1 100644 --- a/Peer.h +++ b/Peer.h @@ -23,10 +23,10 @@ protected: std::list mSendQ; PackedMessage::pointer mSendingPacket; std::bitset<32> mPeerBits; + uint160 hanko; Peer(boost::asio::io_service& io_service); - void handle_write(const boost::system::error_code& error, size_t bytes_transferred); //void handle_read(const boost::system::error_code& error, size_t bytes_transferred); void handle_read_header(const boost::system::error_code& error); diff --git a/PeerDoor.cpp b/PeerDoor.cpp index d288f697bf..61de1e832f 100644 --- a/PeerDoor.cpp +++ b/PeerDoor.cpp @@ -28,7 +28,43 @@ void PeerDoor::handleConnect(Peer::pointer new_connection, if(!error) { new_connection->connected(error); - }else cout << "Error: " << error; // BOOST_LOG_TRIVIAL(info) << "Error: " << error; + } + else cout << "Error: " << error; // BOOST_LOG_TRIVIAL(info) << "Error: " << error; startListening(); -} \ No newline at end of file +} + +bool PeerDoor::addToMap(const uint160& hanko, Peer::pointer peer) +{ + boost::mutex::scoped_lock sl(peerLock); + return peerMap.insert(std::make_pair(hanko, peer)).second; +} + +bool PeerDoor::delFromMap(const uint160& hanko, Peer::pointer peer) +{ + 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 PeerDoor::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 PeerDoor::inMap(const uint160& hanko) +{ + boost::mutex::scoped_lock sl(peerLock); + return peerMap.find(hanko) != peerMap.end(); +} + +std::map PeerDoor::getAllConnected() +{ + boost::mutex::scoped_lock sl(peerLock); + return peerMap; +} diff --git a/PeerDoor.h b/PeerDoor.h index e951ce91e2..2b000fffe6 100644 --- a/PeerDoor.h +++ b/PeerDoor.h @@ -1,5 +1,10 @@ -#include "Peer.h" +#include +#include + #include +#include + +#include "Peer.h" /* Handles incoming connections from other Peers @@ -11,6 +16,18 @@ class PeerDoor void startListening(); void handleConnect(Peer::pointer new_connection, const boost::system::error_code& error); + + boost::mutex peerLock; + std::map peerMap; + public: PeerDoor(boost::asio::io_service& io_service); -}; \ No newline at end of file + + + // hanko->peer mapping functions + bool inMap(const uint160& hanko); + bool addToMap(const uint160& hanko, Peer::pointer peer); + bool delFromMap(const uint160& hanko, Peer::pointer peer); + Peer::pointer findInMap(const uint160& hanko); + std::map getAllConnected(); +};