public static void Main(string[] args) { //get settings S = new Settings(); //The IP address can either be IPv4 or IPv6 S.IP = INI.getSetting(Config, "NET", "IP"); //The port must be in the range of ushort S.Port = INI.getInt(Config, "NET", "Port", 0); //The block size for clients. If you expect a high number of clients //reduce this number. S.BlockSize = INI.getInt(Config, "NET", "BlockSize", 0); //The serial port of OneRNG S.SerialPort = INI.getSetting(Config, "SerialPort", "PortName"); S.ApplyDefaults(); //init RNG Console.Write("Starting RNG..."); R = new RNG(S.SerialPort); R.SetMode(RNG.RngModes.AvalancheWithWhitener); R.Start(); Console.WriteLine("OK"); //init server Console.Write("Starting TCP Server..."); KeepLoop = true; TcpServer Srv = new TcpServer(S.IP, S.Port); //Bind to the Srv.NewConnection event here if you wish. Srv.NewUser += new NewUserHandler(Srv_NewUser); Srv.Start(); Console.WriteLine("OK, Server started on {0}:{1}", S.IP, S.Port); //Waits for quit command (you can also press Ctrl+C for a less graceful shutdown) while (Console.ReadLine().ToLower() != "quit") { ; } //end all user threads gracefully KeepLoop = false; //exit server and RNG R.Dispose(); Srv.Dispose(); //save current settings, if we implement a more advanced CLI it might become handy INI.Save(Config, "NET", "IP", S.IP, false); INI.Save(Config, "NET", "Port", S.Port.ToString(), false); INI.Save(Config, "NET", "BlockSize", S.BlockSize.ToString(), false); INI.Save(Config, "SerialPort", "PortName", S.SerialPort, false); Console.WriteLine("Server closed"); }