/// <summary>
        /// Function that finds a server with space for additional clients to be added.
        /// </summary>
        /// <param name="serverType">The type of server to search for</param>
        /// <returns></returns>
        public override ServerModel GetAvailableServer(ServerTypes serverType)
        {
            // Is there a server with room on it?
            var available            = false;
            var availableServerIndex = -1;

            foreach (var server in ServerList
                     .Where(server => server.Value.ConnectedClientModelList.Count < ReversiSettings.MaxReversiServerConnections - 1)
                     .Where(server => server.Value.Type == serverType))
            {
                available            = true;
                availableServerIndex = server.Key;
                break;
            }

            // If no servers are available, create a new server;
            ServerModel newServer;

            if (!available)
            {
                // TODO:  Will this crash if there is already a reversi game server running?
                newServer = new ReversiGameServerModel(GlobalSettings.ServerAddress, GlobalSettings.Port_GameServer);
                AddServerToManager(newServer);
            }
            else
            {
                // Retrieve the server by its index value
                newServer = GetServerFromListById(availableServerIndex);
            }

            return(newServer);
        }
        /// <summary>
        /// The main thread handle for this reversi server.
        /// </summary>
        public override void HandleServerThread()
        {
            Console.WriteLine("Server " + Id + ":  Starting HandleServerThread");

            while (!ShouldShutdown)
            {
                if (ConnectedClientModelList.Count == 0)
                {
                    //Console.WriteLine("No clients on ReversiServerManager " + Id);
                    Thread.Sleep(ServerSettings.ServerUpdatePulseDelay);
                    continue;
                }

                //// Check for enough clients to place on a server
                //Console.WriteLine("RSM currently has " + ConnectedClientModelList.Count + " clients connected to it...");

                // Get the oldest client
                ReversiClientModel oldestClientModel = (ReversiClientModel)GetOldestClientModelFromConnectedList();
                Console.WriteLine("-- Oldest available client is: " + oldestClientModel.Id);

                // Find an available game server or create a new one
                ReversiGameServerModel availableServer = (ReversiGameServerModel)GetAvailableServer(ServerTypes.ServerGameserver);
                Console.WriteLine("-- Available server is: " + availableServer.Id);

                // Move the client model to a reversi game server....
                availableServer.AddClientModelToServer(oldestClientModel);
                Console.WriteLine("-- Adding client " + oldestClientModel.Id + " to game server " + availableServer.Id);

                // And remove it from the connected list
                RemoveClientModelFromConnectedList(oldestClientModel);
                //Console.WriteLine("-- Client removed from ReversiServerManager list");
            }
        }