示例#1
0
        /// <summary>
        /// Start accepting Tcp sockets connections from clients
        /// </summary>
        public void StartServer()
        {
            Console.WriteLine("Server waiting for client");

            CallbackDelegate callMe = new CallbackDelegate(ConnectionRequested);

            // This begins an "event loop."
            // ConnectionRequested will be invoked when the first connection arrives.
            Network.ServerAwaitingClientLoop(callMe);
        }
示例#2
0
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
            // Read world settings and create new world and add stars etc.
            try {
                XDocument settings = XDocument.Parse(Resources.settings);
                XElement  root     = settings.Root;

                universeSize    = Convert.ToInt32(root.Element("UniverseSize").Value);    // 750
                msPerFrame      = Convert.ToInt32(root.Element("MSPerFrame").Value);      // 16
                engineStrength  = Convert.ToDouble(root.Element("EngineStrength").Value); // 0.08
                projectileSpeed = Convert.ToInt32(root.Element("ProjectileSpeed").Value); // 15
                shotDelay       = Convert.ToInt32(root.Element("ShotDelay").Value);       // 6
                respawnRate     = Convert.ToInt32(root.Element("RespawnRate").Value);
                starSize        = Convert.ToInt32(root.Element("StarSize").Value);        // 35
                shipSize        = Convert.ToInt32(root.Element("ShipSize").Value);        // 20
                turningRate     = Convert.ToDouble(root.Element("TurningRate").Value);    // 2
                mode            = root.Element("Mode").Value;
                Console.WriteLine(root.Element("Mode").Value);
                world = new World(universeSize);

                int starId = 0;
                foreach (XElement star in root.Elements("Star"))
                {
                    world.AddStar(new Star(starId, Convert.ToDouble(star.Element("mass").Value), Convert.ToInt32(star.Element("x").Value), Convert.ToInt32(star.Element("y").Value)));
                    ++starId;
                }
            }
            catch (Exception e) {
                Console.WriteLine("Settings could not be read: " + e.Message);
            }

            clients            = new List <SocketState>();
            worldStringBuilder = new StringBuilder();
            updateStopwatch    = new Stopwatch();
            random             = new Random();

            // Start a thread infinitely updating the world
            Thread worldUpdater = new Thread(start: UpdateWorld);

            updateStopwatch.Start();
            worldUpdater.Start();
            startTime = DateTime.Now;

            // Begin receiving clients
            Network.ServerAwaitingClientLoop(HandleNewClient);

            // Keep Main running until "close" is enterd into the terminal
            Console.WriteLine("Enter 'close' to terminate application: ");
            while (!Console.ReadLine().ToLower().Equals("close"))
            {
            }
            endTime = DateTime.Now;
            TimeSpan gameDuration = endTime - startTime;

            duration = gameDuration.TotalMinutes;

            //TODO - update database here
            int gameID = WriteGameData();

            WritePlayerData(gameID);
            Environment.Exit(0);
        }