인게임 서버 이벤트 핸들러

유저가 인게임 룸에 접속 후 수신되는 이벤트들 입니다.

이벤트 수신

아래의 핸들러를 사용하기 위해서는 이벤트 수신이 우선되어야 하며, 이 메소드에서 수신된 이벤트들을 처리합니다. 리턴되는 값은 처리된 이벤트 개수입니다.

주의
인게임 서버 이벤트를 수신하기 위해서 항상 Update()에서 Poll()을 호출해야 합니다.
Poll() -> int

// example
Backend.Match.poll();

인게임 서버 접속 & 재접속 이벤트 핸들러

자신 혹은 다른 유저가 인게임 서버에 접속 할 때마다 호출되는 이벤트 핸들러 입니다.
자기 자신이 인게임 서버에 재접속했을 때도 호출됩니다.
다른 유저가 재접속 했을 때는 호출되지 않습니다.

OnSessionJoinInServer(JoinChannelEventArgs args) => {}

//example
Backend.Match.OnSessionJoinInServer(args) += {
    // TODO
};

JoinChannelEventArgs

ValueTypeDescription
ErrInfoErrorInfo에러 정보
SessionInfoSessionInfo접속 세션 정보

Return case

  • 인게임 서버 접속에 성공한 경우
    ErrInfo : ErrorInfo.Success

  • 인게임 서버 접속에 실패한 경우
    ErrInfo.Category : ErrorCode.Exception
    ErrInfo.Reason : 접속 실패에 대한 이유

  • 자기자신이 인게임 서버 재접속에 성공한 경우
    ErrInfo.Category : ErrorCode.Success
    ErrInfo.Detail : ErrorCode.NetworkOnline
    ErrInfo.Reason : Reconnect Success

다른 유저 인게임 서버 재접속 이벤트 핸들러

다른 유저가 인게임 서버에 재접속 성공했을 경우 호출되는 이벤트 핸들러입니다.
자기 자신이 인게임 서버에 재접속 성공했을 때는 호출되지 않습니다.

OnSessionOnline(SessionOnlineEventArgs args) => {}

//example
Backend.Match.OnSessionOnline(args) += {
    // TODO
};

SessionOnlineEventArgs

ValueTypeDescription
ErrInfoErrorInfo에러 정보
SessionSessionInfo재접속 성공한 세션

Return case

  • 재접속 성공했을 경우
    ErrInfo.Category : ErrorCode.Success
    ErrInfo.Detail : ErrorCode.NetworkOnline
    ErrInfo.Reason : Session Reconnect

인게임 세션 리스트 이벤트 핸들러

인게임 서버에 접속했을 때 최초 1회 호출되는 이벤트 핸들러입니다.
자신을 포함하여 현재 인게임 서버에 접속해있는 유저들의 세션 정보가 포함되어 있습니다.
자기자신이 인게임 서버에 재접속했을 때도 호출됩니다.

OnSessionListInServer(SessionListInChannelEventArgs args) => {}

//example
Backend.Match.OnSessionListInServer(args) += {
    // TODO
};

SessionListInChannelEventArgs

ValueTypeDescription
ErrInfoErrorCode에러 정보
SessionListList < SessionInfo >접속한 세션들의 리스트

인게임 룸 접속 이벤트 핸들러

자신 혹은 다른 유저가 인게임 룸에 접속 할 때마다 호출되는 이벤트 핸들러입니다.
접속되어 있는 세션의 매칭 기록도 포함되어 있습니다.

