aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/textstatsmgr.cpp
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/server/textstatsmgr.cpp
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/server/textstatsmgr.cpp')
-rw-r--r--mp/src/game/server/textstatsmgr.cpp174
1 files changed, 174 insertions, 0 deletions
diff --git a/mp/src/game/server/textstatsmgr.cpp b/mp/src/game/server/textstatsmgr.cpp
new file mode 100644
index 00000000..705179c7
--- /dev/null
+++ b/mp/src/game/server/textstatsmgr.cpp
@@ -0,0 +1,174 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "textstatsmgr.h"
+#include "tier0/dbg.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+CTextStatsMgr g_TextStatsMgr; // The default text stats manager.
+
+
+// ------------------------------------------------------------------------------------------ //
+// CTextStatsMgr implementation.
+// ------------------------------------------------------------------------------------------ //
+CTextStatsMgr::CTextStatsMgr( void )
+{
+ m_szStatFilename[0] = 0;
+}
+
+bool CTextStatsMgr::WriteFile( IFileSystem *pFileSys, const char *pFilename )
+{
+ // If no filename was specified, use out preset one
+ if ( !pFilename )
+ {
+ pFilename = m_szStatFilename;
+ }
+
+ FileHandle_t hFile = pFileSys->Open( pFilename, "wt", "LOGDIR" );
+ if ( hFile == FILESYSTEM_INVALID_HANDLE )
+ return false;
+
+ CTextStat *pHead = CTextStat::GetTextStatsList();
+ for ( CTextStat *pCur=pHead->m_pNext; pCur != pHead; pCur=pCur->m_pNext )
+ {
+ if ( pCur->m_pMgr == this )
+ pCur->m_PrintFn( pFileSys, hFile, pCur->m_pUserData );
+ }
+
+ pFileSys->Close( hFile );
+
+ // Call each CTextStatFile..
+ for( CTextStatFile *pCurFile=CTextStatFile::s_pHead; pCurFile; pCurFile=pCurFile->m_pNext )
+ {
+ pCurFile->m_pFn();
+ }
+
+ return true;
+}
+
+char *CTextStatsMgr::GetStatsFilename( void )
+{
+ return m_szStatFilename;
+}
+
+void CTextStatsMgr::SetStatsFilename( char *sFilename )
+{
+ Assert( sFilename && sFilename[0] );
+
+ Q_strncpy( m_szStatFilename, sFilename, sizeof(m_szStatFilename) );
+}
+
+// ------------------------------------------------------------------------------------------ //
+// CTextStat implementation.
+// ------------------------------------------------------------------------------------------ //
+
+CTextStat::CTextStat()
+{
+ m_pPrev = m_pNext = this;
+ m_pMgr = NULL;
+}
+
+
+CTextStat::CTextStat( TextStatPrintFn printFn, void *pUserData, CTextStatsMgr *pMgr )
+{
+ m_pPrev = m_pNext = this;
+ Init( printFn, pUserData, pMgr );
+}
+
+
+CTextStat::~CTextStat()
+{
+ Term();
+}
+
+
+void CTextStat::Init( TextStatPrintFn printFn, void *pUserData, CTextStatsMgr *pMgr )
+{
+ Term();
+
+ m_pPrev = GetTextStatsList();
+ m_pNext = GetTextStatsList()->m_pNext;
+ m_pPrev->m_pNext = m_pNext->m_pPrev = this;
+
+ m_PrintFn = printFn;
+ m_pUserData = pUserData;
+ m_pMgr = pMgr;
+}
+
+
+void CTextStat::Term()
+{
+ // Remove from the global list.
+ m_pPrev->m_pNext = m_pNext;
+ m_pNext->m_pPrev = m_pPrev;
+ m_pPrev = m_pNext = this;
+ m_pMgr = NULL;
+}
+
+
+CTextStat::CTextStat( bool bGlobalListHead )
+{
+ Assert( bGlobalListHead );
+ m_pPrev = m_pNext = this;
+}
+
+
+CTextStat* CTextStat::GetTextStatsList()
+{
+ static CTextStat theList( true );
+ return &theList;
+}
+
+
+void CTextStat::RemoveFn( void *pUserData )
+{
+ CTextStat *pReg = (CTextStat*)pUserData;
+ pReg->Term();
+}
+
+
+// ------------------------------------------------------------------------------------------ //
+// CTextStatInt implementation.
+// ------------------------------------------------------------------------------------------ //
+
+CTextStatInt::CTextStatInt( const char *pName, int initialValue, CTextStatsMgr *pMgr )
+{
+ m_pName = pName;
+ m_Value = initialValue;
+ m_Reg.Init( &CTextStatInt::PrintFn, this, pMgr );
+}
+
+
+void CTextStatInt::PrintFn( IFileSystem *pFileSys, FileHandle_t hFile, void *pUserData )
+{
+ CTextStatInt *pStat = (CTextStatInt*)pUserData;
+ pFileSys->FPrintf( hFile, "%s %d\n", pStat->m_pName, pStat->m_Value );
+}
+
+
+
+// ------------------------------------------------------------------------------------------ //
+// CTextStatFile functions.
+// ------------------------------------------------------------------------------------------ //
+
+CTextStatFile *CTextStatFile::s_pHead = NULL;
+
+
+CTextStatFile::CTextStatFile( TextStatFileFn fn )
+{
+ m_pFn = fn;
+ m_pNext = CTextStatFile::s_pHead;
+ CTextStatFile::s_pHead = this;
+}
+
+
+
+
+