138 lines
8.3 KiB
C++
138 lines
8.3 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "OnlineSubsystemSteamPrivate.h" // IWYU pragma: keep
|
|
#include "OnlineAsyncTaskManager.h"
|
|
#include "OnlineSubsystemSteamPackage.h"
|
|
|
|
/**
|
|
* Base class that holds a delegate to fire when a given async task is complete
|
|
*/
|
|
class FOnlineAsyncTaskSteam : public FOnlineAsyncTaskBasic<class FOnlineSubsystemSteam>
|
|
{
|
|
PACKAGE_SCOPE:
|
|
|
|
/** Unique handle for the Steam async call initiated */
|
|
SteamAPICall_t CallbackHandle;
|
|
|
|
/** Hidden on purpose */
|
|
FOnlineAsyncTaskSteam() :
|
|
FOnlineAsyncTaskBasic(NULL),
|
|
CallbackHandle(k_uAPICallInvalid)
|
|
{
|
|
}
|
|
|
|
public:
|
|
|
|
FOnlineAsyncTaskSteam(class FOnlineSubsystemSteam* InSteamSubsystem, SteamAPICall_t InCallbackHandle) :
|
|
FOnlineAsyncTaskBasic(InSteamSubsystem),
|
|
CallbackHandle(InCallbackHandle)
|
|
{
|
|
}
|
|
|
|
virtual ~FOnlineAsyncTaskSteam()
|
|
{
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Steam version of the async task manager to register the various Steam callbacks with the engine
|
|
*/
|
|
class FOnlineAsyncTaskManagerSteam : public FOnlineAsyncTaskManager
|
|
{
|
|
private:
|
|
|
|
/** Delegate registered with Steam to trigger when a user (client API) is connected to the Steam servers (usually don't get this because we're already connected externally) */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnSteamServersConnected, SteamServersConnected_t, OnSteamServersConnectedCallback);
|
|
/** Delegate registered with Steam to trigger when a user (client API) is disconnected from the Steam servers. All realtime services are disabled until a connect event above */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnSteamServersDisconnected, SteamServersDisconnected_t, OnSteamServersDisconnectedCallback);
|
|
/** Delegate registered with Steam to trigger when a server (gameserver API) is disconnected from Steam. Will occur on DestroySession() */
|
|
STEAM_GAMESERVER_CALLBACK(FOnlineAsyncTaskManagerSteam, OnSteamServersDisconnectedGS, SteamServersDisconnected_t, OnSteamServersDisconnectedGSCallback);
|
|
/** Delegate registered with Steam to trigger when a server (gameserver API) connection fails. */
|
|
STEAM_GAMESERVER_CALLBACK(FOnlineAsyncTaskManagerSteam, OnSteamServersConnectFailureGS, SteamServerConnectFailure_t, OnSteamServersConnectFailureGSCallback);
|
|
/** Delegate registered with Steam to trigger when a server (gameserver API) is properly connected to Steam servers, logon isn't complete until this occurs */
|
|
STEAM_GAMESERVER_CALLBACK(FOnlineAsyncTaskManagerSteam, OnPolicyResponseGS, GSPolicyResponse_t, OnPolicyResponseGSCallback);
|
|
|
|
/** Delegate registered with Steam to trigger when a user (client API) gets a response for a GetTicketForWebApiResponse request */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnGetTicketForWebApiResponse, GetTicketForWebApiResponse_t, OnGetTicketForWebApiResponseCallback);
|
|
/** Delegate registered with Steam to trigger when a server (gameserver API) gets a response for a Steam session authentication ticket request */
|
|
STEAM_GAMESERVER_CALLBACK(FOnlineAsyncTaskManagerSteam, OnAuthenticationResponseGS, ValidateAuthTicketResponse_t, OnAuthenticationResponseGSCallback);
|
|
/** Delegate registered with Steam to trigger when a user (client API) gets a response for a Steam session authentication ticket request */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnAuthenticationResponse, ValidateAuthTicketResponse_t, OnAuthenticationResponseCallback);
|
|
|
|
/** Delegate registered with Steam to trigger when a user accepts an invite request to a non lobby session */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnInviteAccepted, GameRichPresenceJoinRequested_t, OnInviteAcceptedCallback);
|
|
/** Delegate registered with Steam to trigger when a user attempts JIP (via Steam client) or accepts an invite request (via Steam client) to a lobby session */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnLobbyInviteAccepted, GameLobbyJoinRequested_t, OnLobbyInviteAcceptedCallback);
|
|
/** Delegate registered with Steam to trigger when a user joins a lobby (successfully or not) */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnLobbyEnter, LobbyEnter_t, OnLobbyEnterCallback);
|
|
/** Delegate registered with Steam to trigger when a lobby chat update occurs (usually users joining/leaving lobby) */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnLobbyChatUpdate, LobbyChatUpdate_t, OnLobbyChatUpdateCallback);
|
|
/**
|
|
* Delegate registered with Steam to trigger when a lobby update occurs
|
|
* As host (or any client joined to the lobby), any call to SetLobbyData will trigger this
|
|
* As client searching for lobbies, once per call to RequestLobbyData
|
|
*/
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnLobbyDataUpdate, LobbyDataUpdate_t, OnLobbyDataUpdateCallback);
|
|
/** Delegate registered with Steam to trigger when the currently logged in user receives their stats from RequestStats() */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnUserStatsReceived, UserStatsReceived_t, OnUserStatsReceivedCallback);
|
|
/** Delegate registered with Steam to trigger when the currently logged in user has their stats stored */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnUserStatsStored, UserStatsStored_t, OnUserStatsStoredCallback);
|
|
/** Delegate registered with Steam to trigger when any previously requested user's stat are unloaded by the system */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnUserStatsUnloaded, UserStatsUnloaded_t, OnUserStatsUnloadedCallback);
|
|
/** Delegate registered with Steam to trigger when the Steam Overlay is activated */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnExternalUITriggered, GameOverlayActivated_t, OnExternalUITriggeredCallback);
|
|
/** Delegate registered with Steam to trigger when Steam is shutting down */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnSteamShutdown, SteamShutdown_t, OnSteamShutdownCallback);
|
|
/** Delegate registered with Steam to trigger when Steam gets updates about user rich presence */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnRichPresenceUpdate, FriendRichPresenceUpdate_t, OnRichPresenceUpdateCallback);
|
|
/** Delegate registered with Steam to trigger when Steam gets updates about friends status */
|
|
STEAM_CALLBACK(FOnlineAsyncTaskManagerSteam, OnFriendStatusUpdate, PersonaStateChange_t, OnFriendStatusUpdateCallback);
|
|
|
|
//GameServerChangeRequested_t
|
|
|
|
protected:
|
|
|
|
/** Cached reference to the main online subsystem */
|
|
class FOnlineSubsystemSteam* SteamSubsystem;
|
|
|
|
public:
|
|
|
|
FOnlineAsyncTaskManagerSteam(class FOnlineSubsystemSteam* InOnlineSubsystem) :
|
|
OnSteamServersConnectedCallback(this, &FOnlineAsyncTaskManagerSteam::OnSteamServersConnected),
|
|
OnSteamServersDisconnectedCallback(this, &FOnlineAsyncTaskManagerSteam::OnSteamServersDisconnected),
|
|
OnSteamServersDisconnectedGSCallback(this, &FOnlineAsyncTaskManagerSteam::OnSteamServersDisconnectedGS),
|
|
OnSteamServersConnectFailureGSCallback(this, &FOnlineAsyncTaskManagerSteam::OnSteamServersConnectFailureGS),
|
|
OnPolicyResponseGSCallback(this, &FOnlineAsyncTaskManagerSteam::OnPolicyResponseGS),
|
|
OnGetTicketForWebApiResponseCallback(this, &FOnlineAsyncTaskManagerSteam::OnGetTicketForWebApiResponse),
|
|
OnAuthenticationResponseGSCallback(this, &FOnlineAsyncTaskManagerSteam::OnAuthenticationResponseGS),
|
|
OnAuthenticationResponseCallback(this, &FOnlineAsyncTaskManagerSteam::OnAuthenticationResponse),
|
|
OnInviteAcceptedCallback(this, &FOnlineAsyncTaskManagerSteam::OnInviteAccepted),
|
|
OnLobbyInviteAcceptedCallback(this, &FOnlineAsyncTaskManagerSteam::OnLobbyInviteAccepted),
|
|
OnLobbyEnterCallback(this, &FOnlineAsyncTaskManagerSteam::OnLobbyEnter),
|
|
OnLobbyChatUpdateCallback(this, &FOnlineAsyncTaskManagerSteam::OnLobbyChatUpdate),
|
|
OnLobbyDataUpdateCallback(this, &FOnlineAsyncTaskManagerSteam::OnLobbyDataUpdate),
|
|
OnUserStatsReceivedCallback(this, &FOnlineAsyncTaskManagerSteam::OnUserStatsReceived),
|
|
OnUserStatsStoredCallback(this, &FOnlineAsyncTaskManagerSteam::OnUserStatsStored),
|
|
OnUserStatsUnloadedCallback(this, &FOnlineAsyncTaskManagerSteam::OnUserStatsUnloaded),
|
|
OnExternalUITriggeredCallback(this, &FOnlineAsyncTaskManagerSteam::OnExternalUITriggered),
|
|
OnSteamShutdownCallback(this, &FOnlineAsyncTaskManagerSteam::OnSteamShutdown),
|
|
OnRichPresenceUpdateCallback(this, &FOnlineAsyncTaskManagerSteam::OnRichPresenceUpdate),
|
|
OnFriendStatusUpdateCallback(this, &FOnlineAsyncTaskManagerSteam::OnFriendStatusUpdate),
|
|
SteamSubsystem(InOnlineSubsystem)
|
|
{
|
|
}
|
|
|
|
~FOnlineAsyncTaskManagerSteam()
|
|
{
|
|
}
|
|
|
|
// FOnlineAsyncTaskManager
|
|
virtual void OnlineTick() override;
|
|
|
|
// FOnlineAsyncTaskManagerSteam
|
|
};
|
|
|
|
|