주의
  • GameRecords의 경우 현재 방에 접속한 인원의 정보만 포함되어 있습니다.
  • A, B, C, D의 유저가 있을 때 방에 A만 접속해 있고, B가 접속했을 경우 A와 B는 각각 A, B의 매칭 기록이 들어있는 OnMatchInGameAccess 이벤트 핸들러를 호출받습니다.
  • 이후 C가 방에 입장하면 A, B, C는 각각 A, B, C의 매칭 기록이 들어있는 OnMatchInGameAccess 이벤트 핸들러를 호출받습니다.
  • D가 방에 접속하지 않은 시점에서 A, B, C 유저는 D의 매칭기록을 알 수 없습니다.
  • 가장 먼저 방에 입장한 A는 자신의 매칭기록을 4번 중복해서 수신받습니다.
  • 중복처리는 클라이언트에서 자체적으로 수행해야 합니다.
  • OnMatchInGameAccess(MatchInGameAccessEventArgs args) => {}
    
    //example
    Backend.Match.OnMatchInGameAccess(args) += {
        // TODO
    };

    MatchInGameAccessEventArgs

    ValueTypeDescription
    ErrInfoErrorCode에러 정보
    Reasonstring에러이유
    GameRecordsList < MatchUserGameRecord >접속한 유저들의 매칭 기록

    MatchUserGameRecord

    ValueTypeDescription
    m_sessionIdSessionId세션 ID
    m_teamNumberbyte팀정보
    m_numberOfMatchesint해당 게임 모드 내 총 매치수
    m_numberOfWinint해당 게임 모드 내 승리수
    m_numberOfDrawint해당 게임 모드 내 총 무승부수
    m_numberOfDefeatsint해당 게임 모드 내 패배수
    m_numberOfChampionshipint개인전일 경우 해당 게임 모드 내 1등 횟수
    m_pointsint포인트 모드일 경우 유저의 포인트 (포인트 모드가 아닐 시 0)
    m_mmrintMMR 모드일 경우 유저의 MMR (MMR 모드가 아닐 시 0)

    Return case

    • 인게임 룸 접속에 성공한 경우
      ErrInfo : ErrorInfo.Success

    • 인게임 룸 접속에 실패한 경우
      ErrInfo : ErrorInfo.Exception
      Reason : 룸 접속 실패에 대한 이유

    게임 시작 이벤트 핸들러

    인게임 룸에 모든 유저가 접속하여도 바로 게임을 진행할 수 없습니다.
    이럴 경우 먼저 들어온 유저가 유리하기 때문입니다. 뒤끝매치는 모든 유저가 인게임 룸에 입장한 이후 약 15초 이후 모든 유저에게 게임시작 메시지를 전송합니다.

    주의
  • 유저가 인게임 서버 입장 후 게임시작 이벤트 핸들러가 오기 전까지 SendDataToInGameRoom 함수를 이용하여 서버로 보낸 바이너리 데이터는 브로드캐스팅 되지 않습니다. (자기 자신에게도 메시지가 오지 않습니다.)
  • 게임로직에 필요한 메시지는 반드시 게임시작 이벤트 핸들러 호출 이후 SendDataToInGameRoom 함수를 이용하여 서버로 송신해야 합니다.
  • OnMatchInGameStart() => {}
    
    //example
    Backend.Match.OnMatchInGameStart() += {
        // TODO
    };

    바이너리 데이터 이벤트 핸들러

    서버에서 클라이언트가 보낸 메시지를 브로드캐스팅 했을 때 호출되는 이벤트 핸들러입니다.
    자기자신이 메시지를 보냈을 때도 호출됩니다.

    수신받은 바이너리 데이터는 각 게임에 맞는 타입으로 파싱하여 이용하시면 됩니다.

    OnMatchRelay(MatchRelayEventArgs args) => {}
    
    //example
    Backend.Match.OnMatchRelay(args) += {
        // TODO
    };

    MatchRelayEventArgs

    ValueTypeDescription
    ErrInfoErrorCode에러 정보
    ReasonString에러 이유
    FromSessionInfo브로드캐스팅 메시지를 보낸 세션 정보
    BinaryUserDatabyte[]바이너리 데이터

    채팅 메시지 이벤트 핸들러

    서버에서 클라이언트가 보낸 채팅메시지를 브로드캐스팅 했을 때 호출되는 이벤트 핸들러입니다.
    자기자신이 메시지를 보냈을 때도 호출됩니다.

    안내
  • 팀 메시지의 경우에도 전체 클라이언트에게 브로드캐스팅됩니다.
  • 클라이언트에서 팀 메시지인지 전체 메시지인지 필터링을 수행해야 합니다.
  • OnMatchChat(MatchChatEventArgs args) => {}
    
    //example
    Backend.Match.OnMatchChat(args) += {
        // TODO
    };

    MatchChatEventArgs

    ValueTypeDescription
    ErrInfoErrorCode에러 정보
    ReasonString에러 이유
    FromSessionInfo채팅 메시지를 보낸 세션 정보
    ChatModeTypeMatchChatModeType채팅 메시지 타입 MatchChatModeType.Team(팀) 혹은 MatchChatModeType.All(전체)
    Messagestring채팅 메시지

    게임 종료 메시지

    모든 클라이언트가 서버로 게임 결과를 전송하고, 서버에서 이에 대한 결과 종합이 끝난 후 호출되는 이벤트 핸들러입니다.

    OnMatchResult(MatchResultEventArgs args) => {}
    
    //example
    Backend.Match.OnMatchResult(args) += {
        // TODO
    };

    MatchResultEventArgs

    ValueTypeDescription
    ErrInfoErrorCode에러 정보
    ReasonString에러 이유

    Error case

    • 결과 종합 성공
      ErrInfo : ErrorCode.Success

    • 결과 종합 실패 (서버에서 결과 종합을 실패한 경우)
      ErrInfo : ErrorCode.Exception
      Reason : 결과 종합 실패 이유 (혹은 FDM 코드 리턴)

    • 결과 종합 실패 (모든 유저가 결과값을 서버로 전송하지 않은 경우)
      ErrInfo : 10006
      Reason : Failed to apply game results. (Unknown error.)

      한 유저가 결과 종합 메시지를 서버로 전송한 후 15초 이내에 모든 유저가 결과종합 메시지를 서버로 전송하지 않은 경우 해당 에러가 발생할 수 있습니다.

    • 올바르지 않은 결과값을 서버로 보낸 경우 (결과값을 보내지 않거나, 일부 유저만 결과값에 포함시키거나 등...)
      ErrInfo : ErrorCode.Exception
      Reason : FDM: 66053682-0f2b-4520-b944-0637a92030bc

    자기 자신의 인게임 서버 접속 종료 이벤트 핸들러

    자기 자신이 인게임서버와 명시적으로 접속을 종료하거나 비정상적인 이유로 접속이 종료되었을 때 호출되는 이벤트 핸들러입니다.
    재접속에 실패했을 때도 호출됩니다.

    OnLeaveInGameServer(LeaveChannelEventArgs args) => {}
    
    //example
    Backend.Match.OnLeaveInGameServer(args) += {
        // TODO
    };

    LeaveChannelEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo에러 정보
    SessionSessionInfo접속 종료한 세션 정보

    Return case

    • 유저가 명시적으로 접속을 끊었을 때
      ErrInfo.Category : ErrorCode.Success
      ErrInfo.Detail : ErrorCode.DisconnectFromLocal

    • 서버에서 접속을 끊었을 때
      ErrInfo.Category : ErrorCode.Exception
      ErrInfo.Detail : ErrorCode.DisconnectFromRemote
      ErrInfo.Reason : Disconnected from server.

    • 재접속에 실패했을 때
      ErrInfo.Category : ErrorCode.Exception
      Reason.Reason : Fail To Reconnect

    다른 유저의 인게임 서버 접속 종료 이벤트 핸들러

    다른 유저가 인게임서버와 명시적으로 접속을 종료하거나 비정상적인 이유로 접속이 종료되었을 때 호출되는 이벤트 핸들러입니다.

    OnSessionOffline(SessionOfflineEventArgs args) => {}
    
    //example
    Backend.Match.OnSessionOffline(args) += {
        // TODO
    };

    SessionOfflineEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo에러 정보
    SessionSessionInfo접속 종료한 세션 정보

    Return case

    • 접속이 끊어졌을 때
      ErrInfo.Category : NetworkOffline
      Reason.Reason : Session Disconnect

    인게임 관련 내부 기능에 예외가 발생한 경우

    OnException(Exception e) => {}
    
    //example
    Backend.Match.OnException(e) += {
        // TODO
    };

    Parameter

    ValueTypeDescription
    eException관련 예외 내용