X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmain.c;h=1728d00aeac1b47b0a947b7fcd6790a40fec6b8d;hb=003f6906aeb911cce26ee25b48a818d0d1c4aea5;hp=183ebaedb3e1e205215b51ed0a8c7395d9beb91d;hpb=be180588e158f3b1297ffaf3a715577fb3d73f85;p=NeonServV5.git diff --git a/src/main.c b/src/main.c index 183ebae..1728d00 100644 --- a/src/main.c +++ b/src/main.c @@ -35,8 +35,13 @@ #include "DBHelper.h" #include "commands.h" #include "ConfigParser.h" +#include "ssl.h" time_t start_time; +static int running; +static int statistics_requested_lusers = 0; +int statistics_enabled; +TIMEQ_CALLBACK(main_statistics); void cleanup() { free_sockets(); @@ -87,8 +92,8 @@ static int load_mysql_config() { return 1; } -int main(void) -{ +int main(void) { +main: start_time = time(0); @@ -106,8 +111,11 @@ int main(void) if(!load_mysql_config()) return 0; + statistics_enabled = get_int_field("statistics.enable"); + queue_init(); init_lang(); + ssl_init(); init_parser(); init_UserNode(); init_ChanNode(); @@ -121,9 +129,13 @@ int main(void) init_DBHelper(); load_languages(); + int update_minutes = get_int_field("statistics.frequency"); + if(!update_minutes) update_minutes = 2; + timeq_add(update_minutes * 60 + 10, main_statistics, NULL); time_t socket_wait; - while(1) { + running = 1; + while(running) { socket_wait = time(0) + SOCKET_SELECT_TIME; do { socket_loop(SOCKET_SELECT_TIME); @@ -134,6 +146,8 @@ int main(void) destroyEvents(); queue_loop(); } + cleanup(); + goto main; } int stricmp (const char *s1, const char *s2) @@ -165,3 +179,58 @@ int stricmplen (const char *s1, const char *s2, int len) return c1 - c2; } +void restart_bot(int hard_restart) { + running = 0; +} + +void stop_bot() { + cleanup(); + exit(0); +} + +void reload_config() { + loadConfig("neonserv.conf"); +} + +TIMEQ_CALLBACK(main_statistics) { + int update_minutes = get_int_field("statistics.frequency"); + if(!update_minutes) update_minutes = 2; + timeq_add(update_minutes * 60, main_statistics, NULL); + if(get_int_field("statistics.enable")) { + statistics_enabled = 1; + statistics_requested_lusers = 1; + if(get_int_field("statistics.include_lusers")) { + struct ClientSocket *bot, *lusersbot = NULL; + for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { + if(bot->flags & SOCKET_FLAG_PREFERRED) + lusersbot = bot; + } + bot = lusersbot; + if(bot == NULL) bot = getBots(SOCKET_FLAG_READY, NULL); + putsock(bot, "LUSERS"); + } else { + statistics_update(); + } + } else + statistics_enabled = 0; +} + +void statistics_update() { + if(get_int_field("statistics.enable") && statistics_requested_lusers && get_string_field("statistics.execute")) { + statistics_requested_lusers = 0; + char command[MAXLEN]; + /* parameters: + - visible users + - visible chanusers + - visible channels + - privmsg per minute + - commands per minute + - network users + - network channels + */ + sprintf(command, "%s %d %d %d %d %d %d %d", get_string_field("statistics.execute"), getUserCount(), getChanUserCount(), getChannelCount(), statistics_privmsg, statistics_commands, statistics_network_users, statistics_network_channels); + statistics_privmsg = 0; + statistics_commands = 0; + system(command); + } +}