int main(int argc, char ** argv) { std::cout << "Battlefield 3 TuxNet (Rcon Service) Rev. " << REVISION << " :: Copyright 2009-2013 (c) Plain-Solution.de" << endl; try { // settings.ini lesen boost::property_tree::ptree pt; boost::property_tree::ini_parser::read_ini(string(argv[0]).append(".ini"), pt); std::cout << "BF3 Server: " << pt.get<string>("Server.Host") << ":" << pt.get<string>("Server.Port") << endl; //// fstream pidfile(string(argv[0]).append(".pid"), ios::out); if(!pidfile) throw string("Could not write pidfile"); pidfile << getpid() << endl; pidfile.close(); RconConnection * rcon = new RconConnection( pt.get<string>("Server.Host"), pt.get<string>("Server.Port"), pt.get<string>("Server.Password") ); rcon->Login(); rcon->EnableEvents(); string msg = "[BF3 TuxNet Rev. "; msg += REVISION; msg += "] by Plain-Solution.de"; rcon->sendRequest(createWords("admin.say", msg.c_str(), "all")); EventHandler * eventHandler = new EventHandler(rcon, &pt); thread eventThread([eventHandler]() { eventHandler->DoWork(); }); while(true) { try { TextRconPacket response = rcon->getResponse(); if(eventHandler->needResponse != 0 && response.isValid() && response.m_isResponse && eventHandler->needResponse == response.m_sequence) { eventHandler->response = new TextRconPacket(response); eventHandler->needResponse = 0; } if(response.isValid() && !response.m_isResponse && response.m_originatedOnServer) eventHandler->AddEvent(response); } catch(string e) { eventHandler->out(e, EventHandler::OUT_TYPE::ERR); } } eventHandler->Disable(); eventThread.join(); } catch(exception & e) { _out(e.what(), EventHandler::OUT_TYPE::ERR); } catch(string & e) { _out(e, EventHandler::OUT_TYPE::ERR); } remove(string(argv[0]).append(".pid").c_str()); return 0; }