You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Gems/Twitch/Code/Source/TwitchSystemComponent.h

115 lines
6.0 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AzCore/Component/Component.h>
#include <AzCore/Component/TickBus.h>
#include <AzCore/std/parallel/atomic.h>
#include <Twitch/TwitchBus.h>
#include <ITwitchREST.h>
namespace Twitch
{
class TwitchSystemComponent
: public AZ::Component
, protected TwitchRequestBus::Handler
, public AZ::SystemTickBus::Handler
{
public:
AZ_COMPONENT(TwitchSystemComponent, "{8AC76E51-CE55-4D67-90DE-41D1A7756E32}");
TwitchSystemComponent();
virtual ~TwitchSystemComponent() {}
static void Reflect(AZ::ReflectContext* context);
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required);
static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent);
void OnSystemTick() override;
protected:
////////////////////////////////////////////////////////////////////////
// TwitchRequestBus interface implementation
////////////////////////////////////////////////////////////////////////
void SetApplicationID(const AZStd::string& twitchApplicationID) override;
void SetUserID(ReceiptID& receipt, const AZStd::string& userId) override;
void SetOAuthToken(ReceiptID& receipt, const AZStd::string& token) override;
void RequestUserID(ReceiptID& receipt) override;
void RequestOAuthToken(ReceiptID& receipt) override;
AZStd::string GetApplicationID() const override;
AZStd::string GetUserID() const override;
AZStd::string GetOAuthToken() const override;
AZStd::string GetSessionID() const override;
void GetUser(ReceiptID& receipt) override;
void ResetFriendsNotificationCount(ReceiptID & receipt, const AZStd::string& friendID) override;
void GetFriendNotificationCount(ReceiptID & receipt, const AZStd::string& friendID) override;
void GetFriendRecommendations(ReceiptID & receipt, const AZStd::string& friendID) override;
void GetFriends(ReceiptID & receipt, const AZStd::string& friendID, const AZStd::string& cursor) override;
void GetFriendStatus(ReceiptID & receipt, const AZStd::string& sourceFriendID, const AZStd::string& targetFriendID) override;
void AcceptFriendRequest(ReceiptID & receipt, const AZStd::string& friendID) override;
void GetFriendRequests(ReceiptID & receipt, const AZStd::string& cursor) override;
void CreateFriendRequest(ReceiptID & receipt, const AZStd::string& friendID) override;
void DeclineFriendRequest(ReceiptID & receipt, const AZStd::string& friendID) override;
// presence
void UpdatePresenceStatus(ReceiptID & receipt, PresenceAvailability availability, PresenceActivityType activityType, const AZStd::string& gameContext) override;
void GetPresenceStatusofFriends(ReceiptID & receipt) override;
void GetPresenceSettings(ReceiptID & receipt) override;
void UpdatePresenceSettings(ReceiptID & receipt, bool isInvisible, bool shareActivity) override;
// channel
void GetChannel(ReceiptID& receipt) override;
void GetChannelbyID(ReceiptID& receipt, const AZStd::string& channelID) override;
void UpdateChannel(ReceiptID& receipt, const ChannelUpdateInfo& channelUpdateInfo) override;
void GetChannelEditors(ReceiptID& receipt, const AZStd::string& channelID) override;
void GetChannelFollowers(ReceiptID& receipt, const AZStd::string& channelID, const AZStd::string& cursor, AZ::u64 offset) override;
void GetChannelTeams(ReceiptID& receipt, const AZStd::string& channelID) override;
void GetChannelSubscribers(ReceiptID& receipt, const AZStd::string& channelID, AZ::u64 offset) override;
void CheckChannelSubscriptionbyUser(ReceiptID& receipt, const AZStd::string& channelID, const AZStd::string& userID) override;
void GetChannelVideos(ReceiptID& receipt, const AZStd::string& channelID, BroadCastType broadcastType, const AZStd::string& language, AZ::u64 offset) override;
void StartChannelCommercial(ReceiptID& receipt, const AZStd::string& channelID, CommercialLength length) override;
void ResetChannelStreamKey(ReceiptID& receipt, const AZStd::string& channelID) override;
////////////////////////////////////////////////////////////////////////
// AZ::Component interface implementation
void Init() override;
void Activate() override;
void Deactivate() override;
////////////////////////////////////////////////////////////////////////
AZ::u64 GetReceipt();
private:
TwitchSystemComponent(const TwitchSystemComponent&) = delete;
bool IsValidString(const AZStd::string& str, AZStd::size_t minLength, AZStd::size_t maxLength) const;
bool IsValidFriendID(const AZStd::string& friendID) const;
bool IsValidOAuthToken(const AZStd::string& oAuthToken) const;
bool IsValidSyncToken(const AZStd::string& syncToken) const;
bool IsValidChannelID(const AZStd::string& channelID) const { return IsValidFriendID(channelID); }
bool IsValidCommunityID(const AZStd::string& communityID) const { return IsValidFriendID(communityID); }
bool IsValidTwitchAppID(const AZStd::string& twitchAppID) const;
private:
AZStd::string m_applicationID;
AZStd::string m_cachedClientID;
AZStd::string m_cachedOAuthToken;
AZStd::string m_cachedSessionID;
AZ::u64 m_refreshTokenExpireTime;
ITwitchRESTPtr m_twitchREST;
AZStd::atomic<AZ::u64> m_receiptCounter;
};
}