Add event allowing client to track server's network connectivity.

This commit is contained in:
Stefan Thomas
2012-12-06 12:20:16 -08:00
parent d3acc2cf75
commit cbb1e50222
2 changed files with 22 additions and 0 deletions

View File

@@ -867,8 +867,10 @@ void NetworkOPs::consensusViewChange()
void NetworkOPs::setMode(OperatingMode om)
{
if (mMode == om) return;
if ((om >= omCONNECTED) && (mMode == omDISCONNECTED))
mConnectTime = boost::posix_time::second_clock::universal_time();
Log lg((om < mMode) ? lsWARNING : lsINFO);
if (om == omDISCONNECTED)
lg << "STATE->Disconnected";
@@ -878,6 +880,25 @@ void NetworkOPs::setMode(OperatingMode om)
lg << "STATE->Tracking";
else
lg << "STATE->Full";
if ((om == omDISCONNECTED) || (mMode == omDISCONNECTED))
{
boost::recursive_mutex::scoped_lock sl(mMonitorLock);
if (!mSubServer.empty())
{
Json::Value jvObj(Json::objectValue);
jvObj["type"] = "serverStatus";
jvObj["server_status"] = om >= omCONNECTED ? "ok" : "noNetwork";
BOOST_FOREACH(InfoSub* ispListener, mSubServer)
{
ispListener->send(jvObj);
}
}
}
mMode = om;
}

View File

@@ -2084,6 +2084,7 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest)
if(streamName=="server")
{
mNetOps->subServer(mInfoSub, jvResult);
jvResult["server_status"] = mNetOps->available() ? "ok" : "noNetwork";
}else if(streamName=="ledger")
{
mNetOps->subLedger(mInfoSub, jvResult);