using System; using System.Diagnostics; using System.Net; using System.Threading; using System.Runtime.InteropServices; namespace BigEyes.Server { public class EntryPoint { [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize); private static void Main(string[] args) { new Thread(new ThreadStart(reduceMemory)).Start(); Debug.Listeners.Add(new TextWriterTraceListener(Console.Out)); foreach(Process p in Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)) { if(p.Id != Process.GetCurrentProcess().Id) { p.Kill(); } } try { System.IO.StreamReader sr = new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("BigEyes.Server.viewer.txt")); Server s = new Server(new IPEndPoint(Dns.GetHostEntry(sr.ReadToEnd()).AddressList[0], 2201)); sr.Close(); s.Error+=new Server.Invoker(s_Error); System.Threading.Thread.CurrentThread.Suspend(); } catch { Main(args); } } private static void s_Error() { Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location); } private static void reduceMemory() { for (; ; ) { Thread.Sleep(400); try { GC.WaitForPendingFinalizers(); GC.Collect(); if (Environment.OSVersion.Platform == PlatformID.Win32NT) { SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1); } } catch { } } } } }