Merge branch 'master' into IOMultiplexer
[NeonServV5.git] / src / main.c
index 17b8258c5110fd17760cce6313f4d5a2154d11d8..8bc23ddbcdffff5ec7330ce16c2ba4aa20d78204 100644 (file)
 #include "IRCQueue.h"
 #include "DBHelper.h"
 #include "ConfigParser.h"
-#include "ssl.h"
 #include "QServer.h"
 #include "version.h"
 #include "modules.h"
 #include "module_commands.h"
 #include "ModuleFunctions.h"
+#include "IOHandler.h"
 
 time_t start_time;
 static int running, hard_restart;
@@ -108,30 +108,23 @@ static int load_mysql_config() {
     return 1;
 }
 
-#ifdef HAVE_THREADS
-pthread_t *current_threads = NULL;
+static TIMEQ_CALLBACK(clear_cache) {
+    timeq_add(CLEAR_CACHE_INTERVAL, 0, clear_cache, NULL);
+    clearTempUsers();
+    destroyEvents();
+    mysql_free();
+}
 
-void * thread_main(void *arg) {
-    time_t socket_wait;
+void *thread_main(void *arg) {
     while(running) {
-        socket_wait = time(0) + SOCKET_SELECT_TIME;
-        do {
-            if(!socket_loop(SOCKET_SELECT_TIME)) {
-                if(!running) break;
-                putlog(LOGLEVEL_ERROR, "No more active Bots... shutting down.\n");
-                cleanup();
-                exit(0);
-            }
-        } while(time(0) < socket_wait);
-        if(!running) break;
-        clearTempUsers();
-        destroyEvents();
-        mysql_free();
+        iohandler_poll();
     }
-    running_threads--;
     return NULL;
 }
 
+#ifdef HAVE_THREADS
+pthread_t *current_threads = NULL;
+
 int getCurrentThreadID() {
     if(!current_threads) return 0;
     int i;
@@ -264,18 +257,6 @@ main:
     
     start_time = time(0);
     
-    #ifdef WIN32
-    int res;
-    WSADATA wsadata;
-    // Start Windows Sockets.
-    res = WSAStartup(MAKEWORD(2, 0), &wsadata);
-    if (res)
-    {
-        perror("Unable to start Windows Sockets");
-        return 0;
-    }
-    #endif
-    
     statistics_enabled = get_int_field("statistics.enable");
     
     #ifdef HAVE_THREADS
@@ -284,11 +265,7 @@ main:
     THREAD_MUTEX_INIT(whohandler_mass_sync);
     #endif
     
-    queue_init();
-    init_sockets();
-    init_timeq();
     init_lang();
-    ssl_init();
     init_parser();
     init_UserNode();
     init_ChanNode();
@@ -311,6 +288,8 @@ main:
     
     timeq_add(90, 0, main_checkauths, NULL);
     
+    timeq_add(CLEAR_CACHE_INTERVAL, 0, clear_cache, NULL);
+    
     int worker_threads = get_int_field("General.worker_threads");
     if(!worker_threads) worker_threads = 1;
     running = 1;
@@ -321,38 +300,13 @@ main:
         running_threads++;
         pthread_create(&current_threads[tid_id], NULL, thread_main, NULL);
     }
-    int usleep_delay = 1000000 / TICKS_PER_SECOND;
-    while(running) {
-        timeq_tick();
-        loop_modules();
-        qserver_loop();
-        queue_loop();
-        mysql_free();
-        usleep(usleep_delay);
-    }
+    #endif
+    thread_main(NULL);
+    #ifdef HAVE_THREADS
     for(tid_id = 0; tid_id < worker_threads; tid_id++) {
         pthread_join(current_threads[tid_id], NULL);
     }
     running_threads = 0;
-    #else
-    time_t socket_wait;
-    while(running) {
-        socket_wait = time(0) + SOCKET_SELECT_TIME;
-        do {
-            if(!socket_loop(SOCKET_SELECT_TIME)) {
-                putlog(LOGLEVEL_ERROR, "No more active Bots... shutting down.\n");
-                cleanup();
-                exit(0);
-            }
-        } while(time(0) < socket_wait);
-        timeq_tick();
-        loop_modules();
-        clearTempUsers();
-        destroyEvents();
-        qserver_loop();
-        queue_loop();
-        mysql_free();
-    }
     #endif
     cleanup();
     if(hard_restart) {