/* Copyright 2010 sss * This file is part of evil_core. * * evil_core is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * evil_core is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with evil_core. If not, see .*/ #include "commonheaders.h" std::list plugins; boost::mutex plugin_list_mutex; std::list services; boost::mutex service_list_mutex; std::list event_handlers; boost::mutex event_handlers_mutex; ACE_Log_Msg logger; int current_plugin_id = 13; bool halt_requested = false; PLUGINLINK pluglink = {&CreateServiceFunction, &CallService, &ServiceExists, &RegisterEventHandler, &RegisterEventType, &ExecuteEvent}; int on_exit() { plugin_list_mutex.lock(); service_list_mutex.lock(); if(!services.empty()) { std::list::iterator end = services.end(); for(std::list::iterator i = services.begin(); i != end; ++i) delete *i; services.clear(); } if(!plugins.empty()) { std::list::iterator end = plugins.end(); for(std::list::iterator i = plugins.begin(); i != end; ++i) delete *i; plugins.clear(); } plugin_list_mutex.unlock(); service_list_mutex.unlock(); return 0; } #ifdef _WIN32 HINSTANCE hInst; int __stdcall WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ) #else int ACE_MAIN(int argc, char *argv[]) #endif { #ifdef _WIN32 hInst = hInstance; #endif void load_modules(); void run_plugins(); void register_core_services(); register_core_services(); logger.log(LM_DEBUG, "Loading plugins...\n"); load_modules(); logger.log(LM_DEBUG, "Running plugins...\n"); run_plugins(); while(true) { logger.log(LM_DEBUG, "Main threas sleeping...\n"); boost::this_thread::sleep(boost::posix_time::seconds(5)); if(halt_requested) break; } return 0; } void terminate() { if(on_exit()) logger.log(LM_DEBUG, "Something bad happened on exit"); }