Using boost::signals2 to message main from net.cpp.
This commit is contained in:
parent
aabdf9e899
commit
501da2503a
5 changed files with 37 additions and 37 deletions
|
@ -571,9 +571,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
|
|
||||||
// ********************************************************* Step 6: network initialization
|
// ********************************************************* Step 6: network initialization
|
||||||
|
|
||||||
SetProcessMessagesHandler(ProcessMessages);
|
RegisterNodeSignals(GetNodeSignals());
|
||||||
SetSendMessagesHandler(SendMessages);
|
|
||||||
SetStartShutdownHandler(StartShutdown);
|
|
||||||
|
|
||||||
int nSocksVersion = GetArg("-socks", 5);
|
int nSocksVersion = GetArg("-socks", 5);
|
||||||
if (nSocksVersion != 4 && nSocksVersion != 5)
|
if (nSocksVersion != 4 && nSocksVersion != 5)
|
||||||
|
|
15
src/main.cpp
15
src/main.cpp
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,11 @@ void UnregisterWallet(CWallet* pwalletIn);
|
||||||
/** Push an updated transaction to all registered wallets */
|
/** Push an updated transaction to all registered wallets */
|
||||||
void SyncWithWallets(const uint256 &hash, const CTransaction& tx, const CBlock* pblock = NULL, bool fUpdate = false);
|
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);
|
void PushGetBlocks(CNode* pnode, CBlockIndex* pindexBegin, uint256 hashEnd);
|
||||||
|
|
||||||
/** Process an incoming block */
|
/** Process an incoming block */
|
||||||
|
|
30
src/net.cpp
30
src/net.cpp
|
@ -68,27 +68,9 @@ CCriticalSection cs_vAddedNodes;
|
||||||
|
|
||||||
static CSemaphore *semOutbound = NULL;
|
static CSemaphore *semOutbound = NULL;
|
||||||
|
|
||||||
//
|
// Signals for message handling
|
||||||
// Handlers that need to be registered
|
static CNodeSignals g_signals;
|
||||||
//
|
CNodeSignals& GetNodeSignals() { return g_signals; }
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AddOneShot(string strDest)
|
void AddOneShot(string strDest)
|
||||||
{
|
{
|
||||||
|
@ -1646,7 +1628,7 @@ void ThreadMessageHandler()
|
||||||
{
|
{
|
||||||
TRY_LOCK(pnode->cs_vRecvMsg, lockRecv);
|
TRY_LOCK(pnode->cs_vRecvMsg, lockRecv);
|
||||||
if (lockRecv)
|
if (lockRecv)
|
||||||
if (!ProcessMessages(pnode))
|
if (!g_signals.ProcessMessages(pnode))
|
||||||
pnode->CloseSocketDisconnect();
|
pnode->CloseSocketDisconnect();
|
||||||
}
|
}
|
||||||
boost::this_thread::interruption_point();
|
boost::this_thread::interruption_point();
|
||||||
|
@ -1654,8 +1636,8 @@ void ThreadMessageHandler()
|
||||||
// Send messages
|
// Send messages
|
||||||
{
|
{
|
||||||
TRY_LOCK(pnode->cs_vSend, lockSend);
|
TRY_LOCK(pnode->cs_vSend, lockSend);
|
||||||
if (lockSend && fnSendMessages)
|
if (lockSend)
|
||||||
fnSendMessages(pnode, pnode == pnodeTrickle);
|
g_signals.SendMessages(pnode, pnode == pnodeTrickle);
|
||||||
}
|
}
|
||||||
boost::this_thread::interruption_point();
|
boost::this_thread::interruption_point();
|
||||||
}
|
}
|
||||||
|
|
18
src/net.h
18
src/net.h
|
@ -8,6 +8,7 @@
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <boost/array.hpp>
|
#include <boost/array.hpp>
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/signals2/signal.hpp>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
@ -45,16 +46,15 @@ void StartNode(boost::thread_group& threadGroup);
|
||||||
bool StopNode();
|
bool StopNode();
|
||||||
void SocketSendData(CNode *pnode);
|
void SocketSendData(CNode *pnode);
|
||||||
|
|
||||||
//
|
// Signals for message handling
|
||||||
// Handlers that require registration
|
struct CNodeSignals
|
||||||
//
|
{
|
||||||
typedef bool (*ProcessMessagesHandler)(CNode* pfrom);
|
boost::signals2::signal<bool (CNode*)> ProcessMessages;
|
||||||
typedef bool (*SendMessagesHandler)(CNode* pto, bool fSendTrickle);
|
boost::signals2::signal<bool (CNode*, bool)> SendMessages;
|
||||||
typedef void (*StartShutdownHandler)();
|
};
|
||||||
|
|
||||||
|
CNodeSignals& GetNodeSignals();
|
||||||
|
|
||||||
void SetProcessMessagesHandler(ProcessMessagesHandler handler);
|
|
||||||
void SetSendMessagesHandler(SendMessagesHandler handler);
|
|
||||||
void SetStartShutdownHandler(StartShutdownHandler handler);
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue