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.
269 lines
6.1 KiB
269 lines
6.1 KiB
5 years ago
|
//========= 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();
|
||
|
}
|