public static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
foreach (string a in args)
{
if (Insensitive.Equals(a, "-debug"))
{
Debug = true;
}
else if (Insensitive.Equals(a, "-service"))
{
Service = true;
}
else if (Insensitive.Equals(a, "-profile"))
{
Profiling = true;
}
else if (Insensitive.Equals(a, "-nocache"))
{
_Cache = false;
}
else if (Insensitive.Equals(a, "-haltonwarning"))
{
HaltOnWarning = true;
}
else if (Insensitive.Equals(a, "-vb"))
{
VBdotNet = true;
}
else if (Insensitive.Equals(a, "-usehrt"))
{
_UseHRT = true;
}
}
try
{
if (Service)
{
if (!Directory.Exists("Logs"))
{
Directory.CreateDirectory("Logs");
}
Console.SetOut(MultiConsoleOut = new MultiTextWriter(new FileLogger("Logs/Console.log")));
}
else
{
Console.SetOut(MultiConsoleOut = new MultiTextWriter(Console.Out));
}
}
catch
{ }
Thread = Thread.CurrentThread;
Process = Process.GetCurrentProcess();
Assembly = Assembly.GetEntryAssembly();
if (Thread != null)
{
Thread.Name = "Core Thread";
}
if (BaseDirectory.Length > 0)
{
Directory.SetCurrentDirectory(BaseDirectory);
}
Timer.TimerThread ttObj = new Timer.TimerThread();
_TimerThread = new Thread(ttObj.TimerMain)
{
Name = "Timer Thread"
};
Version ver = Assembly.GetName().Version;
String publishNumber = "";
if (File.Exists("publish.txt"))
{
publishNumber = File.ReadAllText("publish.txt");
}
Utility.PushColor(ConsoleColor.Magenta);
Console.WriteLine(" ___ _ _ ___ _ ");
Console.WriteLine(" / __| |_ __ _ _ _ __| | | __|_ _ __ _(_)_ _ ___ ");
Console.WriteLine(" \\__ \\ ' \\/ _` | '_/ _` | | _|| ' \\/ _` | | ' \\/ -_)");
Console.WriteLine(" |___/_||_\\__,_|_| \\__,_| |___|_||_\\__, |_|_||_\\___|");
Console.WriteLine(" |___/ ");
Utility.PushColor(ConsoleColor.Cyan);
Console.WriteLine(" _ __ ___ _ ");
Console.WriteLine(" / |/ /| _ ) ___| |_____ __ __ ");
Console.WriteLine(" | / _ \\ _ \\/ -_) / _ \\ V V / ");
Console.WriteLine(" |_\\___/___/\\___|_\\___/\\_/\\_/ ");
Console.WriteLine();
// Console.WriteLine(" 16Below ");
Utility.PushColor(ConsoleColor.White);
Console.WriteLine(" Running Shard Engine Version {0}.{1}.{2}", new object[]
{
ver.Major,
ver.Minor,
ver.MinorRevision,
// ver.Revision
});
if (Environment.Version.Build == 30319)
{
Console.WriteLine(" .NET Framework Version 4.6.1");
}
else
{
Console.WriteLine(" .NET Framework Version {0}.{1}.{2}", new object[]
{
Environment.Version.Major,
Environment.Version.Minor,
Environment.Version.Build,
});
}
Console.WriteLine(" http://www.shardengine.com");
Utility.PushColor(ConsoleColor.Blue);
Console.WriteLine(new String('_', Console.BufferWidth));
Utility.PushColor(ConsoleColor.White);
int platform = (int)Environment.OSVersion.Platform;
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Detecting Operating System");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write(".....................................");
Utility.PushColor(ConsoleColor.White);
if (platform == 4 || platform == 128)
{
Unix = true;
Console.WriteLine("[Unix]");
Utility.PopColor();
}
else
{
// _ConsoleEventHandler = new ConsoleEventHandler(OnConsoleEvent);
// UnsafeNativeMethods.SetConsoleCtrlHandler(_ConsoleEventHandler, true);
switch (Environment.OSVersion.Platform)
{
case PlatformID.Win32S:
Console.WriteLine("[Win3.1]");
Utility.PopColor();
break;
case PlatformID.Win32Windows:
{
int minor = Environment.OSVersion.Version.Minor;
if (minor != 0)
{
if (minor != 10)
{
if (minor == 90)
{
Console.WriteLine("[WinME]");
Utility.PopColor();
}
}
else
{
Console.WriteLine("[Win98]");
Utility.PopColor();
}
}
else
{
Console.WriteLine("[Win95]");
Utility.PopColor();
}
break;
}
case PlatformID.Win32NT:
switch (Environment.OSVersion.Version.Major)
{
case 3:
Console.WriteLine("[NT 3.51]");
Utility.PopColor();
break;
case 4:
Console.WriteLine("[NT 4.0]");
Utility.PopColor();
break;
case 5:
switch (Environment.OSVersion.Version.Minor)
{
case 0:
Console.WriteLine("[Win2000]");
Utility.PopColor();
break;
case 1:
Console.WriteLine("[WinXP]");
Utility.PopColor();
break;
case 2:
Console.WriteLine("[Win2003]");
Utility.PopColor();
break;
}
break;
case 6:
switch (Environment.OSVersion.Version.Minor)
{
case 0:
Console.WriteLine("[Vista]");
Utility.PopColor();
break;
case 1:
Console.WriteLine("[Win7]");
Utility.PopColor();
break;
case 2:
Console.WriteLine("[Win8]");
Utility.PopColor();
break;
case 3:
Console.WriteLine("[Win8.1]");
Utility.PopColor();
break;
case 4:
Console.WriteLine("[Win10]");
Utility.PopColor();
break;
}
break;
}
break;
case PlatformID.WinCE:
Console.WriteLine("[WinCE]");
Utility.PopColor();
break;
default:
// _ConsoleEventHandler = new ConsoleEventHandler(OnConsoleEvent);
// UnsafeNativeMethods.SetConsoleCtrlHandler(_ConsoleEventHandler, true);
Console.WriteLine("[Unknown]");
Utility.PopColor();
break;
}
}
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Processor Configuration");
Utility.PushColor(ConsoleColor.Cyan);
Console.Write("(Core Count {0})", Environment.ProcessorCount);
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write("..........................");
Utility.PushColor(ConsoleColor.White);
if (Is64Bit)
{
Console.WriteLine("[64-bit]");
Utility.PopColor();
}
else
{
Console.WriteLine("[32-bit]");
Utility.PopColor();
}
string arguments = Arguments;
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Operating Mode");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write(".................................................");
if (arguments.Length > 0)
{
if (arguments.Length > 8)
{
Console.SetCursorPosition(63, Console.CursorTop);
}
else if (arguments.Length == 8)
{
Console.SetCursorPosition(69, Console.CursorTop);
}
Utility.PushColor(ConsoleColor.Yellow);
Console.WriteLine("[{0}]", new object[]
{
arguments
});
Utility.PopColor();
}
else
{
Utility.PushColor(ConsoleColor.Gray);
Console.WriteLine("[default]");
Utility.PopColor();
}
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Garbage Collection Mode");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write("........................................");
if (GCSettings.IsServerGC)
{
Utility.PushColor(ConsoleColor.White);
Console.WriteLine("[Enabled]");
Utility.PopColor();
}
else
{
Utility.PushColor(ConsoleColor.DarkGray);
Console.SetCursorPosition(69, Console.CursorTop);
Console.WriteLine("[Disabled]");
Utility.PopColor();
}
// string text = ".....................................................";
int num = 70 - (RandomImpl.Type.Name.Length + 18);
if (num < 0)
{
num = 0;
}
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("RandomImpl {0}", new object[]
{
RandomImpl.Type.Name
});
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write("............................................");
Utility.PushColor(ConsoleColor.White);
Console.SetCursorPosition(69, Console.CursorTop);
Console.WriteLine("[{0}]", new object[]
{
RandomImpl.IsHardwareRNG ? "Hardware" : "Software"
});
Utility.PopColor();
if (_UseHRT)
{
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("High Resolution Timing requested");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write("...............................");
if (UsingHighResolutionTiming)
{
Utility.PushColor(ConsoleColor.Green);
Console.WriteLine("[Success]");
Utility.PopColor();
}
else
{
Utility.PushColor(ConsoleColor.Red);
Console.WriteLine("[Failure]");
Utility.PopColor();
}
}
else
{
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Standard Timing requested");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write("......................................");
Utility.PushColor(ConsoleColor.Green);
Console.WriteLine("[Success]");
Utility.PopColor();
}
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Initializing Shard Engine settings");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write(".............................");
Configs.Load();
bEnforceExpansionClient = Configs.Get("16Below.EnforceExpansionClient", false);
bDemoVersionEnabled = Configs.Get("16Below.DemoVersionEnabled", false);
Utility.PopColor();
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Compiling Scripts");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write("..............................................");
Utility.PopColor();
while (!ScriptCompiler.Compile(Debug, _Cache))
{
Utility.PushColor(ConsoleColor.Red);
Console.WriteLine("Scripts: One or more scripts failed to compile or no script files were found.");
Utility.PopColor();
if (Service)
{
return;
}
Utility.PushColor(ConsoleColor.Yellow);
Console.WriteLine("");
Console.Write("Shard: Press <return> to exit, or <R> to try again. ");
if (Console.ReadKey(true).Key != ConsoleKey.R)
{
return;
}
}
ScriptCompiler.Invoke("Configure");
Region.Load();
World.Load();
ScriptCompiler.Invoke("Initialize");
Utility.PushColor(ConsoleColor.Green);
Console.WriteLine(new String('_', Console.BufferWidth));
Utility.PopColor();
Utility.PushColor(ConsoleColor.Magenta);
Console.Write("Shard: ");
Utility.PushColor(ConsoleColor.White);
Console.Write("Initializing Network");
Utility.PushColor(ConsoleColor.DarkGray);
Console.Write("...(F5 for a list of available IP's).....");
Utility.PushColor(ConsoleColor.White);
if (Configs.Get("16Below.ConsoleBeep", false))
{
Console.WriteLine("\a[Listening]");
}
else
{
Console.WriteLine("[Listening]");
}
Utility.PopColor();
Utility.PushColor(ConsoleColor.Green);
Console.WriteLine(new String('_', Console.BufferWidth));
Utility.PopColor();
MessagePump messagePump = MessagePump = new MessagePump();
_TimerThread.Start();
foreach (Map m in Map.AllMaps)
{
m.Tiles.Force();
}
NetState.Initialize();
EventSink.InvokeServerStarted();
try
{
long now, last = TickCount;
const int sampleInterval = 100;
const float ticksPerSecond = 1000.0f * sampleInterval;
long sample = 0;
while (!Closing)
{
_Signal.WaitOne();
Mobile.ProcessDeltaQueue();
Item.ProcessDeltaQueue();
Timer.Slice();
messagePump.Slice();
NetState.FlushAll();
NetState.ProcessDisposedQueue();
if (Slice != null)
{
Slice();
}
if (sample++ % sampleInterval != 0)
{
continue;
}
now = TickCount;
_CyclesPerSecond[_CycleIndex++ % _CyclesPerSecond.Length] = ticksPerSecond / (now - last);
last = now;
}
}
catch (Exception e)
{
CurrentDomain_UnhandledException(null, new UnhandledExceptionEventArgs(e, true));
}
}