diff options
Diffstat (limited to 'game/client/tf/tf_streams.h')
| -rw-r--r-- | game/client/tf/tf_streams.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/game/client/tf/tf_streams.h b/game/client/tf/tf_streams.h new file mode 100644 index 0000000..88279e3 --- /dev/null +++ b/game/client/tf/tf_streams.h @@ -0,0 +1,133 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= + +#ifndef TF_STREAMS_H +#define TF_STREAMS_H +#ifdef _WIN32 +#pragma once +#endif + +#include "vgui_controls/EditablePanel.h" + +using namespace vgui; + +#define MAX_STREAM_PANELS 5 + +class CStreamInfo +{ +public: + CStreamInfo() : m_numViewers( 0 ) {} +public: + CUtlString m_sGlobalName; + int m_numViewers; + CUtlString m_sDisplayName; + CUtlString m_sTextDescription; + CUtlString m_sUpdatedAtStamp; + CUtlString m_sPreviewImage; + CUtlString m_sPreviewImageLocalFile; + CUtlString m_sPreviewImageSF; + CUtlString m_sLanguage; + CUtlString m_sCountry; + CUtlString m_sVideoFeedUrl; +}; + +class CTFStreamPanel : public EditablePanel +{ +public: + DECLARE_CLASS_SIMPLE( CTFStreamPanel, EditablePanel ); + + CTFStreamPanel( Panel *parent, const char *panelName ); + virtual ~CTFStreamPanel() {} + + virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; + virtual void PerformLayout() OVERRIDE; + virtual void OnCommand( const char *command ) OVERRIDE; + + void SetGlobalName( const char *pszGlobalName ) { m_strStreamInfoGlobalName = pszGlobalName; } + CStreamInfo *GetStreamInfo() const; + +private: + void UpdatePanels(); + void SetPreviewImage( const char *pszPreviewImageFile ); + + CUtlString m_strStreamInfoGlobalName; + + class vgui::ImagePanel *m_pPreviewImage; +}; + +class CTFStreamListPanel : public EditablePanel, public CGameEventListener +{ +public: + DECLARE_CLASS_SIMPLE( CTFStreamListPanel, EditablePanel ); + + CTFStreamListPanel( Panel *parent, const char *panelName ); + virtual ~CTFStreamListPanel() {} + + virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; + virtual void OnThink() OVERRIDE; + virtual void OnCommand( const char *command ) OVERRIDE; + + virtual void FireGameEvent( IGameEvent *event ) OVERRIDE; + + CTFStreamPanel *m_arrStreamPanels[MAX_STREAM_PANELS]; +}; + +enum ETwitchTvState_t +{ + k_ETwitchTvState_None, + k_ETwitchTvState_Loading, + k_ETwitchTvState_NoLink, + k_ETwitchTvState_Linked, + k_ETwitchTvState_Error +}; + +struct TwitchTvAccountInfo_t +{ + uint64 m_uiSteamID; + + ETwitchTvState_t m_eTwitchTvState; + double m_dblTimeStampTwitchTvUpdate; + uint64 m_uiTwitchTvUserId; + CUtlString m_sTwitchTvChannel; +}; + +class CTFStreamManager : public CAutoGameSystemPerFrame +{ +public: + CTFStreamManager(); + ~CTFStreamManager(); + + virtual bool Init() OVERRIDE; + virtual void Update( float frametime ) OVERRIDE; + void RequestTopStreams(); + + CStreamInfo * GetStreamInfoByName( char const *szName ); + + CUtlVector< CStreamInfo >& GetStreamInfoVec() { return m_streamInfoVec; } + + TwitchTvAccountInfo_t* GetTwitchTvAccountInfo( uint64 uiSteamID ); + +private: // cache stream info + CUtlVector< CStreamInfo > m_streamInfoVec; + +private: // query for top X viewers + double m_dblTimeStampLastUpdate; + HTTPRequestHandle m_hHTTPRequestHandle; + CCallResult< CTFStreamManager, HTTPRequestCompleted_t > m_CallbackOnHTTPRequestCompleted; + void Steam_OnHTTPRequestCompletedStreams( HTTPRequestCompleted_t *p, bool bError ); + +private: // checking for twitch account linking with steam account + void UpdateTwitchTvAccounts(); + + TwitchTvAccountInfo_t *m_pLoadingAccount; + CUtlVector< TwitchTvAccountInfo_t* > m_vecTwitchTvAccounts; // list of steam id to updated twitch account + HTTPRequestHandle m_hHTTPRequestHandleTwitchTv; + CCallResult< CTFStreamManager, HTTPRequestCompleted_t > m_CallbackOnHTTPRequestCompletedTwitchTv; + void Steam_OnHTTPRequestCompletedMyTwitchTv( HTTPRequestCompleted_t *p, bool bError ); +}; +CTFStreamManager *StreamManager(); + +#endif // TF_STREAMS_H |