diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index e32df6bc62..fc70c341b7 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -175,10 +175,6 @@ if (WIN32) set_property(TARGET ${TARGET_NAME} APPEND_STRING PROPERTY LINK_FLAGS_DEBUG "/OPT:NOREF /OPT:NOICF") endif() -if (NOT ANDROID) - set(NON_ANDROID_LIBRARIES steamworks-wrapper) -endif () - # link required hifi libraries link_hifi_libraries( shared octree gpu gl gpu-gl procedural model render diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4ec29b636b..513c1dcf26 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -90,9 +90,10 @@ #include #include #include +#include #include #include -#include +#include #include #include #include @@ -103,7 +104,6 @@ #include #include #include -#include #include #include #include @@ -421,6 +421,10 @@ bool setupEssentials(int& argc, char** argv) { Setting::preInit(); + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + steamClient->init(); + } + #if defined(Q_OS_WIN) // Select appropriate audio DLL QString audioDLLPath = QCoreApplication::applicationDirPath(); @@ -551,7 +555,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _maxOctreePPS(maxOctreePacketsPerSecond.get()), _lastFaceTrackerUpdate(0) { - setProperty(hifi::properties::STEAM, SteamClient::isRunning()); + auto steamClient = PluginManager::getInstance()->getSteamClientPlugin(); + setProperty(hifi::properties::STEAM, (steamClient && steamClient->isRunning())); setProperty(hifi::properties::CRASHED, _previousSessionCrashed); { @@ -606,7 +611,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _deadlockWatchdogThread = new DeadlockWatchdogThread(); _deadlockWatchdogThread->start(); - qCDebug(interfaceapp) << "[VERSION] SteamVR buildID:" << SteamClient::getSteamVRBuildID(); + if (steamClient) { + qCDebug(interfaceapp) << "[VERSION] SteamVR buildID:" << steamClient->getSteamVRBuildID(); + } qCDebug(interfaceapp) << "[VERSION] Build sequence:" << qPrintable(applicationVersion()); qCDebug(interfaceapp) << "[VERSION] MODIFIED_ORGANIZATION:" << BuildInfo::MODIFIED_ORGANIZATION; qCDebug(interfaceapp) << "[VERSION] VERSION:" << BuildInfo::VERSION; @@ -1695,6 +1702,10 @@ Application::~Application() { Leapmotion::destroy(); + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + steamClient->shutdown(); + } + #if 0 ConnexionClient::getInstance().destroy(); #endif @@ -1874,8 +1885,10 @@ void Application::initializeUi() { rootContext->setContextProperty("ApplicationCompositor", &getApplicationCompositor()); - rootContext->setContextProperty("Steam", new SteamScriptingInterface(engine)); - + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + rootContext->setContextProperty("Steam", new SteamScriptingInterface(engine, steamClient.get())); + } + _glWidget->installEventFilter(offscreenUi.data()); offscreenUi->setMouseTranslator([=](const QPointF& pt) { @@ -3201,7 +3214,9 @@ void Application::idle(float nsecsElapsed) { PROFILE_RANGE(__FUNCTION__); - SteamClient::runCallbacks(); + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + steamClient->runCallbacks(); + } float secondsSinceLastUpdate = nsecsElapsed / NSECS_PER_MSEC / MSECS_PER_SECOND; @@ -3533,12 +3548,16 @@ void Application::init() { _timerStart.start(); _lastTimeUpdated.start(); - // when +connect_lobby in command line, join steam lobby - const QString STEAM_LOBBY_COMMAND_LINE_KEY = "+connect_lobby"; - int lobbyIndex = arguments().indexOf(STEAM_LOBBY_COMMAND_LINE_KEY); - if (lobbyIndex != -1) { - QString lobbyId = arguments().value(lobbyIndex + 1); - SteamClient::joinLobby(lobbyId); + + + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + // when +connect_lobby in command line, join steam lobby + const QString STEAM_LOBBY_COMMAND_LINE_KEY = "+connect_lobby"; + int lobbyIndex = arguments().indexOf(STEAM_LOBBY_COMMAND_LINE_KEY); + if (lobbyIndex != -1) { + QString lobbyId = arguments().value(lobbyIndex + 1); + steamClient->joinLobby(lobbyId); + } } @@ -5193,8 +5212,9 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGlobalObject("UserActivityLogger", DependencyManager::get().data()); scriptEngine->registerGlobalObject("Users", DependencyManager::get().data()); - scriptEngine->registerGlobalObject("Steam", new SteamScriptingInterface(scriptEngine)); - + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + scriptEngine->registerGlobalObject("Steam", new SteamScriptingInterface(scriptEngine, steamClient.get())); + } auto scriptingInterface = DependencyManager::get(); scriptEngine->registerGlobalObject("Controller", scriptingInterface.data()); UserInputMapper::registerControllerTypes(scriptEngine); diff --git a/interface/src/DiscoverabilityManager.cpp b/interface/src/DiscoverabilityManager.cpp index eb9a7c7f6d..8fcc1e5477 100644 --- a/interface/src/DiscoverabilityManager.cpp +++ b/interface/src/DiscoverabilityManager.cpp @@ -15,7 +15,8 @@ #include #include #include -#include +#include +#include #include #include @@ -111,7 +112,9 @@ void DiscoverabilityManager::updateLocation() { } // Update Steam - SteamClient::updateLocation(domainHandler.getHostname(), addressManager->currentFacingShareableAddress()); + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + steamClient->updateLocation(domainHandler.getHostname(), addressManager->currentFacingShareableAddress()); + } } void DiscoverabilityManager::handleHeartbeatResponse(QNetworkReply& requestReply) { diff --git a/interface/src/main.cpp b/interface/src/main.cpp index a88388050b..3930acce60 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -22,7 +22,6 @@ #include #include -#include #include "AddressManager.h" #include "Application.h" @@ -129,8 +128,10 @@ int main(int argc, const char* argv[]) { } QCommandLineParser parser; + QCommandLineOption checkMinSpecOption("checkMinSpec", "Check machine has minimum specifications"); QCommandLineOption runServerOption("runServer", "Whether to run the server"); QCommandLineOption serverContentPathOption("serverContentPath", "Where to find server content", "serverContentPath"); + parser.addOption(checkMinSpecOption); parser.addOption(runServerOption); parser.addOption(serverContentPathOption); parser.parse(arguments); @@ -157,11 +158,9 @@ int main(int argc, const char* argv[]) { // or in the main window ctor, before GL startup. Application::initPlugins(arguments); - SteamClient::init(); - #ifdef Q_OS_WIN // If we're running in steam mode, we need to do an explicit check to ensure we're up to the required min spec - if (SteamClient::isRunning()) { + if (parser.isSet(checkMinSpecOption)) { QString appPath; { char filename[MAX_PATH]; @@ -245,8 +244,6 @@ int main(int argc, const char* argv[]) { Application::shutdownPlugins(); - SteamClient::shutdown(); - qCDebug(interfaceapp, "Normal exit."); #if !defined(DEBUG) && !defined(Q_OS_LINUX) // HACK: exit immediately (don't handle shutdown callbacks) for Release build diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index d27c3e907a..e333bb1b88 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -17,7 +17,8 @@ #include #include -#include +#include +#include #include "AccountManager.h" #include "DependencyManager.h" @@ -56,7 +57,8 @@ void LoginDialog::toggleAction() { } bool LoginDialog::isSteamRunning() const { - return SteamClient::isRunning(); + auto steamClient = PluginManager::getInstance()->getSteamClientPlugin(); + return steamClient && steamClient->isRunning(); } void LoginDialog::login(const QString& username, const QString& password) const { @@ -66,69 +68,75 @@ void LoginDialog::login(const QString& username, const QString& password) const void LoginDialog::loginThroughSteam() { qDebug() << "Attempting to login through Steam"; - SteamClient::requestTicket([this](Ticket ticket) { - if (ticket.isNull()) { - emit handleLoginFailed(); - return; - } + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + steamClient->requestTicket([this](Ticket ticket) { + if (ticket.isNull()) { + emit handleLoginFailed(); + return; + } - DependencyManager::get()->requestAccessTokenWithSteam(ticket); - }); + DependencyManager::get()->requestAccessTokenWithSteam(ticket); + }); + } } void LoginDialog::linkSteam() { qDebug() << "Attempting to link Steam account"; - SteamClient::requestTicket([this](Ticket ticket) { - if (ticket.isNull()) { - emit handleLoginFailed(); - return; - } + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + steamClient->requestTicket([this](Ticket ticket) { + if (ticket.isNull()) { + emit handleLoginFailed(); + return; + } - JSONCallbackParameters callbackParams; - callbackParams.jsonCallbackReceiver = this; - callbackParams.jsonCallbackMethod = "linkCompleted"; - callbackParams.errorCallbackReceiver = this; - callbackParams.errorCallbackMethod = "linkFailed"; + JSONCallbackParameters callbackParams; + callbackParams.jsonCallbackReceiver = this; + callbackParams.jsonCallbackMethod = "linkCompleted"; + callbackParams.errorCallbackReceiver = this; + callbackParams.errorCallbackMethod = "linkFailed"; - const QString LINK_STEAM_PATH = "api/v1/user/steam/link"; + const QString LINK_STEAM_PATH = "api/v1/user/steam/link"; - QJsonObject payload; - payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket))); + QJsonObject payload; + payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket))); - auto accountManager = DependencyManager::get(); - accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, - QNetworkAccessManager::PostOperation, callbackParams, - QJsonDocument(payload).toJson()); - }); + auto accountManager = DependencyManager::get(); + accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, + QNetworkAccessManager::PostOperation, callbackParams, + QJsonDocument(payload).toJson()); + }); + } } void LoginDialog::createAccountFromStream(QString username) { qDebug() << "Attempting to create account from Steam info"; - SteamClient::requestTicket([this, username](Ticket ticket) { - if (ticket.isNull()) { - emit handleLoginFailed(); - return; - } + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + steamClient->requestTicket([this, username](Ticket ticket) { + if (ticket.isNull()) { + emit handleLoginFailed(); + return; + } - JSONCallbackParameters callbackParams; - callbackParams.jsonCallbackReceiver = this; - callbackParams.jsonCallbackMethod = "createCompleted"; - callbackParams.errorCallbackReceiver = this; - callbackParams.errorCallbackMethod = "createFailed"; + JSONCallbackParameters callbackParams; + callbackParams.jsonCallbackReceiver = this; + callbackParams.jsonCallbackMethod = "createCompleted"; + callbackParams.errorCallbackReceiver = this; + callbackParams.errorCallbackMethod = "createFailed"; - const QString CREATE_ACCOUNT_FROM_STEAM_PATH = "api/v1/user/steam/create"; + const QString CREATE_ACCOUNT_FROM_STEAM_PATH = "api/v1/user/steam/create"; - QJsonObject payload; - payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket))); - if (!username.isEmpty()) { - payload.insert("username", QJsonValue::fromVariant(QVariant(username))); - } + QJsonObject payload; + payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket))); + if (!username.isEmpty()) { + payload.insert("username", QJsonValue::fromVariant(QVariant(username))); + } - auto accountManager = DependencyManager::get(); - accountManager->sendRequest(CREATE_ACCOUNT_FROM_STEAM_PATH, AccountManagerAuth::None, - QNetworkAccessManager::PostOperation, callbackParams, - QJsonDocument(payload).toJson()); - }); + auto accountManager = DependencyManager::get(); + accountManager->sendRequest(CREATE_ACCOUNT_FROM_STEAM_PATH, AccountManagerAuth::None, + QNetworkAccessManager::PostOperation, callbackParams, + QJsonDocument(payload).toJson()); + }); + } } diff --git a/libraries/plugins/src/plugins/Forward.h b/libraries/plugins/src/plugins/Forward.h index 723c4f321e..b95bf4c2e6 100644 --- a/libraries/plugins/src/plugins/Forward.h +++ b/libraries/plugins/src/plugins/Forward.h @@ -19,6 +19,7 @@ enum class PluginType { class DisplayPlugin; class InputPlugin; class CodecPlugin; +class SteamClientPlugin; class Plugin; class PluginContainer; class PluginManager; @@ -29,4 +30,4 @@ using InputPluginPointer = std::shared_ptr; using InputPluginList = std::vector; using CodecPluginPointer = std::shared_ptr; using CodecPluginList = std::vector; - +using SteamClientPluginPointer = std::shared_ptr; diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index 21e652dc40..75b0f1e3bc 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -147,6 +147,22 @@ const CodecPluginList& PluginManager::getCodecPlugins() { return codecPlugins; } +const SteamClientPluginPointer PluginManager::getSteamClientPlugin() { + static SteamClientPluginPointer steamClientPlugin; + static std::once_flag once; + std::call_once(once, [&] { + // Now grab the dynamic plugins + for (auto loader : getLoadedPlugins()) { + SteamClientProvider* steamClientProvider = qobject_cast(loader->instance()); + if (steamClientProvider) { + steamClientPlugin = steamClientProvider->getSteamClientPlugin(); + break; + } + } + }); + return steamClientPlugin; +} + #ifndef Q_OS_ANDROID // TODO migrate to a DLL model where plugins are discovered and loaded at runtime by the PluginManager class diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index 83aad7abcd..687e5c9e9b 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -19,6 +19,7 @@ public: const DisplayPluginList& getDisplayPlugins(); const InputPluginList& getInputPlugins(); const CodecPluginList& getCodecPlugins(); + const SteamClientPluginPointer getSteamClientPlugin(); DisplayPluginList getPreferredDisplayPlugins(); void setPreferredDisplayPlugins(const QStringList& displays); diff --git a/libraries/plugins/src/plugins/RuntimePlugin.h b/libraries/plugins/src/plugins/RuntimePlugin.h index bb6f0251c2..9a7d6e0638 100644 --- a/libraries/plugins/src/plugins/RuntimePlugin.h +++ b/libraries/plugins/src/plugins/RuntimePlugin.h @@ -45,3 +45,11 @@ public: #define CodecProvider_iid "com.highfidelity.plugins.codec" Q_DECLARE_INTERFACE(CodecProvider, CodecProvider_iid) +class SteamClientProvider { +public: + virtual ~SteamClientProvider() {} + virtual SteamClientPluginPointer getSteamClientPlugin() = 0; +}; + +#define SteamClientProvider_iid "com.highfidelity.plugins.steamclient" +Q_DECLARE_INTERFACE(SteamClientProvider, SteamClientProvider_iid) diff --git a/libraries/plugins/src/plugins/SteamClientPlugin.h b/libraries/plugins/src/plugins/SteamClientPlugin.h new file mode 100644 index 0000000000..f87ebd2e66 --- /dev/null +++ b/libraries/plugins/src/plugins/SteamClientPlugin.h @@ -0,0 +1,59 @@ +// +// SteamClientPlugin.h +// libraries/plugins/src/plugins +// +// Created by Clement Brisset on 12/14/16. +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + + +#ifndef hifi_SteamClientPlugin_h +#define hifi_SteamClientPlugin_h + +#include + +#include +#include + +using Ticket = QByteArray; +using TicketRequestCallback = std::function; + +class SteamClientPlugin { +public: + virtual ~SteamClientPlugin() {}; + + virtual bool init() = 0; + virtual void shutdown() = 0; + + virtual bool isRunning() = 0; + + virtual void runCallbacks() = 0; + + virtual void requestTicket(TicketRequestCallback callback) = 0; + virtual void updateLocation(QString status, QUrl locationUrl) = 0; + virtual void openInviteOverlay() = 0; + virtual void joinLobby(QString lobbyId) = 0; + + virtual int getSteamVRBuildID() = 0; +}; + +class SteamScriptingInterface : public QObject { + Q_OBJECT + + Q_PROPERTY(bool isRunning READ isRunning) + +public: + SteamScriptingInterface(QObject* parent, SteamClientPlugin* plugin) : QObject(parent) {} + + public slots: + bool isRunning() const { return _plugin->isRunning(); } + void openInviteOverlay() const { _plugin->openInviteOverlay(); } + +private: + SteamClientPlugin* _plugin; +}; + +#endif /* hifi_SteamClientPlugin_h */ diff --git a/libraries/steamworks-wrapper/CMakeLists.txt b/libraries/steamworks-wrapper/CMakeLists.txt deleted file mode 100644 index 0cbe3bb5ad..0000000000 --- a/libraries/steamworks-wrapper/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -set(TARGET_NAME steamworks-wrapper) -setup_hifi_library() -link_hifi_libraries() - -target_steamworks() \ No newline at end of file diff --git a/libraries/steamworks-wrapper/src/steamworks-wrapper/SteamClient.h b/libraries/steamworks-wrapper/src/steamworks-wrapper/SteamClient.h deleted file mode 100644 index a191adee97..0000000000 --- a/libraries/steamworks-wrapper/src/steamworks-wrapper/SteamClient.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// SteamClient.h -// steamworks-wrapper/src/steamworks-wrapper -// -// Created by Clement Brisset on 6/8/16. -// Copyright 2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - - -#ifndef hifi_SteamClient_h -#define hifi_SteamClient_h - -#include - -#include -#include - -using Ticket = QByteArray; -using TicketRequestCallback = std::function; - -class QUrl; - -class SteamClient { -public: - static bool isRunning(); - - static bool init(); - static void shutdown(); - - static void runCallbacks(); - - static void requestTicket(TicketRequestCallback callback); - static void updateLocation(QString status, QUrl locationUrl); - static void openInviteOverlay(); - static void joinLobby(QString lobbyId); - - static int getSteamVRBuildID(); -}; - -class SteamScriptingInterface : public QObject { - Q_OBJECT - - Q_PROPERTY(bool isRunning READ isRunning) - -public: - SteamScriptingInterface(QObject* parent) : QObject(parent) {} - -public slots: - bool isRunning() const { return SteamClient::isRunning(); } - void openInviteOverlay() const { SteamClient::openInviteOverlay(); } - -}; - -#endif // hifi_SteamClient_h \ No newline at end of file diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 4553b80793..82ca2a7d38 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -26,9 +26,10 @@ if (NOT SERVER_ONLY AND NOT ANDROID) add_subdirectory(${DIR}) set(DIR "hifiNeuron") add_subdirectory(${DIR}) - set(DIR "hifiKinect") add_subdirectory(${DIR}) + set(DIR "steamClient") + add_subdirectory(${DIR}) endif() # server-side plugins diff --git a/plugins/steamClient/CMakeLists.txt b/plugins/steamClient/CMakeLists.txt new file mode 100644 index 0000000000..326628f8e4 --- /dev/null +++ b/plugins/steamClient/CMakeLists.txt @@ -0,0 +1,12 @@ +# +# Created by Clément Brisset on 12/14/16 +# Copyright 2016 High Fidelity, Inc. +# +# Distributed under the Apache License, Version 2.0. +# See the accompanying file LICENSE or http:#www.apache.org/licenses/LICENSE-2.0.html +# + +set(TARGET_NAME steamClient) +setup_hifi_plugin(Gui) +link_hifi_libraries(plugins) +target_steamworks() diff --git a/libraries/steamworks-wrapper/src/steamworks-wrapper/SteamClient.cpp b/plugins/steamClient/src/SteamAPIPlugin.cpp similarity index 95% rename from libraries/steamworks-wrapper/src/steamworks-wrapper/SteamClient.cpp rename to plugins/steamClient/src/SteamAPIPlugin.cpp index 9936027302..853a53e881 100644 --- a/libraries/steamworks-wrapper/src/steamworks-wrapper/SteamClient.cpp +++ b/plugins/steamClient/src/SteamAPIPlugin.cpp @@ -1,6 +1,6 @@ // -// SteamClient.cpp -// steamworks-wrapper/src/steamworks-wrapper +// SteamAPIPlugin.cpp +// plugins/steamClient/src // // Created by Clement Brisset on 6/8/16. // Copyright 2016 High Fidelity, Inc. @@ -9,7 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include "SteamClient.h" +#include "SteamAPIPlugin.h" #include @@ -226,18 +226,18 @@ static std::atomic_bool initialized { false }; static SteamCallbackManager steamCallbackManager; -bool SteamClient::isRunning() { +bool SteamAPIPlugin::isRunning() { return initialized; } -bool SteamClient::init() { +bool SteamAPIPlugin::init() { if (SteamAPI_IsSteamRunning() && !initialized) { initialized = SteamAPI_Init(); } return initialized; } -void SteamClient::shutdown() { +void SteamAPIPlugin::shutdown() { if (initialized) { SteamAPI_Shutdown(); } @@ -245,7 +245,7 @@ void SteamClient::shutdown() { steamCallbackManager.getTicketRequests().stopAll(); } -int SteamClient::getSteamVRBuildID() { +int SteamAPIPlugin::getSteamVRBuildID() { if (initialized) { static const int MAX_PATH_SIZE = 512; static const int STEAMVR_APPID = 250820; @@ -271,7 +271,7 @@ int SteamClient::getSteamVRBuildID() { } -void SteamClient::runCallbacks() { +void SteamAPIPlugin::runCallbacks() { if (!initialized) { return; } @@ -285,7 +285,7 @@ void SteamClient::runCallbacks() { Steam_RunCallbacks(steamPipe, false); } -void SteamClient::requestTicket(TicketRequestCallback callback) { +void SteamAPIPlugin::requestTicket(TicketRequestCallback callback) { if (!initialized) { if (SteamAPI_IsSteamRunning()) { init(); @@ -304,7 +304,7 @@ void SteamClient::requestTicket(TicketRequestCallback callback) { steamCallbackManager.getTicketRequests().startRequest(callback); } -void SteamClient::updateLocation(QString status, QUrl locationUrl) { +void SteamAPIPlugin::updateLocation(QString status, QUrl locationUrl) { if (!initialized) { return; } @@ -315,7 +315,7 @@ void SteamClient::updateLocation(QString status, QUrl locationUrl) { SteamFriends()->SetRichPresence("connect", connectStr.toLocal8Bit().data()); } -void SteamClient::openInviteOverlay() { +void SteamAPIPlugin::openInviteOverlay() { if (!initialized) { return; } @@ -326,7 +326,7 @@ void SteamClient::openInviteOverlay() { } -void SteamClient::joinLobby(QString lobbyIdStr) { +void SteamAPIPlugin::joinLobby(QString lobbyIdStr) { if (!initialized) { if (SteamAPI_IsSteamRunning()) { init(); diff --git a/plugins/steamClient/src/SteamAPIPlugin.h b/plugins/steamClient/src/SteamAPIPlugin.h new file mode 100644 index 0000000000..90fda06de3 --- /dev/null +++ b/plugins/steamClient/src/SteamAPIPlugin.h @@ -0,0 +1,37 @@ +// +// SteamAPIPlugin.h +// plugins/steamClient/src +// +// Created by Clement Brisset on 6/8/16. +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + + +#ifndef hifi_SteamAPIPlugin_h +#define hifi_SteamAPIPlugin_h + +#include + +class QUrl; + +class SteamAPIPlugin : public SteamClientPlugin { +public: + bool isRunning(); + + bool init(); + void shutdown(); + + void runCallbacks(); + + void requestTicket(TicketRequestCallback callback); + void updateLocation(QString status, QUrl locationUrl); + void openInviteOverlay(); + void joinLobby(QString lobbyId); + + int getSteamVRBuildID(); +}; + +#endif // hifi_SteamAPIPlugin_h diff --git a/plugins/steamClient/src/SteamClientProvider.cpp b/plugins/steamClient/src/SteamClientProvider.cpp new file mode 100644 index 0000000000..a873d51729 --- /dev/null +++ b/plugins/steamClient/src/SteamClientProvider.cpp @@ -0,0 +1,41 @@ +// +// Created by Clément Brisset on 12/14/16 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include + +#include +#include +#include + +#include +#include + +#include "SteamAPIPlugin.h" + +class SteamAPIProvider : public QObject, public SteamClientProvider { + Q_OBJECT + Q_PLUGIN_METADATA(IID SteamClientProvider_iid FILE "plugin.json") + Q_INTERFACES(SteamClientProvider) + +public: + SteamAPIProvider(QObject* parent = nullptr) : QObject(parent) {} + virtual ~SteamAPIProvider() {} + + virtual SteamClientPluginPointer getSteamClientPlugin() override { + static std::once_flag once; + std::call_once(once, [&] { + _steamClientPlugin = std::make_shared(); + }); + return _steamClientPlugin; + } + +private: + SteamClientPluginPointer _steamClientPlugin; +}; + +#include "SteamClientProvider.moc" diff --git a/plugins/steamClient/src/plugin.json b/plugins/steamClient/src/plugin.json new file mode 100644 index 0000000000..dfe37917d2 --- /dev/null +++ b/plugins/steamClient/src/plugin.json @@ -0,0 +1 @@ +{"name":"Steam Client"}