Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
3.5 KiB

5 years ago
//========= 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