From d50a8f630982f8555d9f6cc9a2fe612f04902e95 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 3 Nov 2014 12:40:56 -0800 Subject: [PATCH] send a heartbeat to data server every 15s --- domain-server/src/DomainServer.cpp | 34 ++++++++++++++++++------------ domain-server/src/DomainServer.h | 5 ++++- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 22c194ffb0..3cea933246 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -50,6 +50,7 @@ DomainServer::DomainServer(int argc, char* argv[]) : _hostname(), _webAuthenticationStateSet(), _cookieSessionHash(), + _automaticNetworkingSetting(), _settingsManager() { LogUtils::init(); @@ -327,17 +328,17 @@ void DomainServer::setupAutomaticNetworking() { return; } - QString automaticNetworkValue = + _automaticNetworkingSetting = _settingsManager.valueOrDefaultValueForKeyPath(METAVERSE_AUTOMATIC_NETWORKING_KEY_PATH).toString(); - if (automaticNetworkValue == IP_ONLY_AUTOMATIC_NETWORKING_VALUE || - automaticNetworkValue == FULL_AUTOMATIC_NETWORKING_VALUE) { + if (_automaticNetworkingSetting == IP_ONLY_AUTOMATIC_NETWORKING_VALUE || + _automaticNetworkingSetting == FULL_AUTOMATIC_NETWORKING_VALUE) { LimitedNodeList* nodeList = LimitedNodeList::getInstance(); const QUuid& domainID = nodeList->getSessionUUID(); if (!domainID.isNull()) { - qDebug() << "domain-server" << automaticNetworkValue << "automatic networking enabled for ID" + qDebug() << "domain-server" << _automaticNetworkingSetting << "automatic networking enabled for ID" << uuidStringWithoutCurlyBraces(domainID) << "via" << _oauthProviderURL.toString(); const int STUN_IP_ADDRESS_CHECK_INTERVAL_MSECS = 30 * 1000; @@ -347,7 +348,7 @@ void DomainServer::setupAutomaticNetworking() { QTimer* dynamicIPTimer = new QTimer(this); connect(dynamicIPTimer, &QTimer::timeout, this, &DomainServer::requestCurrentPublicSocketViaSTUN); - if (automaticNetworkValue == IP_ONLY_AUTOMATIC_NETWORKING_VALUE) { + if (_automaticNetworkingSetting == IP_ONLY_AUTOMATIC_NETWORKING_VALUE) { dynamicIPTimer->start(STUN_IP_ADDRESS_CHECK_INTERVAL_MSECS); // send public socket changes to the data server so nodes can find us at our new IP @@ -364,8 +365,8 @@ void DomainServer::setupAutomaticNetworking() { connect(nodeList, &LimitedNodeList::localSockAddrChanged, this, &DomainServer::sendHeartbeatToIceServer); connect(nodeList, &LimitedNodeList::publicSockAddrChanged, this, &DomainServer::sendHeartbeatToIceServer); - // tell the data server which type of automatic networking we are using - sendHeartbeatToDataServer(automaticNetworkValue); + // send our heartbeat to data server so it knows what our network settings are + sendHeartbeatToDataServer(); } // attempt to update our sockets now @@ -378,8 +379,17 @@ void DomainServer::setupAutomaticNetworking() { return; } } else { - sendHeartbeatToDataServer(automaticNetworkValue); + sendHeartbeatToDataServer(); } + + qDebug() << "Updating automatic networking setting in domain-server to" << _automaticNetworkingSetting; + + // no matter the auto networking settings we should heartbeat to the data-server every 15s + const int DOMAIN_SERVER_DATA_WEB_HEARTBEAT_SECONDS = 15; + + QTimer* dataHeartbeatTimer = new QTimer(this); + connect(dataHeartbeatTimer, &QTimer::timeout, this, &DomainServer::sendHeartbeatToDataServer); + dataHeartbeatTimer->start(DOMAIN_SERVER_DATA_WEB_HEARTBEAT_SECONDS); } void DomainServer::loginFailed() { @@ -1081,10 +1091,10 @@ QJsonObject jsonForDomainSocketUpdate(const HifiSockAddr& socket) { const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking"; void DomainServer::performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr) { - sendHeartbeatToDataServer(IP_ONLY_AUTOMATIC_NETWORKING_VALUE, newPublicSockAddr.getAddress().toString()); + updateDomainInDataServer(newPublicSockAddr.getAddress().toString()); } -void DomainServer::sendHeartbeatToDataServer(const QString& newSetting, const QString& networkAddress) { +void DomainServer::updateDomainInDataServer(const QString& networkAddress) { const QString DOMAIN_UPDATE = "/api/v1/domains/%1"; const QUuid& domainID = LimitedNodeList::getInstance()->getSessionUUID(); @@ -1097,9 +1107,7 @@ void DomainServer::sendHeartbeatToDataServer(const QString& newSetting, const QS domainObject[PUBLIC_NETWORK_ADDRESS_KEY] = networkAddress; } - qDebug() << "Updating automatic networking setting in domain-server to" << newSetting; - - domainObject[AUTOMATIC_NETWORKING_KEY] = newSetting; + domainObject[AUTOMATIC_NETWORKING_KEY] = _automaticNetworkingSetting; QString domainUpdateJSON = QString("{\"domain\": %1 }").arg(QString(QJsonDocument(domainObject).toJson())); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 13bc4a0474..e5f321639c 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -66,7 +66,7 @@ private slots: void requestCurrentPublicSocketViaSTUN(); void performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr); void performICEUpdates(); - void sendHeartbeatToDataServer(const QString& newSetting, const QString& networkAddress = QString()); + void sendHeartbeatToDataServer() { updateDomainInDataServer(); } void sendHeartbeatToIceServer(); void sendICEPingPackets(); private: @@ -77,6 +77,7 @@ private: bool optionallySetupAssignmentPayment(); void setupAutomaticNetworking(); + void updateDomainInDataServer(const QString& networkAddress = QString()); void processICEPingReply(const QByteArray& packet, const HifiSockAddr& senderSockAddr); void processICEHeartbeatResponse(const QByteArray& packet); @@ -150,6 +151,8 @@ private: QHash _connectingICEPeers; QHash _connectedICEPeers; + QString _automaticNetworkingSetting; + DomainServerSettingsManager _settingsManager; };