/* * File: Db2Xml.cpp * Author: poul * * Created on 3. december 2011, 17:30 */ #include "Db2Xml.hpp" Db2Xml::Db2Xml() { p_output_dir = "~/oastat"; p_postscript = ""; psoudo_playerids.clear(); nextId = 1; //mkdir(p_output_dir.c_str()); } Db2Xml::Db2Xml(string dbargs) { p_output_dir = "~/oastat"; p_postscript = ""; psoudo_playerids.clear(); nextId = 1; //mkdir(p_output_dir.c_str()); stringstream stream(stringstream::in | stringstream::out); stream << dbargs; string holder; //stream >> holder; while(!stream.eof()) { stream >> holder; if(!stream.eof()) { string param; stream >> param; if(holder == "outputdir") p_output_dir = param; if(holder == "postscript") p_postscript = param; } } } Db2Xml::Db2Xml(const Db2Xml& orig) { } Db2Xml::~Db2Xml() { } void Db2Xml::startGame(int gametype, string mapname, string basegame, string servername, OaStatStruct *oss) { isOk = true; p_xmlcontent = ""; p_gametime = oss->getDateTime(); p_servername = servername; p_xmlcontent += "\n"; p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(p_servername) ).str(); p_xmlcontent += (boost::format(" %1%\n") % gametype).str(); p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(mapname) ).str(); p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(basegame) ).str(); p_xmlcontent += (boost::format(" %04i-%02i-%02iT%02i:%02i:%02i\n") % (p_gametime.tm_year+1900) % (p_gametime.tm_mon+1) % (p_gametime.tm_mday) % (p_gametime.tm_hour) % (p_gametime.tm_min) % (p_gametime.tm_sec) ).str(); } void Db2Xml::addGameCvar(string cvar, string value) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(cvar) ).str(); p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(value) ).str(); p_xmlcontent += " \n"; } void Db2Xml::endGame(int second) { if(isOk) { p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += "\n"; string filename = (boost::format("%1%/%2%_%3%-%4%-%5%_%6%-%7%-%8%.xml") % p_output_dir % p_servername % (p_gametime.tm_year+1900) % (p_gametime.tm_mon+1) % (p_gametime.tm_mday) % (p_gametime.tm_hour) % (p_gametime.tm_min) % (p_gametime.tm_sec) ).str(); ofstream outfile; outfile.open (filename.c_str()); outfile << p_xmlcontent; outfile.close(); cout << "End game at " << second << "with size " << p_xmlcontent.length() << " written to " << filename << endl; } } int Db2Xml::getGameNumber() { return 1; } void Db2Xml::setPlayerInfo(string guid, string nickname, bool isBot, int second, int team, string model, string headmodel, int skill, OaStatStruct *oss) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % guid).str(); p_xmlcontent += (boost::format(" %1%\n") % getPsoudoId(guid)).str(); p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(nickname) ).str(); p_xmlcontent += (boost::format(" %1%\n") % (isBot? 1:0)).str(); p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % team).str(); p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(model) ).str(); p_xmlcontent += (boost::format(" %1%\n") % getXmlEscaped(headmodel) ).str(); p_xmlcontent += (boost::format(" %1%\n") % skill).str(); p_xmlcontent += " \n"; } void Db2Xml::addKill(int second, string attackerID, string targetID, int type) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % attackerID).str(); p_xmlcontent += (boost::format(" %1%\n") % targetID).str(); p_xmlcontent += (boost::format(" %1%\n") % type).str(); p_xmlcontent += " \n"; } //void addCapture(int second, string player, int team); void Db2Xml::addAward(int second, string player, int award) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % player).str(); p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += " \n"; } void Db2Xml::addScoreInfo(int second, string player, int score) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % player).str(); p_xmlcontent += (boost::format(" %1%\n") % score).str(); p_xmlcontent += " \n"; } void Db2Xml::addCtf(int second, string player, int team, int event) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % player).str(); p_xmlcontent += (boost::format(" %1%\n") % team).str(); p_xmlcontent += (boost::format(" %1%\n") % event).str(); p_xmlcontent += " \n"; } void Db2Xml::addCtf1f(int second, string player, int team, int event) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % player).str(); p_xmlcontent += (boost::format(" %1%\n") % team).str(); p_xmlcontent += (boost::format(" %1%\n") % event).str(); p_xmlcontent += " \n"; } void Db2Xml::addElimination(int second, int roundnumber, int team, int event) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % roundnumber).str(); p_xmlcontent += (boost::format(" %1%\n") % team).str(); p_xmlcontent += (boost::format(" %1%\n") % event).str(); p_xmlcontent += " \n"; } void Db2Xml::addCtfElimination(int second, int roundnumber, string player, int team, int event) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % roundnumber).str(); p_xmlcontent += (boost::format(" %1%\n") % player).str(); p_xmlcontent += (boost::format(" %1%\n") % team).str(); p_xmlcontent += (boost::format(" %1%\n") % event).str(); p_xmlcontent += " \n"; } void Db2Xml::addHarvester(int second, string player1, string player2, int team, int event, int score) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % player1).str(); p_xmlcontent += (boost::format(" %1%\n") % player2).str(); p_xmlcontent += (boost::format(" %1%\n") % team).str(); p_xmlcontent += (boost::format(" %1%\n") % event).str(); p_xmlcontent += (boost::format(" %1%\n") % score).str(); p_xmlcontent += " \n"; } void Db2Xml::addChallenge(int second, string player, int challenge, int amount) { if(!isOk) return; p_xmlcontent += " \n"; p_xmlcontent += (boost::format(" %1%\n") % second).str(); p_xmlcontent += (boost::format(" %1%\n") % player).str(); p_xmlcontent += (boost::format(" %1%\n") % challenge).str(); p_xmlcontent += (boost::format(" %1%\n") % amount).str(); p_xmlcontent += " \n"; } void Db2Xml::doNotCommit() { isOk = false; } int Db2Xml::getPsoudoId(string guid) { int ret = psoudo_playerids[guid]; if(ret > 0) return ret; ret = nextId++; if(ret == 1022) //world ret = nextId++; psoudo_playerids[guid] = ret; return ret; } string Db2Xml::getXmlEscaped(string org) { string result = org; boost::algorithm::replace_all(result,(string)"&",(string)"&"); boost::algorithm::replace_all(result,(string)"<",(string)"<"); boost::algorithm::replace_all(result,(string)">",(string)">"); boost::algorithm::replace_all(result,(string)"\"",(string)"""); boost::algorithm::replace_all(result,(string)"'",(string)"'"); return result; } void Db2Xml::createTables() { }