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,10 +571,8 @@ 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)
|
||||
return InitError(strprintf(_("Unknown -socks proxy version requested: %i"), nSocksVersion));
|
||||
|
|
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 */
|
||||
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
30
src/net.cpp
|
@ -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()
|
|||
{
|
||||
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()
|
|||
// 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
18
src/net.h
|
@ -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);
|
|||
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…
Reference in a new issue