|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// UI.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "propsht.h"
#include "UI.h"
#include "UIDlg.h"
#include "PersistentString.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CUIApp
BEGIN_MESSAGE_MAP(CUIApp, CWinApp) //{{AFX_MSG_MAP(CUIApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUIApp construction
CUIApp::CUIApp() { // Place all significant initialization in InitInstance
pause=false; pauseSecs=0; CPersistentString cps("RunBefore"); FirstEverTimeRun=!cps.toBool(); cps=true;
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CUIApp object
CUIApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CUIApp initialization
BOOL CUIApp::InitInstance() { // Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
persistPlayerStats=false; useSupportDir=true; displayMM2=false;
CAllControlsSheet dlg("TFStats"); m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is
// dismissed with OK
execTFStats(); } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE; }
void reporterror31337(LONG i) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, i, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf, 0, NULL ); // Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer.
LocalFree( lpMsgBuf ); }
string& addSlash(string& tempbuf) { if (tempbuf!="") { int buflen=tempbuf.length(); if (tempbuf.at(buflen-1) != '\\') tempbuf+= '\\'; } return tempbuf; }
string& removeSlash(string& tempbuf) { int buflen=tempbuf.length(); if (buflen > 0 && tempbuf.at(buflen-1) == '\\') tempbuf.erase(tempbuf.length()-1,1); return tempbuf; }
string CUIApp::CTFStatsExec::getExecString() { string retval("\""); retval+=addSlash(TFStatsdirectory); retval+="TFStatsRT.exe\" \"" ; retval+=fullpath; retval+="\" outputDir=\""; retval+=addSlash(outputdirectory); retval+=removeSlash(outputsubdir); retval+="\" "; retval+="ruleDir=\""; retval+=removeSlash(ruledirectory); retval+="\" ";
retval+=" useSupportDir="; retval+=useSupportDir?"yes":"no"; if (useSupportDir) { retval+=" supportDir=\""; retval+=removeSlash(supportdirectory); retval+="\" supportHTTPPath=\""; retval+=removeSlash(supporthttp); retval+="\""; } retval+=" persistPlayerStats="; retval+=persistPlayerStats?"yes":"no"; if (persistPlayerStats) { retval+=" playerDir=\""; retval+=removeSlash(playerdirectory); retval+="\" "; retval+=" playerHTTPPath=\""; retval+=removeSlash(playerhttp); retval+="\""; } retval+=" eliminateOldPlayers="; retval+=elimOldPlayers?"yes":"no"; if (elimOldPlayers) { retval+=" oldPlayerCutoff="; char buf[100]; itoa(elimDays,buf,10); retval+=buf; retval+=" "; }
retval+=" displayMM2="; retval+=displayMM2?"yes":"no"; retval+=" displayStartUpInfo="; retval+=displayStartupInfo?"yes":"no";
return retval; }
#include <list>
void CUIApp::execTFStats() { std::list<CUIApp::CTFStatsExec>::iterator it; AllocConsole(); for (it=m_pLogs->begin();it!=m_pLogs->end();++it) { CUIApp::CTFStatsExec& c=*it; it->TFStatsdirectory=m_TFStatsDir; it->outputdirectory=m_OutDir; it->ruledirectory=m_RuleDir; it->supportdirectory=m_SupportDir; it->playerdirectory=m_PlayerDir; it->displayMM2=displayMM2; it->persistPlayerStats=persistPlayerStats; it->useSupportDir=useSupportDir; it->supporthttp=m_SupportHTTPPath; it->playerhttp=m_PlayerHTTPPath; it->displayStartupInfo=displayStartupInfo; it->elimOldPlayers=elimOldPlayers; it->elimDays=elimDays;
string exec=it->getExecString(); //create process takes a non-const char buffer?
char createProcBuf[4000]; memset(createProcBuf,0,4000); exec.copy(createProcBuf,4000);
PROCESS_INFORMATION pi; STARTUPINFO si; memset(&si,0,sizeof(si)); si.cb=sizeof(si); char buffer[500]; sprintf(buffer,"TFStats is creating a Match report for %s",it->inputfile.c_str()); si.lpTitle=buffer; SetConsoleTitle(buffer);
BOOL result=CreateProcess(NULL,createProcBuf,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); if (pi.hProcess && result) { //wait for this one to finish before running next one!
DWORD exitCode=STILL_ACTIVE; do { GetExitCodeProcess(pi.hProcess,&exitCode); //check every 10th of a second
if (exitCode==STILL_ACTIVE) Sleep(100);
if (pause) Sleep(pauseSecs*1000);
} while (exitCode==STILL_ACTIVE); } else { string badmojo("***ERROR: Could not run \""); badmojo+=addSlash(it->TFStatsdirectory); badmojo+="TFStatsRT.exe\"\n\n"; HANDLE hConsOutput=GetStdHandle(STD_OUTPUT_HANDLE); WriteConsole(hConsOutput,badmojo.c_str(),badmojo.length(),NULL,0); Sleep(4000); } } FreeConsole(); }
|