/// <summary>
        /// 플레이어를 삭제합니다.
        /// </summary>
        /// <param name="serial"></param>
        /// <returns></returns>
        public bool DeletePlayer(int serial)
        {
            if (playerContainer.ContainsKey(serial) == false)
            {
                return(false);
            }

            MNetworkPlayer player = FindPlayer(serial);

            if (player == null)
            {
                return(false);
            }

            playerContainer.Remove(player.Serial);

            MNetworkRoom room = FindRoom(player.RoomKey);

            if (room != null)
            {
                room.LeavePlayer(player);
            }

            if (room.PlayerCount == 0)
            {
                DeleteRoom(room.roomKey);
            }

            if (player.PlayerState == MNetworkPlayer.MPlayerState.LoginSuccess)
            {
                playerNameContainer.Remove(player.UserName);
            }

            return(true);
        }
        /// <summary>
        /// 플레이어를 이름으로 찾는 컨테이너인 playerNameContainer에 추가시킵니다.<br></br>
        /// 로그인이 완료된 플레이어를 이름으로 빠르게 찾기 위한 컨테이너 입니다.
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool AddPlayerToNameList(MNetworkPlayer player)
        {
            // 이미 존재한다면 실패
            if (playerNameContainer.ContainsKey(player.UserName) == true)
            {
                return(false);
            }

            playerNameContainer.Add(player.UserName, player);
            return(true);
        }
        /// <summary>
        /// 플레이어를 추가합니다.
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool AddPlayer(MNetworkPlayer player)
        {
            // 이미 존재한다면 실패
            if (playerContainer.ContainsKey(player.Serial) == true)
            {
                return(false);
            }

            playerContainer.Add(player.Serial, player);
            player.RoomKey = string.Empty;
            return(true);
        }
        /// <summary>
        /// 방에서 플레이어를 퇴장시킵니다.
        /// </summary>
        /// <param name="room"></param>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool ExitFromRoom(string roomKey, MNetworkPlayer player)
        {
            MNetworkRoom room = FindRoom(roomKey);

            if (room == null)
            {
                return(false);
            }

            room.LeavePlayer(player.Serial);

            return(true);
        }
        /// <summary>
        /// 방에서 플레이어를 퇴장시킵니다.
        /// </summary>
        /// <param name="room"></param>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool ExitFromRoom(MNetworkRoom room, MNetworkPlayer player)
        {
            if (room == null)
            {
                return(false);
            }

            if (player == null)
            {
                return(false);
            }

            room.LeavePlayer(player.Serial);

            return(true);
        }
        /// <summary>
        /// 방에 플레이어를 입장시킵니다.
        /// </summary>
        /// <param name="room"></param>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool JoinRoom(string roomKey, MNetworkPlayer player)
        {
            MNetworkRoom room = FindRoom(roomKey);

            if (room == null)
            {
                return(false);
            }

            if (player.RoomKey != string.Empty)
            {
                FindRoom(player.RoomKey).LeavePlayer(player.Serial);
            }

            room.JoinPlayer(player);

            return(true);
        }
        /// <summary>
        /// 방에 플레이어를 입장시킵니다.
        /// </summary>
        /// <param name="room"></param>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool JoinRoom(string roomKey, string playerKey, out MNetworkRoom room)
        {
            MNetworkPlayer player = FindPlayer(playerKey);
            MNetworkRoom   r      = FindRoom(roomKey);

            room = r;

            if (r == null || player == null)
            {
                return(false);
            }

            if (player.RoomKey != string.Empty)
            {
                FindRoom(player.RoomKey).LeavePlayer(player.Serial);
            }

            r.JoinPlayer(player);

            return(true);
        }