handle domain changes via address bar

This commit is contained in:
Stephen Birarda 2014-09-11 10:45:45 -07:00
parent dd1b23044f
commit aaabe6b1e1
6 changed files with 30 additions and 5 deletions

View file

@ -407,6 +407,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
connect(_window, &MainWindow::windowGeometryChanged,
_runningScriptsWidget, &RunningScriptsWidget::setBoundary);
// connect to the domainChangeRequired signal on AddressManager
connect(&AddressManager::getInstance(), &AddressManager::domainChangeRequired, this, &Application::changeDomainHostname);
//When -url in command line, teleport to location
urlGoTo(argc, constArgv);
@ -3391,6 +3394,15 @@ void Application::updateLocationInServer() {
}
}
void Application::changeDomainHostname(const QString &newDomainHostname) {
// tell the MyAvatar object to send a kill packet so that it dissapears from its old avatar mixer immediately
_myAvatar->sendKillAvatar();
// call the domain hostname change as a queued connection on the nodelist
QMetaObject::invokeMethod(&NodeList::getInstance()->getDomainHandler(), "setHostname",
Q_ARG(const QString&, newDomainHostname));
}
void Application::domainChanged(const QString& domainHostname) {
updateWindowTitle();

View file

@ -313,6 +313,7 @@ signals:
void importDone();
public slots:
void changeDomainHostname(const QString& newDomainHostname);
void domainChanged(const QString& domainHostname);
void updateWindowTitle();
void updateLocationInServer();

View file

@ -1802,10 +1802,7 @@ void MyAvatar::resetSize() {
qDebug("Reseted scale to %f", _targetScale);
}
void MyAvatar::goToLocation(const glm::vec3& newPosition, bool hasOrientation, const glm::vec3& newOrientation) {
// send a node kill request, indicating to other clients that they should play the "disappeared" effect
sendKillAvatar();
void MyAvatar::goToLocation(const glm::vec3& newPosition, bool hasOrientation, const glm::vec3& newOrientation) {
glm::quat quatOrientation = getOrientation();
qDebug().nospace() << "MyAvatar goToLocation - moving to " << newPosition.x << ", "

View file

@ -42,10 +42,23 @@ void AddressManager::handleLookupString(const QString& lookupString) {
bool AddressManager::lookupHandledAsNetworkAddress(const QString& lookupString) {
const QString IP_ADDRESS_REGEX_STRING = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}"
"([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
const QString HOSTNAME_REGEX_STRING = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*"
"([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$";
QRegExp hostnameRegex(HOSTNAME_REGEX_STRING);
if (hostnameRegex.indexIn(lookupString) != -1) {
emit domainChangeRequired(hostnameRegex.cap(0));
return true;
}
QRegExp ipAddressRegex(IP_ADDRESS_REGEX_STRING);
if (ipAddressRegex.indexIn(lookupString) != -1) {
emit domainChangeRequired(ipAddressRegex.cap(0));
return true;
}
return false;
}

View file

@ -23,6 +23,7 @@ public:
void handleLookupString(const QString& lookupString);
signals:
void domainChangeRequired(const QString& newHostname);
void locationChangeRequired(const glm::vec3& newPosition, bool hasOrientationChange, const glm::vec3& newOrientation);
private:
bool lookupHandledAsNetworkAddress(const QString& lookupString);

View file

@ -40,7 +40,6 @@ public:
void setUUID(const QUuid& uuid) { _uuid = uuid; }
const QString& getHostname() const { return _hostname; }
void setHostname(const QString& hostname);
const QHostAddress& getIP() const { return _sockAddr.getAddress(); }
void setIPToLocalhost() { _sockAddr.setAddress(QHostAddress(QHostAddress::LocalHost)); }
@ -63,6 +62,8 @@ public:
void parseDTLSRequirementPacket(const QByteArray& dtlsRequirementPacket);
void softReset();
public slots:
void setHostname(const QString& hostname);
private slots:
void completedHostnameLookup(const QHostInfo& hostInfo);