예제 #1
0
        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");
        }