entity server timout

This commit is contained in:
Dante Ruiz 2018-11-13 15:13:30 -08:00
parent 812373cdab
commit 20ad05726e
5 changed files with 31 additions and 17 deletions

View file

@ -56,7 +56,7 @@ StackView {
Qt.callLater(function() {
addressBarDialog.keyboardEnabled = HMD.active;
addressLine.forceActiveFocus();
addressBarDialog.raised = true;
addressBarDialog.keyboardRaised = true;
})
}

View file

@ -371,6 +371,8 @@ static const QString INFO_HELP_PATH = "html/tabletHelp.html";
static const unsigned int THROTTLED_SIM_FRAMERATE = 15;
static const int THROTTLED_SIM_FRAME_PERIOD_MS = MSECS_PER_SECOND / THROTTLED_SIM_FRAMERATE;
static const int ENTITY_SERVER_ADDED_TIMEOUT = 5000;
static const int ENTITY_SERVER_CONNECTION_TIMEOUT = 5000;
static const uint32_t INVALID_FRAME = UINT32_MAX;
@ -1224,6 +1226,18 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
getOverlays().deleteOverlay(getTabletScreenID());
getOverlays().deleteOverlay(getTabletHomeButtonID());
getOverlays().deleteOverlay(getTabletFrameID());
_failedToConnectToEntityServer = false;
});
_entityServerConnectionTimer.setSingleShot(true);
connect(&_entityServerConnectionTimer, &QTimer::timeout, this, &Application::setFailedToConnectToEntityServer);
connect(&domainHandler, &DomainHandler::connectedToDomain, this, [this]() {
if (!isServerlessMode()) {
_entityServerConnectionTimer.setInterval(ENTITY_SERVER_ADDED_TIMEOUT);
_entityServerConnectionTimer.start();
_failedToConnectToEntityServer = false;
}
});
connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &Application::domainConnectionRefused);
@ -6630,7 +6644,13 @@ void Application::resettingDomain() {
}
void Application::nodeAdded(SharedNodePointer node) const {
// nothing to do here
if (node->getType() == NodeType::EntityServer) {
if (!_failedToConnectToEntityServer) {
_entityServerConnectionTimer.stop();
_entityServerConnectionTimer.setInterval(ENTITY_SERVER_CONNECTION_TIMEOUT);
_entityServerConnectionTimer.start();
}
}
}
void Application::nodeActivated(SharedNodePointer node) {
@ -6658,6 +6678,10 @@ void Application::nodeActivated(SharedNodePointer node) {
if (node->getType() == NodeType::EntityServer) {
_queryExpiry = SteadyClock::now();
_octreeQuery.incrementConnectionID();
if (!_failedToConnectToEntityServer) {
_entityServerConnectionTimer.stop();
}
}
if (node->getType() == NodeType::AudioMixer && !isInterstitialMode()) {

View file

@ -307,6 +307,7 @@ public:
bool isServerlessMode() const;
bool isInterstitialMode() const { return _interstitialMode; }
bool failedToConnectToEntityServer() const { return _failedToConnectToEntityServer; }
void replaceDomainContent(const QString& url);
@ -460,6 +461,7 @@ private slots:
void loadSettings();
void saveSettings() const;
void setFailedToConnectToEntityServer() { _failedToConnectToEntityServer = true; }
bool acceptSnapshot(const QString& urlString);
bool askToSetAvatarUrl(const QString& url);
@ -710,6 +712,7 @@ private:
bool _isForeground = true; // starts out assumed to be in foreground
bool _isGLInitialized { false };
bool _physicsEnabled { false };
bool _failedToConnectToEntityServer { false };
bool _reticleClickPressed { false };
@ -756,6 +759,7 @@ private:
QStringList _addAssetToWorldInfoMessages; // Info message
QTimer _addAssetToWorldInfoTimer;
QTimer _addAssetToWorldErrorTimer;
mutable QTimer _entityServerConnectionTimer;
FileScriptingInterface* _fileDownload;
AudioInjectorPointer _snapshotSoundInjector;

View file

@ -11,9 +11,7 @@
#include "SafeLanding.h"
#include <NodeList.h>
#include <SharedUtil.h>
#include <NumericalConstants.h>
#include "EntityTreeRenderer.h"
#include "RenderableModelEntityItem.h"
@ -21,7 +19,6 @@
#include "Application.h"
const int SafeLanding::SEQUENCE_MODULO = std::numeric_limits<OCTREE_PACKET_SEQUENCE>::max() + 1;
const quint64 MAX_ELAPSED_TIME = 1000; // msec
namespace {
template<typename T> bool lessThanWraparound(int a, int b) {
@ -110,9 +107,7 @@ void SafeLanding::noteReceivedsequenceNumber(int sequenceNumber) {
}
bool SafeLanding::isLoadSequenceComplete() {
quint64 elapsedTime = (usecTimestampNow() - _startTime) / USECS_PER_MSEC;
if ((isEntityLoadingComplete() && isSequenceNumbersComplete()) ||
(elapsedTime >= MAX_ELAPSED_TIME && isEntityServerNotRunning() && _sequenceNumbers.empty())) {
if ((isEntityLoadingComplete() && isSequenceNumbersComplete()) || qApp->failedToConnectToEntityServer()) {
Locker lock(_lock);
_initialStart = INVALID_SEQUENCE;
_initialEnd = INVALID_SEQUENCE;
@ -124,14 +119,6 @@ bool SafeLanding::isLoadSequenceComplete() {
return !_trackingEntities;
}
bool SafeLanding::isEntityServerNotRunning() {
auto nodeList = DependencyManager::get<NodeList>();
const auto& domainHandler = nodeList->getDomainHandler();
auto entityServer = nodeList->soloNodeOfType(NodeType::EntityServer);
return (domainHandler.isConnected() && !entityServer);
}
float SafeLanding::loadingProgressPercentage() {
Locker lock(_lock);
static const int MINIMUM_TRACKED_ENTITY_STABILITY_COUNT = 15;

View file

@ -40,7 +40,6 @@ private:
bool isSequenceNumbersComplete();
void debugDumpSequenceIDs() const;
bool isEntityLoadingComplete();
bool isEntityServerNotRunning();
std::mutex _lock;
using Locker = std::lock_guard<std::mutex>;