private void On_Join_Lobby_Failure( ELobbyID lobby_id, EPersistenceID player_id, EMessageRequestID request_id, EJoinLobbyFailureReason reason )
        {
            CLog.Log( ELoggingChannel.Lobby, ELogLevel.Medium, String.Format( "Player {0} failed to join lobby {1} because of {2}.",
                                                                                                    CConnectedPlayerManager.Get_Player_Log_Name( player_id ),
                                                                                                    Get_Lobby_Log_Description( lobby_id ),
                                                                                                    reason.ToString() ) );

            CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Player_By_Persistence_ID( player_id );
            if ( player != null )
            {
                player.Change_State( EConnectedPlayerState.Chat_Idle );
            }

            if ( !CConnectedPlayerManager.Instance.Is_Connected( player_id ) )
            {
                return;
            }

            CJoinLobbyFailure join_response = new CJoinLobbyFailure( request_id, reason );
            CServerMessageRouter.Send_Message_To_Player( join_response, player_id );
        }
        private void Handle_Join_Failure( CJoinLobbyFailure message )
        {
            switch ( message.Reason )
            {
                case EJoinLobbyFailureReason.Lobby_Full:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Lobby_Full );
                    break;

                case EJoinLobbyFailureReason.Password_Mismatch:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Password_Mismatch );
                    break;

                case EJoinLobbyFailureReason.Creator_Is_Ignoring_You:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Creator_Is_Ignoring_You );
                    break;

                case EJoinLobbyFailureReason.Target_Player_Does_Not_Exist:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Player_Does_Not_Exist );
                    break;

                case EJoinLobbyFailureReason.Target_Player_Not_In_A_Lobby:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Player_Not_In_A_Lobby );
                    break;

                case EJoinLobbyFailureReason.Invalid_State_To_Join:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Invalid_State_To_Join );
                    break;

                case EJoinLobbyFailureReason.Banned:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Banned );
                    break;

                case EJoinLobbyFailureReason.Lobby_Does_Not_Exist:
                    CClientResource.Output_Text< EClientTextID >( EClientTextID.Client_Lobby_Join_Lobby_Does_Not_Exist );
                    break;
            }
        }