mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-29 13:19:55 +02:00
Update steam location with discoverability
This commit is contained in:
parent
e5290076be
commit
a13950752b
3 changed files with 55 additions and 32 deletions
|
@ -15,6 +15,7 @@
|
||||||
#include <AddressManager.h>
|
#include <AddressManager.h>
|
||||||
#include <DomainHandler.h>
|
#include <DomainHandler.h>
|
||||||
#include <NodeList.h>
|
#include <NodeList.h>
|
||||||
|
#include <steamworks-wrapper/SteamClient.h>
|
||||||
#include <UserActivityLogger.h>
|
#include <UserActivityLogger.h>
|
||||||
#include <UUID.h>
|
#include <UUID.h>
|
||||||
|
|
||||||
|
@ -36,11 +37,11 @@ const QString SESSION_ID_KEY = "session_id";
|
||||||
|
|
||||||
void DiscoverabilityManager::updateLocation() {
|
void DiscoverabilityManager::updateLocation() {
|
||||||
auto accountManager = DependencyManager::get<AccountManager>();
|
auto accountManager = DependencyManager::get<AccountManager>();
|
||||||
|
auto addressManager = DependencyManager::get<AddressManager>();
|
||||||
if (_mode.get() != Discoverability::None && accountManager->isLoggedIn()) {
|
auto& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler();
|
||||||
auto addressManager = DependencyManager::get<AddressManager>();
|
|
||||||
DomainHandler& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler();
|
|
||||||
|
|
||||||
|
|
||||||
|
if (_mode.get() != Discoverability::None && accountManager->isLoggedIn()) {
|
||||||
// construct a QJsonObject given the user's current address information
|
// construct a QJsonObject given the user's current address information
|
||||||
QJsonObject rootObject;
|
QJsonObject rootObject;
|
||||||
|
|
||||||
|
@ -48,8 +49,6 @@ void DiscoverabilityManager::updateLocation() {
|
||||||
|
|
||||||
QString pathString = addressManager->currentPath();
|
QString pathString = addressManager->currentPath();
|
||||||
|
|
||||||
const QString LOCATION_KEY_IN_ROOT = "location";
|
|
||||||
|
|
||||||
const QString PATH_KEY_IN_LOCATION = "path";
|
const QString PATH_KEY_IN_LOCATION = "path";
|
||||||
locationObject.insert(PATH_KEY_IN_LOCATION, pathString);
|
locationObject.insert(PATH_KEY_IN_LOCATION, pathString);
|
||||||
|
|
||||||
|
@ -90,6 +89,7 @@ void DiscoverabilityManager::updateLocation() {
|
||||||
// we have a changed location, send it now
|
// we have a changed location, send it now
|
||||||
_lastLocationObject = locationObject;
|
_lastLocationObject = locationObject;
|
||||||
|
|
||||||
|
const QString LOCATION_KEY_IN_ROOT = "location";
|
||||||
rootObject.insert(LOCATION_KEY_IN_ROOT, locationObject);
|
rootObject.insert(LOCATION_KEY_IN_ROOT, locationObject);
|
||||||
|
|
||||||
apiPath = API_USER_LOCATION_PATH;
|
apiPath = API_USER_LOCATION_PATH;
|
||||||
|
@ -109,6 +109,9 @@ void DiscoverabilityManager::updateLocation() {
|
||||||
accountManager->sendRequest(API_USER_HEARTBEAT_PATH, AccountManagerAuth::Optional,
|
accountManager->sendRequest(API_USER_HEARTBEAT_PATH, AccountManagerAuth::Optional,
|
||||||
QNetworkAccessManager::PutOperation, callbackParameters);
|
QNetworkAccessManager::PutOperation, callbackParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update Steam
|
||||||
|
SteamClient::updateLocation(domainHandler.getHostname(), addressManager->currentAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiscoverabilityManager::handleHeartbeatResponse(QNetworkReply& requestReply) {
|
void DiscoverabilityManager::handleHeartbeatResponse(QNetworkReply& requestReply) {
|
||||||
|
|
|
@ -13,7 +13,12 @@
|
||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
|
||||||
|
#include <QtCore/QCoreApplication>
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
#include <QtCore/QMimeData>
|
||||||
|
#include <QtCore/QString>
|
||||||
|
#include <QtCore/QUrl>
|
||||||
|
#include <QtGui/QEvent.h>
|
||||||
|
|
||||||
#if defined(__GNUC__) && !defined(__clang__)
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
|
@ -41,9 +46,6 @@ public:
|
||||||
STEAM_CALLBACK(SteamTicketRequests, onGetAuthSessionTicketResponse,
|
STEAM_CALLBACK(SteamTicketRequests, onGetAuthSessionTicketResponse,
|
||||||
GetAuthSessionTicketResponse_t, _getAuthSessionTicketResponse);
|
GetAuthSessionTicketResponse_t, _getAuthSessionTicketResponse);
|
||||||
|
|
||||||
STEAM_CALLBACK(SteamTicketRequests, onGameRichPresenceJoinRequested,
|
|
||||||
GameRichPresenceJoinRequested_t, _gameRichPresenceJoinRequestedResponse);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct PendingTicket {
|
struct PendingTicket {
|
||||||
HAuthTicket authTicket;
|
HAuthTicket authTicket;
|
||||||
|
@ -55,8 +57,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
SteamTicketRequests::SteamTicketRequests() :
|
SteamTicketRequests::SteamTicketRequests() :
|
||||||
_getAuthSessionTicketResponse(this, &SteamTicketRequests::onGetAuthSessionTicketResponse),
|
_getAuthSessionTicketResponse(this, &SteamTicketRequests::onGetAuthSessionTicketResponse)
|
||||||
_gameRichPresenceJoinRequestedResponse(this, &SteamTicketRequests::onGameRichPresenceJoinRequested)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,24 +131,37 @@ void SteamTicketRequests::onGetAuthSessionTicketResponse(GetAuthSessionTicketRes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <QString>
|
|
||||||
#include <QCoreApplication>
|
|
||||||
#include <QtGui/QEvent.h>
|
|
||||||
#include <QMimeData>
|
|
||||||
#include <QUrl>
|
|
||||||
const QString PREFIX = "--url \"";
|
|
||||||
const QString SUFFIX = "\"";
|
|
||||||
|
|
||||||
|
const QString CONNECT_PREFIX = "--url \"";
|
||||||
|
const QString CONNECT_SUFFIX = "\"";
|
||||||
|
|
||||||
void SteamTicketRequests::onGameRichPresenceJoinRequested(GameRichPresenceJoinRequested_t* pCallback) {
|
class SteamCallbackManager {
|
||||||
|
public:
|
||||||
|
SteamCallbackManager();
|
||||||
|
|
||||||
|
STEAM_CALLBACK(SteamCallbackManager, onGameRichPresenceJoinRequested,
|
||||||
|
GameRichPresenceJoinRequested_t, _gameRichPresenceJoinRequestedResponse);
|
||||||
|
|
||||||
|
SteamTicketRequests& getTicketRequests() { return _steamTicketRequests; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
SteamTicketRequests _steamTicketRequests;
|
||||||
|
};
|
||||||
|
|
||||||
|
SteamCallbackManager::SteamCallbackManager() :
|
||||||
|
_gameRichPresenceJoinRequestedResponse(this, &SteamCallbackManager::onGameRichPresenceJoinRequested)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SteamCallbackManager::onGameRichPresenceJoinRequested(GameRichPresenceJoinRequested_t* pCallback) {
|
||||||
auto url = QString::fromLocal8Bit(pCallback->m_rgchConnect);
|
auto url = QString::fromLocal8Bit(pCallback->m_rgchConnect);
|
||||||
|
|
||||||
if (url.startsWith(PREFIX) && url.endsWith(SUFFIX)) {
|
if (url.startsWith(CONNECT_PREFIX) && url.endsWith(CONNECT_SUFFIX)) {
|
||||||
url.remove(0, PREFIX.size());
|
url.remove(0, CONNECT_PREFIX.size());
|
||||||
url.remove(-SUFFIX.size(), SUFFIX.size());
|
url.remove(-CONNECT_SUFFIX.size(), CONNECT_SUFFIX.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "Joining:" << url;
|
qDebug() << "Joining Steam Friends at:" << url;
|
||||||
auto mimeData = new QMimeData();
|
auto mimeData = new QMimeData();
|
||||||
mimeData->setUrls(QList<QUrl>() << QUrl(url));
|
mimeData->setUrls(QList<QUrl>() << QUrl(url));
|
||||||
auto event = new QDropEvent(QPointF(0,0), Qt::MoveAction, mimeData, Qt::LeftButton, Qt::NoModifier);
|
auto event = new QDropEvent(QPointF(0,0), Qt::MoveAction, mimeData, Qt::LeftButton, Qt::NoModifier);
|
||||||
|
@ -156,9 +170,8 @@ void SteamTicketRequests::onGameRichPresenceJoinRequested(GameRichPresenceJoinRe
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static std::atomic_bool initialized { false };
|
static std::atomic_bool initialized { false };
|
||||||
static SteamTicketRequests steamTicketRequests;
|
static SteamCallbackManager steamCallbackManager;
|
||||||
|
|
||||||
|
|
||||||
bool SteamClient::isRunning() {
|
bool SteamClient::isRunning() {
|
||||||
|
@ -171,11 +184,6 @@ bool SteamClient::isRunning() {
|
||||||
bool SteamClient::init() {
|
bool SteamClient::init() {
|
||||||
if (SteamAPI_IsSteamRunning() && !initialized) {
|
if (SteamAPI_IsSteamRunning() && !initialized) {
|
||||||
initialized = SteamAPI_Init();
|
initialized = SteamAPI_Init();
|
||||||
|
|
||||||
if (initialized) {
|
|
||||||
SteamFriends()->SetRichPresence("status", "Localhost");
|
|
||||||
SteamFriends()->SetRichPresence("connect", "--url \"hifi://10.0.0.185:40117/10,10,10\"");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return initialized;
|
return initialized;
|
||||||
}
|
}
|
||||||
|
@ -185,7 +193,7 @@ void SteamClient::shutdown() {
|
||||||
SteamAPI_Shutdown();
|
SteamAPI_Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
steamTicketRequests.stopAll();
|
steamCallbackManager.getTicketRequests().stopAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SteamClient::runCallbacks() {
|
void SteamClient::runCallbacks() {
|
||||||
|
@ -218,7 +226,16 @@ void SteamClient::requestTicket(TicketRequestCallback callback) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
steamTicketRequests.startRequest(callback);
|
steamCallbackManager.getTicketRequests().startRequest(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SteamClient::updateLocation(QString status, QUrl locationUrl) {
|
||||||
|
if (!initialized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto connectStr = locationUrl.isEmpty() ? "" : CONNECT_PREFIX + locationUrl.toString() + CONNECT_SUFFIX;
|
||||||
|
|
||||||
|
SteamFriends()->SetRichPresence("status", status.toLocal8Bit().data());
|
||||||
|
SteamFriends()->SetRichPresence("connect", connectStr.toLocal8Bit().data());
|
||||||
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
using Ticket = QByteArray;
|
using Ticket = QByteArray;
|
||||||
using TicketRequestCallback = std::function<void(Ticket)>;
|
using TicketRequestCallback = std::function<void(Ticket)>;
|
||||||
|
|
||||||
|
class QUrl;
|
||||||
|
|
||||||
class SteamClient {
|
class SteamClient {
|
||||||
public:
|
public:
|
||||||
static bool isRunning();
|
static bool isRunning();
|
||||||
|
@ -30,6 +32,7 @@ public:
|
||||||
static void runCallbacks();
|
static void runCallbacks();
|
||||||
|
|
||||||
static void requestTicket(TicketRequestCallback callback);
|
static void requestTicket(TicketRequestCallback callback);
|
||||||
|
static void updateLocation(QString status, QUrl locationUrl);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue