mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-07 03:22:27 +02:00
Have stack manager use bundled stack
This commit is contained in:
parent
b7cdca75b7
commit
766f0dbd32
8 changed files with 25 additions and 254 deletions
|
@ -221,3 +221,18 @@ if (HIFI_MEMORY_DEBUGGING)
|
|||
MESSAGE("-- Memory debugging is enabled")
|
||||
endif (UNIX)
|
||||
endif ()
|
||||
|
||||
set(CPACK_PACKAGE_NAME "High Fidelity")
|
||||
set(CPACK_PACKAGE_VENDOR "High Fidelity, Inc")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "High Fidelity Interface and Stack")
|
||||
set(CPACK_PACKAGE_VERSION "${BUILD_SEQ}")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "${BUILD_SEQ}")
|
||||
set(CPACK_PACKAGE_VERSION_MINOR "0")
|
||||
set(CPACK_PACKAGE_VERSION_PATCH "0")
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "High Fidelity")
|
||||
|
||||
if (WIN32)
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/full-stack-deployment/ DESTINATION "./")
|
||||
endif (WIN32)
|
||||
|
||||
include(CPack)
|
|
@ -53,4 +53,4 @@ else()
|
|||
endif()
|
||||
|
||||
file(GLOB RUNTIME_PLUGINS "${BUNDLE_PLUGIN_DIR}/*.${PLUGIN_EXTENSION}")
|
||||
fixup_bundle("${BUNDLE_EXECUTABLE}" "${RUNTIME_PLUGINS}" "@FIXUP_LIBS@")
|
||||
fixup_bundle("${BUNDLE_EXECUTABLE}" "${RUNTIME_PLUGINS}" "@FIXUP_LIBS@")
|
||||
|
|
|
@ -194,7 +194,6 @@ else (APPLE)
|
|||
|
||||
# link target to external libraries
|
||||
if (WIN32)
|
||||
# target_link_libraries(${TARGET_NAME} wsock32.lib Winmm.lib)
|
||||
target_link_libraries(${TARGET_NAME} wsock32.lib Winmm.lib)
|
||||
else (WIN32)
|
||||
# Nothing else required on linux apparently
|
||||
|
@ -202,3 +201,4 @@ else (APPLE)
|
|||
endif (APPLE)
|
||||
|
||||
package_libraries_for_deployment()
|
||||
consolidate_stack_components()
|
||||
|
|
|
@ -2,6 +2,7 @@ set(TARGET_NAME "stack-manager")
|
|||
set(BUILD_BUNDLE YES)
|
||||
setup_hifi_project(Widgets Gui Svg Core Network WebKitWidgets)
|
||||
add_dependencies(${TARGET_NAME} assignment-client domain-server)
|
||||
include_application_version()
|
||||
|
||||
if (WIN32)
|
||||
target_zlib()
|
||||
|
|
|
@ -81,10 +81,6 @@ void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const Q
|
|||
|
||||
AppDelegate::AppDelegate(int argc, char* argv[]) :
|
||||
QApplication(argc, argv),
|
||||
_qtReady(false),
|
||||
_dsReady(false),
|
||||
_dsResourcesReady(false),
|
||||
_acReady(false),
|
||||
_domainServerProcess(NULL),
|
||||
_acMonitorProcess(NULL),
|
||||
_domainServerName("localhost")
|
||||
|
@ -115,14 +111,15 @@ AppDelegate::AppDelegate(int argc, char* argv[]) :
|
|||
|
||||
_window = new MainWindow();
|
||||
|
||||
createExecutablePath();
|
||||
downloadLatestExecutablesAndRequirements();
|
||||
|
||||
_checkVersionTimer.setInterval(0);
|
||||
connect(&_checkVersionTimer, SIGNAL(timeout()), this, SLOT(checkVersion()));
|
||||
_checkVersionTimer.start();
|
||||
|
||||
connect(this, &QApplication::aboutToQuit, this, &AppDelegate::stopStack);
|
||||
|
||||
_window->setRequirementsLastChecked(QDateTime::currentDateTime().toString());
|
||||
_window->show();
|
||||
toggleStack(true);
|
||||
}
|
||||
|
||||
AppDelegate::~AppDelegate() {
|
||||
|
@ -427,227 +424,6 @@ void AppDelegate::handleContentSetDownloadFinished() {
|
|||
emit domainAddressChanged();
|
||||
}
|
||||
|
||||
void AppDelegate::onFileSuccessfullyInstalled(const QUrl& url) {
|
||||
if (url == GlobalData::getInstance().getRequirementsURL()) {
|
||||
_qtReady = true;
|
||||
} else if (url == GlobalData::getInstance().getAssignmentClientURL()) {
|
||||
_acReady = true;
|
||||
} else if (url == GlobalData::getInstance().getDomainServerURL()) {
|
||||
_dsReady = true;
|
||||
} else if (url == GlobalData::getInstance().getDomainServerResourcesURL()) {
|
||||
_dsResourcesReady = true;
|
||||
}
|
||||
|
||||
if (_qtReady && _acReady && _dsReady && _dsResourcesReady) {
|
||||
_window->setRequirementsLastChecked(QDateTime::currentDateTime().toString());
|
||||
_window->show();
|
||||
toggleStack(true);
|
||||
}
|
||||
}
|
||||
|
||||
void AppDelegate::createExecutablePath() {
|
||||
QDir launchDir(GlobalData::getInstance().getClientsLaunchPath());
|
||||
QDir resourcesDir(GlobalData::getInstance().getClientsResourcesPath());
|
||||
QDir logsDir(GlobalData::getInstance().getLogsPath());
|
||||
if (!launchDir.exists()) {
|
||||
if (QDir().mkpath(launchDir.absolutePath())) {
|
||||
qDebug() << "Successfully created directory: "
|
||||
<< launchDir.absolutePath();
|
||||
} else {
|
||||
qCritical() << "Failed to create directory: "
|
||||
<< launchDir.absolutePath();
|
||||
}
|
||||
}
|
||||
if (!resourcesDir.exists()) {
|
||||
if (QDir().mkpath(resourcesDir.absolutePath())) {
|
||||
qDebug() << "Successfully created directory: "
|
||||
<< resourcesDir.absolutePath();
|
||||
} else {
|
||||
qCritical() << "Failed to create directory: "
|
||||
<< resourcesDir.absolutePath();
|
||||
}
|
||||
}
|
||||
if (!logsDir.exists()) {
|
||||
if (QDir().mkpath(logsDir.absolutePath())) {
|
||||
qDebug() << "Successfully created directory: "
|
||||
<< logsDir.absolutePath();
|
||||
} else {
|
||||
qCritical() << "Failed to create directory: "
|
||||
<< logsDir.absolutePath();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AppDelegate::downloadLatestExecutablesAndRequirements() {
|
||||
// Check if Qt is already installed
|
||||
if (GlobalData::getInstance().getPlatform() == "mac") {
|
||||
if (QDir(GlobalData::getInstance().getClientsLaunchPath() + "QtCore.framework").exists()) {
|
||||
_qtReady = true;
|
||||
}
|
||||
} else if (GlobalData::getInstance().getPlatform() == "win") {
|
||||
if (QFileInfo(GlobalData::getInstance().getClientsLaunchPath() + "Qt5Core.dll").exists()) {
|
||||
_qtReady = true;
|
||||
}
|
||||
} else { // linux
|
||||
if (QFileInfo(GlobalData::getInstance().getClientsLaunchPath() + "libQt5Core.so.5").exists()) {
|
||||
_qtReady = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QFile reqZipFile(GlobalData::getInstance().getRequirementsZipPath());
|
||||
QByteArray reqZipData;
|
||||
if (reqZipFile.open(QIODevice::ReadOnly)) {
|
||||
reqZipData = reqZipFile.readAll();
|
||||
reqZipFile.close();
|
||||
}
|
||||
QFile resZipFile(GlobalData::getInstance().getDomainServerResourcesZipPath());
|
||||
QByteArray resZipData;
|
||||
if (resZipFile.open(QIODevice::ReadOnly)) {
|
||||
resZipData = resZipFile.readAll();
|
||||
resZipFile.close();
|
||||
}
|
||||
|
||||
QDir resourcesDir(GlobalData::getInstance().getClientsResourcesPath());
|
||||
if (!(resourcesDir.entryInfoList(QDir::AllEntries).size() < 3)) {
|
||||
_dsResourcesReady = true;
|
||||
}
|
||||
|
||||
// if the user has set hifiBuildDirectory, don't attempt to download the domain-server or assignement-client
|
||||
if (GlobalData::getInstance().isGetHifiBuildDirectorySet()) {
|
||||
_dsReady = true;
|
||||
_acReady = true;
|
||||
} else {
|
||||
QByteArray dsData;
|
||||
QFile dsFile(GlobalData::getInstance().getDomainServerExecutablePath());
|
||||
if (dsFile.open(QIODevice::ReadOnly)) {
|
||||
dsData = dsFile.readAll();
|
||||
dsFile.close();
|
||||
}
|
||||
QByteArray acData;
|
||||
QFile acFile(GlobalData::getInstance().getAssignmentClientExecutablePath());
|
||||
if (acFile.open(QIODevice::ReadOnly)) {
|
||||
acData = acFile.readAll();
|
||||
acFile.close();
|
||||
}
|
||||
|
||||
QNetworkRequest acReq(QUrl(GlobalData::getInstance().getAssignmentClientMD5URL()));
|
||||
QNetworkReply* acReply = _manager->get(acReq);
|
||||
QEventLoop acLoop;
|
||||
connect(acReply, SIGNAL(finished()), &acLoop, SLOT(quit()));
|
||||
acLoop.exec();
|
||||
QByteArray acMd5Data = acReply->readAll().trimmed();
|
||||
if (GlobalData::getInstance().getPlatform() == "win") {
|
||||
// fix for reading the MD5 hash from Windows-generated
|
||||
// binary data of the MD5 hash
|
||||
QTextStream stream(acMd5Data);
|
||||
stream >> acMd5Data;
|
||||
}
|
||||
|
||||
// fix for Mac and Linux network accessibility
|
||||
if (acMd5Data.size() == 0) {
|
||||
// network is not accessible
|
||||
qDebug() << "Could not connect to the internet.";
|
||||
_window->show();
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << "AC MD5: " << acMd5Data;
|
||||
if (acMd5Data.toLower() == QCryptographicHash::hash(acData, QCryptographicHash::Md5).toHex()) {
|
||||
_acReady = true;
|
||||
}
|
||||
|
||||
|
||||
QNetworkRequest dsReq(QUrl(GlobalData::getInstance().getDomainServerMD5URL()));
|
||||
QNetworkReply* dsReply = _manager->get(dsReq);
|
||||
QEventLoop dsLoop;
|
||||
connect(dsReply, SIGNAL(finished()), &dsLoop, SLOT(quit()));
|
||||
dsLoop.exec();
|
||||
QByteArray dsMd5Data = dsReply->readAll().trimmed();
|
||||
if (GlobalData::getInstance().getPlatform() == "win") {
|
||||
// fix for reading the MD5 hash from Windows generated
|
||||
// binary data of the MD5 hash
|
||||
QTextStream stream(dsMd5Data);
|
||||
stream >> dsMd5Data;
|
||||
}
|
||||
qDebug() << "DS MD5: " << dsMd5Data;
|
||||
if (dsMd5Data.toLower() == QCryptographicHash::hash(dsData, QCryptographicHash::Md5).toHex()) {
|
||||
_dsReady = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (_qtReady) {
|
||||
// check MD5 of requirements.zip only if Qt is found
|
||||
QNetworkRequest reqZipReq(QUrl(GlobalData::getInstance().getRequirementsMD5URL()));
|
||||
QNetworkReply* reqZipReply = _manager->get(reqZipReq);
|
||||
QEventLoop reqZipLoop;
|
||||
connect(reqZipReply, SIGNAL(finished()), &reqZipLoop, SLOT(quit()));
|
||||
reqZipLoop.exec();
|
||||
QByteArray reqZipMd5Data = reqZipReply->readAll().trimmed();
|
||||
if (GlobalData::getInstance().getPlatform() == "win") {
|
||||
// fix for reading the MD5 hash from Windows generated
|
||||
// binary data of the MD5 hash
|
||||
QTextStream stream(reqZipMd5Data);
|
||||
stream >> reqZipMd5Data;
|
||||
}
|
||||
qDebug() << "Requirements ZIP MD5: " << reqZipMd5Data;
|
||||
if (reqZipMd5Data.toLower() != QCryptographicHash::hash(reqZipData, QCryptographicHash::Md5).toHex()) {
|
||||
_qtReady = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (_dsResourcesReady) {
|
||||
// check MD5 of resources.zip only if Domain Server
|
||||
// resources are installed
|
||||
QNetworkRequest resZipReq(QUrl(GlobalData::getInstance().getDomainServerResourcesMD5URL()));
|
||||
QNetworkReply* resZipReply = _manager->get(resZipReq);
|
||||
QEventLoop resZipLoop;
|
||||
connect(resZipReply, SIGNAL(finished()), &resZipLoop, SLOT(quit()));
|
||||
resZipLoop.exec();
|
||||
QByteArray resZipMd5Data = resZipReply->readAll().trimmed();
|
||||
if (GlobalData::getInstance().getPlatform() == "win") {
|
||||
// fix for reading the MD5 hash from Windows generated
|
||||
// binary data of the MD5 hash
|
||||
QTextStream stream(resZipMd5Data);
|
||||
stream >> resZipMd5Data;
|
||||
}
|
||||
qDebug() << "Domain Server Resources ZIP MD5: " << resZipMd5Data;
|
||||
if (resZipMd5Data.toLower() != QCryptographicHash::hash(resZipData, QCryptographicHash::Md5).toHex()) {
|
||||
_dsResourcesReady = false;
|
||||
}
|
||||
}
|
||||
|
||||
DownloadManager* downloadManager = 0;
|
||||
if (!_qtReady || !_acReady || !_dsReady || !_dsResourcesReady) {
|
||||
// initialise DownloadManager
|
||||
downloadManager = new DownloadManager(_manager);
|
||||
downloadManager->setWindowModality(Qt::ApplicationModal);
|
||||
connect(downloadManager, SIGNAL(fileSuccessfullyInstalled(QUrl)),
|
||||
SLOT(onFileSuccessfullyInstalled(QUrl)));
|
||||
downloadManager->show();
|
||||
} else {
|
||||
_window->setRequirementsLastChecked(QDateTime::currentDateTime().toString());
|
||||
_window->show();
|
||||
toggleStack(true);
|
||||
}
|
||||
|
||||
if (!_qtReady) {
|
||||
downloadManager->downloadFile(GlobalData::getInstance().getRequirementsURL());
|
||||
}
|
||||
|
||||
if (!_acReady) {
|
||||
downloadManager->downloadFile(GlobalData::getInstance().getAssignmentClientURL());
|
||||
}
|
||||
|
||||
if (!_dsReady) {
|
||||
downloadManager->downloadFile(GlobalData::getInstance().getDomainServerURL());
|
||||
}
|
||||
|
||||
if (!_dsResourcesReady) {
|
||||
downloadManager->downloadFile(GlobalData::getInstance().getDomainServerResourcesURL());
|
||||
}
|
||||
}
|
||||
|
||||
void AppDelegate::checkVersion() {
|
||||
QNetworkRequest latestVersionRequest((QUrl(CHECK_BUILDS_URL)));
|
||||
latestVersionRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
|
||||
|
|
|
@ -53,7 +53,6 @@ signals:
|
|||
void indexPathChangeResponse(bool wasSuccessful);
|
||||
void stackStateChanged(bool isOn);
|
||||
private slots:
|
||||
void onFileSuccessfullyInstalled(const QUrl& url);
|
||||
void requestDomainServerID();
|
||||
void handleDomainIDReply();
|
||||
void handleDomainGetReply();
|
||||
|
@ -64,16 +63,10 @@ private slots:
|
|||
|
||||
private:
|
||||
void parseCommandLine();
|
||||
void createExecutablePath();
|
||||
void downloadLatestExecutablesAndRequirements();
|
||||
|
||||
void changeDomainServerIndexPath(const QString& newPath);
|
||||
|
||||
QNetworkAccessManager* _manager;
|
||||
bool _qtReady;
|
||||
bool _dsReady;
|
||||
bool _dsResourcesReady;
|
||||
bool _acReady;
|
||||
BackgroundProcess* _domainServerProcess;
|
||||
BackgroundProcess* _acMonitorProcess;
|
||||
QHash<QUuid, BackgroundProcess*> _scriptProcesses;
|
||||
|
|
|
@ -32,11 +32,8 @@ GlobalData::GlobalData() {
|
|||
_resourcePath = "resources/";
|
||||
_assignmentClientExecutable = "assignment-client";
|
||||
_domainServerExecutable = "domain-server";
|
||||
QString applicationSupportDirectory = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
|
||||
if (PR_BUILD) {
|
||||
applicationSupportDirectory += "/pr-binaries";
|
||||
}
|
||||
|
||||
QString applicationSupportDirectory = QCoreApplication::applicationDirPath();
|
||||
|
||||
_clientsLaunchPath = QDir::toNativeSeparators(applicationSupportDirectory + "/");
|
||||
_clientsResourcePath = QDir::toNativeSeparators(applicationSupportDirectory + "/" + _resourcePath);
|
||||
|
||||
|
@ -49,18 +46,6 @@ GlobalData::GlobalData() {
|
|||
_domainServerExecutablePath.append(".exe");
|
||||
}
|
||||
|
||||
_requirementsURL = urlBase + "/binaries/" + _platform + "/requirements/requirements.zip";
|
||||
_requirementsZipPath = _clientsLaunchPath + "requirements.zip";
|
||||
_requirementsMD5URL = urlBase + "/binaries/" + _platform + "/requirements/requirements.md5";
|
||||
_assignmentClientURL = urlBase + "/binaries/" + _platform + "/assignment-client" + (_platform == "win" ? "/assignment-client.exe" : "/assignment-client");
|
||||
_domainServerResourcesURL = urlBase + "/binaries/" + _platform + "/domain-server/resources.zip";
|
||||
_domainServerResourcesZipPath = _clientsLaunchPath + "resources.zip";
|
||||
_domainServerResourcesMD5URL = urlBase + "/binaries/" + _platform + "/domain-server/resources.md5";
|
||||
_domainServerURL = urlBase + "/binaries/" + _platform + "/domain-server" + (_platform == "win" ? "/domain-server.exe" : "/domain-server");
|
||||
|
||||
_assignmentClientMD5URL = urlBase + "/binaries/" + _platform + "/assignment-client/assignment-client.md5";
|
||||
_domainServerMD5URL = urlBase + "/binaries/" + _platform + "/domain-server/domain-server.md5";
|
||||
|
||||
_defaultDomain = "localhost";
|
||||
_logsPath = QDir::toNativeSeparators(_clientsLaunchPath + "logs/");
|
||||
_availableAssignmentTypes.insert("audio-mixer", 0);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#ifndef hifi_GlobalData_h
|
||||
#define hifi_GlobalData_h
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QString>
|
||||
#include <QHash>
|
||||
|
||||
|
|
Loading…
Reference in a new issue