Browse Source

Using boost::signals2 to message main from net.cpp.

miguelfreitas
Eric Lombrozo 12 years ago
parent
commit
501da2503a
  1. 4
      src/init.cpp
  2. 15
      src/main.cpp
  3. 5
      src/main.h
  4. 30
      src/net.cpp
  5. 18
      src/net.h

4
src/init.cpp

@ -571,9 +571,7 @@ bool AppInit2(boost::thread_group& threadGroup) @@ -571,9 +571,7 @@ bool AppInit2(boost::thread_group& threadGroup)
// ********************************************************* Step 6: network initialization
SetProcessMessagesHandler(ProcessMessages);
SetSendMessagesHandler(SendMessages);
SetStartShutdownHandler(StartShutdown);
RegisterNodeSignals(GetNodeSignals());
int nSocksVersion = GetArg("-socks", 5);
if (nSocksVersion != 4 && nSocksVersion != 5)

15
src/main.cpp

@ -160,7 +160,22 @@ void static ResendWalletTransactions() @@ -160,7 +160,22 @@ void static ResendWalletTransactions()
//////////////////////////////////////////////////////////////////////////////
//
// Registration of network node signals.
//
void RegisterNodeSignals(CNodeSignals& nodeSignals)
{
nodeSignals.ProcessMessages.connect(&ProcessMessages);
nodeSignals.SendMessages.connect(&SendMessages);
}
void UnregisterNodeSignals(CNodeSignals& nodeSignals)
{
nodeSignals.ProcessMessages.disconnect(&ProcessMessages);
nodeSignals.SendMessages.disconnect(&SendMessages);
}

5
src/main.h

@ -124,6 +124,11 @@ void UnregisterWallet(CWallet* pwalletIn); @@ -124,6 +124,11 @@ void UnregisterWallet(CWallet* pwalletIn);
/** Push an updated transaction to all registered wallets */
void SyncWithWallets(const uint256 &hash, const CTransaction& tx, const CBlock* pblock = NULL, bool fUpdate = false);
/** Register with a network node to receive its signals */
void RegisterNodeSignals(CNodeSignals& nodeSignals);
/** Unregister a network node */
void UnregisterNodeSignals(CNodeSignals& nodeSignals);
void PushGetBlocks(CNode* pnode, CBlockIndex* pindexBegin, uint256 hashEnd);
/** Process an incoming block */

30
src/net.cpp

@ -68,27 +68,9 @@ CCriticalSection cs_vAddedNodes; @@ -68,27 +68,9 @@ CCriticalSection cs_vAddedNodes;
static CSemaphore *semOutbound = NULL;
//
// Handlers that need to be registered
//
static ProcessMessagesHandler fnProcessMessages = NULL;
static SendMessagesHandler fnSendMessages = NULL;
static StartShutdownHandler fnStartShutdown = NULL;
void SetProcessMessagesHandler(ProcessMessagesHandler handler)
{
fnProcessMessages = handler;
}
void SetSendMessagesHandler(SendMessagesHandler handler)
{
fnSendMessages = handler;
}
void SetStartShutdownHandler(StartShutdownHandler handler)
{
fnStartShutdown = handler;
}
// Signals for message handling
static CNodeSignals g_signals;
CNodeSignals& GetNodeSignals() { return g_signals; }
void AddOneShot(string strDest)
{
@ -1646,7 +1628,7 @@ void ThreadMessageHandler() @@ -1646,7 +1628,7 @@ void ThreadMessageHandler()
{
TRY_LOCK(pnode->cs_vRecvMsg, lockRecv);
if (lockRecv)
if (!ProcessMessages(pnode))
if (!g_signals.ProcessMessages(pnode))
pnode->CloseSocketDisconnect();
}
boost::this_thread::interruption_point();
@ -1654,8 +1636,8 @@ void ThreadMessageHandler() @@ -1654,8 +1636,8 @@ void ThreadMessageHandler()
// Send messages
{
TRY_LOCK(pnode->cs_vSend, lockSend);
if (lockSend && fnSendMessages)
fnSendMessages(pnode, pnode == pnodeTrickle);
if (lockSend)
g_signals.SendMessages(pnode, pnode == pnodeTrickle);
}
boost::this_thread::interruption_point();
}

18
src/net.h

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
#include <deque>
#include <boost/array.hpp>
#include <boost/foreach.hpp>
#include <boost/signals2/signal.hpp>
#include <openssl/rand.h>
#ifndef WIN32
@ -45,16 +46,15 @@ void StartNode(boost::thread_group& threadGroup); @@ -45,16 +46,15 @@ void StartNode(boost::thread_group& threadGroup);
bool StopNode();
void SocketSendData(CNode *pnode);
//
// Handlers that require registration
//
typedef bool (*ProcessMessagesHandler)(CNode* pfrom);
typedef bool (*SendMessagesHandler)(CNode* pto, bool fSendTrickle);
typedef void (*StartShutdownHandler)();
// Signals for message handling
struct CNodeSignals
{
boost::signals2::signal<bool (CNode*)> ProcessMessages;
boost::signals2::signal<bool (CNode*, bool)> SendMessages;
};
CNodeSignals& GetNodeSignals();
void SetProcessMessagesHandler(ProcessMessagesHandler handler);
void SetSendMessagesHandler(SendMessagesHandler handler);
void SetStartShutdownHandler(StartShutdownHandler handler);
enum
{

Loading…
Cancel
Save