/// <summary>
        /// Add a user to the queue
        /// </summary>
        /// <param name="user"></param>
        public bool QueueUser(MRKToSUser user)
        {
            if (MatchState != State.Waiting)
            {
                MRKToSLogger.LogError($"Can not queue {user.Username} to the match, match has already started or is still idle");
                return(false);
            }

            if (FindQueuedUser(user.Username) != null)
            {
                MRKToSLogger.LogWarning($"User {user.Username} is already queued");
                return(false);
            }

            if (m_QueuedUsers.Count >= Settings.MaximumPlayerCount)
            {
                MRKToSLogger.LogWarning($"Can not que {user.Username} to the match, match has maximum player count");
                return(false);
            }

            m_QueuedUsers.Add(user);

            MRKToSLogger.LogInfo($"User {user.Username} has been added to the queue");
            LogQueueCount();

            MatchListener.OnQueueUserAdded(user);

            UpdatePregame();
            return(true);
        }
        /// <summary>
        /// Remove a user from the queue
        /// </summary>
        /// <param name="user"></param>
        public bool DequeueUser(MRKToSUser user)
        {
            if (MatchState != State.Waiting)
            {
                MRKToSLogger.LogError($"Can not dequeue {user.Username} to the match, match has already started or is still idle");
                return(false);
            }

            if (FindQueuedUser(user.Username) == null)
            {
                MRKToSLogger.LogWarning($"User {user.Username} is not queued");
                return(false);
            }

            m_QueuedUsers.Remove(user);

            MRKToSLogger.LogInfo($"User {user.Username} has been removed from the queue");
            LogQueueCount();

            MatchListener.OnQueueUserRemoved(user);

            UpdatePregame();
            return(true);
        }