mirror of
https://github.com/overte-org/overte.git
synced 2025-04-19 15:03:53 +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 <DomainHandler.h>
|
||||
#include <NodeList.h>
|
||||
#include <steamworks-wrapper/SteamClient.h>
|
||||
#include <UserActivityLogger.h>
|
||||
#include <UUID.h>
|
||||
|
||||
|
@ -36,11 +37,11 @@ const QString SESSION_ID_KEY = "session_id";
|
|||
|
||||
void DiscoverabilityManager::updateLocation() {
|
||||
auto accountManager = DependencyManager::get<AccountManager>();
|
||||
|
||||
if (_mode.get() != Discoverability::None && accountManager->isLoggedIn()) {
|
||||
auto addressManager = DependencyManager::get<AddressManager>();
|
||||
DomainHandler& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler();
|
||||
auto addressManager = DependencyManager::get<AddressManager>();
|
||||
auto& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler();
|
||||
|
||||
|
||||
if (_mode.get() != Discoverability::None && accountManager->isLoggedIn()) {
|
||||
// construct a QJsonObject given the user's current address information
|
||||
QJsonObject rootObject;
|
||||
|
||||
|
@ -48,8 +49,6 @@ void DiscoverabilityManager::updateLocation() {
|
|||
|
||||
QString pathString = addressManager->currentPath();
|
||||
|
||||
const QString LOCATION_KEY_IN_ROOT = "location";
|
||||
|
||||
const QString PATH_KEY_IN_LOCATION = "path";
|
||||
locationObject.insert(PATH_KEY_IN_LOCATION, pathString);
|
||||
|
||||
|
@ -90,6 +89,7 @@ void DiscoverabilityManager::updateLocation() {
|
|||
// we have a changed location, send it now
|
||||
_lastLocationObject = locationObject;
|
||||
|
||||
const QString LOCATION_KEY_IN_ROOT = "location";
|
||||
rootObject.insert(LOCATION_KEY_IN_ROOT, locationObject);
|
||||
|
||||
apiPath = API_USER_LOCATION_PATH;
|
||||
|
@ -109,6 +109,9 @@ void DiscoverabilityManager::updateLocation() {
|
|||
accountManager->sendRequest(API_USER_HEARTBEAT_PATH, AccountManagerAuth::Optional,
|
||||
QNetworkAccessManager::PutOperation, callbackParameters);
|
||||
}
|
||||
|
||||
// Update Steam
|
||||
SteamClient::updateLocation(domainHandler.getHostname(), addressManager->currentAddress());
|
||||
}
|
||||
|
||||
void DiscoverabilityManager::handleHeartbeatResponse(QNetworkReply& requestReply) {
|
||||
|
|
|
@ -13,7 +13,12 @@
|
|||
|
||||
#include <atomic>
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QMimeData>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QUrl>
|
||||
#include <QtGui/QEvent.h>
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC diagnostic push
|
||||
|
@ -41,9 +46,6 @@ public:
|
|||
STEAM_CALLBACK(SteamTicketRequests, onGetAuthSessionTicketResponse,
|
||||
GetAuthSessionTicketResponse_t, _getAuthSessionTicketResponse);
|
||||
|
||||
STEAM_CALLBACK(SteamTicketRequests, onGameRichPresenceJoinRequested,
|
||||
GameRichPresenceJoinRequested_t, _gameRichPresenceJoinRequestedResponse);
|
||||
|
||||
private:
|
||||
struct PendingTicket {
|
||||
HAuthTicket authTicket;
|
||||
|
@ -55,8 +57,7 @@ private:
|
|||
};
|
||||
|
||||
SteamTicketRequests::SteamTicketRequests() :
|
||||
_getAuthSessionTicketResponse(this, &SteamTicketRequests::onGetAuthSessionTicketResponse),
|
||||
_gameRichPresenceJoinRequestedResponse(this, &SteamTicketRequests::onGameRichPresenceJoinRequested)
|
||||
_getAuthSessionTicketResponse(this, &SteamTicketRequests::onGetAuthSessionTicketResponse)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
if (url.startsWith(PREFIX) && url.endsWith(SUFFIX)) {
|
||||
url.remove(0, PREFIX.size());
|
||||
url.remove(-SUFFIX.size(), SUFFIX.size());
|
||||
if (url.startsWith(CONNECT_PREFIX) && url.endsWith(CONNECT_SUFFIX)) {
|
||||
url.remove(0, CONNECT_PREFIX.size());
|
||||
url.remove(-CONNECT_SUFFIX.size(), CONNECT_SUFFIX.size());
|
||||
}
|
||||
|
||||
qDebug() << "Joining:" << url;
|
||||
qDebug() << "Joining Steam Friends at:" << url;
|
||||
auto mimeData = new QMimeData();
|
||||
mimeData->setUrls(QList<QUrl>() << QUrl(url));
|
||||
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 SteamTicketRequests steamTicketRequests;
|
||||
static SteamCallbackManager steamCallbackManager;
|
||||
|
||||
|
||||
bool SteamClient::isRunning() {
|
||||
|
@ -171,11 +184,6 @@ bool SteamClient::isRunning() {
|
|||
bool SteamClient::init() {
|
||||
if (SteamAPI_IsSteamRunning() && !initialized) {
|
||||
initialized = SteamAPI_Init();
|
||||
|
||||
if (initialized) {
|
||||
SteamFriends()->SetRichPresence("status", "Localhost");
|
||||
SteamFriends()->SetRichPresence("connect", "--url \"hifi://10.0.0.185:40117/10,10,10\"");
|
||||
}
|
||||
}
|
||||
return initialized;
|
||||
}
|
||||
|
@ -185,7 +193,7 @@ void SteamClient::shutdown() {
|
|||
SteamAPI_Shutdown();
|
||||
}
|
||||
|
||||
steamTicketRequests.stopAll();
|
||||
steamCallbackManager.getTicketRequests().stopAll();
|
||||
}
|
||||
|
||||
void SteamClient::runCallbacks() {
|
||||
|
@ -218,7 +226,16 @@ void SteamClient::requestTicket(TicketRequestCallback callback) {
|
|||
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 TicketRequestCallback = std::function<void(Ticket)>;
|
||||
|
||||
class QUrl;
|
||||
|
||||
class SteamClient {
|
||||
public:
|
||||
static bool isRunning();
|
||||
|
@ -30,6 +32,7 @@ public:
|
|||
static void runCallbacks();
|
||||
|
||||
static void requestTicket(TicketRequestCallback callback);
|
||||
static void updateLocation(QString status, QUrl locationUrl);
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue