namespace Holo { using Holo.Managers; using Holo.Socketservers; using System; using System.IO; using System.Runtime.CompilerServices; using System.Threading; public class Eucalypt { private static Thread serverMonitor = new Thread(new ThreadStart(Eucalypt.monitorServer)); private static void Boot() { ThreadPool.SetMaxThreads(300, 400); DateTime now = DateTime.Now; Out.WriteLine("Avvio ImagiNeXt Server per " + Environment.UserName + "..."); Out.WriteLine("Caricamento..."); Out.WriteLine(@"Controllo di \locale\mysql.ini..."); string path = IO.workingDirectory + @"\locale\mysql.ini"; if (!File.Exists(path)) { Out.WriteError("mysql.ini non trovato a " + path); Shutdown(); } else { Out.WriteLine("mysql.ini trovato " + path); Out.WriteBlank(); string dbHost = IO.readINI("mysql", "host", path); int dbPort = int.Parse(IO.readINI("mysql", "port", path)); string dbUsername = IO.readINI("mysql", "username", path); string dbPassword = IO.readINI("mysql", "password", path); string dbName = IO.readINI("mysql", "database", path); if (DB.openConnection(dbHost, dbPort, dbName, dbUsername, dbPassword)) { int num2; int num3; int num4; string str6; Out.WriteBlank(); try { num2 = int.Parse(Config.getTableEntry("server_game_port")); num3 = int.Parse(Config.getTableEntry("server_game_maxconnections")); num4 = int.Parse(Config.getTableEntry("server_mus_port")); int num5 = int.Parse(Config.getTableEntry("server_mus_maxconnections")); str6 = Config.getTableEntry("server_mus_host"); } catch { Out.WriteError("system_config tabella contiene valori non validi per la presa di configurazione del server!"); Shutdown(); return; } string langExtension = Config.getTableEntry("lang"); if (langExtension == "") { Out.WriteError("N. valida lingua estensione [field: lang] \x00e8 stato fissato in system_config tavola!"); Shutdown(); } else { stringManager.Init(langExtension); Out.WriteBlank(); stringManager.initFilter(); Out.WriteBlank(); catalogueManager.Init(); Out.WriteBlank(); recyclerManager.Init(); Out.WriteBlank(); rankManager.Init(); Out.WriteBlank(); Config.Init(); Out.WriteBlank(); userManager.Init(); eventManager.Init(); if (!gameSocketServer.Init(num2, num3)) { Shutdown(); } else { Out.WriteBlank(); if (!musSocketServer.Init(num4, str6)) { Shutdown(); } else { Out.WriteBlank(); resetDynamics(); Out.WriteBlank(); printDatabaseStats(); Out.WriteBlank(); TimeSpan span = (TimeSpan) (DateTime.Now - now); Out.WriteLine("ImagiNeXt Server avviato in " + span.TotalMilliseconds.ToString() + " ms."); GC.Collect(); Out.WriteLine("ImagiNext stato: pronto"); Out.WriteBlank(); Out.minimumImportance = Out.logFlags.MehAction; serverMonitor.Priority = ThreadPriority.Lowest; serverMonitor.Start(); } } } } } } private static void Main() { Console.WindowHeight = Console.LargestWindowHeight - 0x19; Console.WindowWidth = Console.LargestWindowWidth - 0x19; Console.CursorVisible = false; Console.Title = "ImagiNeXt Server v3.2.6"; Out.WritePlain(" --{X } {X}--"); Out.WritePlain(" | {X} {X} |"); Out.WritePlain(" | {X} {X} |"); Out.WritePlain(" | --xxXxx-- |"); Out.WritePlain(" | {X} {X} |"); Out.WritePlain(" | {X} {X} |"); Out.WritePlain(" --{X} {X}--"); Out.WritePlain(" ImagiNeXt Server "); Out.WriteBlank(); Out.WritePlain("Copyright 2008/09 :HanSolaris Group"); Out.WritePlain(" www.HanSolaris.com"); Out.WriteBlank(); Out.WritePlain("Versione----------------"); Out.WritePlain(" Cuore: Eucalypt, C#.NET"); Out.WritePlain(" Client: V22-V25"); Out.WritePlain(" Resp. Release: Live"); Out.WritePlain("------------------------"); Out.WriteBlank(); Boot(); } private static void monitorServer() { while (true) { int userCount = userManager.userCount; int peakUserCount = userManager.peakUserCount; int roomCount = roomManager.roomCount; int peakRoomCount = roomManager.peakRoomCount; int acceptedConnections = gameSocketServer.acceptedConnections; long num6 = GC.GetTotalMemory(false) / 0x400L; Console.Title = string.Concat(new object[] { "ImagiNext Server v3.2.6 | Utenti Online: ", userCount, " | Camere Attive: ", roomCount, " | RAM: ", num6, "Kb" }); DB.runQuery(string.Concat(new object[] { "UPDATE system SET onlinecount = '", userCount, "',onlinecount_peak = '", peakUserCount, "',activerooms = '", roomCount, "',activerooms_peak = '", peakRoomCount, "',connections_accepted = '", acceptedConnections, "'" })); Thread.Sleep(0x1770); Out.WriteTrace("Servermonitor loop"); } } private static void printDatabaseStats() { int num = DB.runRead("SELECT COUNT(*) FROM users", null); int num2 = DB.runRead("SELECT COUNT(*) FROM rooms", null); int num3 = DB.runRead("SELECT COUNT(*) FROM furniture", null); Out.WriteLine(string.Concat(new object[] { "Trovati: ", num, " utenti, ", num2, " stanze e ", num3, " furniture." })); } private static void resetDynamics() { DB.runQuery("UPDATE system SET onlinecount = '0',onlinecount_peak = '0',connections_accepted = '0',activerooms = '0'"); DB.runQuery("UPDATE users SET ticket_sso = NULL"); DB.runQuery("UPDATE rooms SET visitors_now = '0'"); Out.WriteLine("Resetto le connessioni client."); Out.WriteLine("Resetto il conteggio delle camere."); Out.WriteLine("SSO Login resettati."); } public static void Shutdown() { Out.WriteBlank(); if (serverMonitor.IsAlive) { serverMonitor.Abort(); } DB.closeConnection(); Out.WriteLine("Chiusura completata. Premere un tasto per uscire."); Console.ReadKey(true); Console.Beep(0x578, 0x3e8); Environment.Exit(2); } public delegate void commonDelegate(); } }