길드 채팅 핸들러 (4.5.0 이상 버전)

비동기로 작업이 진행되며 아래의 이벤트 핸들러로 채팅 관련 이벤트들이 콜백 됩니다.

이벤트 수신 (일반 채팅과 공동으로 사용)

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

주의
  • 채팅 기능 사용을 위해서 Poll 함수를 Update 함수에서 항상 호출하거나 코루틴 내에서 혹은 별도의 쓰레드를 생성하여 주기적으로 호출해야 합니다.
  • 코루틴 혹은 별도의 쓰레드에서 주기적으로 Poll을 호출하는 경우 매 프레임 호출하는 것을 추천하며, 게임 상황에 따라 유연하게 조절할 수 있습니다.
  • 1분 30초 이상 Poll함수가 호출되지 못하는 상황이 발생하면 채팅서버와 클라이언트 간 연결이 끊어질 수 있습니다.
  • 별도의 쓰레드를 생성하여 Poll을 호출하는 경우 해당 쓰레드에서는 유니티 정책에 따라 MonoBehaviour에서 제공하는 API를 사용할 수 없습니다.
         채팅 메세지 등은 별도의 디스패처 등을 사용하여 메인쓰레드에서 (Update 함수) 처리해야 합니다.
  • Poll() -> int
    
    // example
    Backend.Chat.Poll();

    채널에 입장 시 최초 한번, 해당 채널에 접속하고 있는 모든 게이머들의 정보 콜백

    OnSessionListInGuildChannel(SessionListInChannelEventArgs args) => {}
    
    // example
    Backend.Chat.OnSessionListInGuildChannel(args) += {
      // TODO
    }

    SessionListInChannelEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo성공/실패 정보
    SessionListList채널에 접속하고 있는 모든 게이머들의 정보 리스트

    자기자신 혹은 다른 게이머가 채널에 입장한 경우, 자기자신이 채널에 재접속 한 경우

    자기자신이 채널에 입장했을 때 자기자신의 정보가 콜백됩니다.
    다른 게이머가 채널에 입장할 때마다 해당 유저의 정보가 콜백됩니다.
    자기자신이 채널에 재접속 한 경우에도 콜백됩니다.

    OnJoinGuildChannel(JoinChannelEventArgs args) => {}
    
    // example
    Backend.Chat.OnJoinGuildChannel(args) += {
      //TODO
    }

    JoinChannelEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo성공/실패 정보
    SessionSessionInfo채널에서 입장한 게이머의 SessionInfo

    Return case

    • 채팅 서버 접속에 성공한 경우
      ErrInfo : ErrorInfo.Success

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

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

    자기자신 혹은 다른 게이머가 채널에서 퇴장한 경우

    게이머가 명시적으로 LeaveChannel 함수를 호출한 경우 혹은 통신 환경 등이 좋지 않아 연결이 끊어지 후 재접속에 실패한 경우 호출됩니다.

    OnLeaveGuildChannel(LeaveChannelEventArgs args) => {}
    
    // example
    Backend.Chat.OnLeaveGuildChannel(args) += {
      // TODO
    }

    LeaveChannelEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo성공/실패 정보
    SessionSessionInfo채널에서 퇴장한 게이머의 SessionInfo

    자기자신 혹은 다른게이머가 채팅 채널과 접속이 일시적으로 끊어진 경우

    클라이언트의 네트워크 상황이 좋지않거나, 어떠한 이유로 인해 Poll 함수가 주기적으로 호출되지 못한 경우 서버에서 해당 유저를 오프라인하고 이 때 콜백되는 함수입니다.
    게임 내에서 애드몹 등을 이용하여 광고를 시청하는 경우 Poll이 호출되지 못해 해당 현상이 발생할 수 있습니다.

    OnSessionOfflineGuildChannel이 호출되는 조건
    • 클라이언트와 채팅서버가 비정상적으로 1분 30초 이상 통신하지 못하는 경우 발생할 수 있습니다.
    • 게임 내에서 애드몹 등을 이용하여 광고를 시청하는 경우 Poll 함수가 호출되지 못해 연결이 끊어질 수 있습니다.
    • 게임이 백그라운드로 내려가거나 혹은 게임 실행 중 다른 어플을 실행하는 경우 Poll 함수가 호출되지 못해 연결이 끊어질 수 있습니다.
    • 클라이언트에서 네트워크 환경이 바뀌는 상황에서 일시적으로 연결이 떨어지는 경우 발생할 수 있습니다.
      • 와이파이 <-> 데이터 네트워크 간 전환
      • 와이파이 환경을 전환
    OnSessionOfflineGuildChannel(SessionOfflineEventArgs args) => {}
    
    // example
    Backend.Chat.OnSessionOfflineGuildChannel(args) += {
      // TODO
    }

    SessionOfflineEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo성공/실패 정보
    SessionSessionInfo채널에서 퇴장한 게이머의 SessionInfo

    다른게이머가 채팅 채널에 재접속 한 경우

    오프라인 상태에서 클라이언트의 네트워크 상황이 다시 좋아지거나, Poll 함수가 다시 주기적으로 호출되는 경우 서버에서 해당 유저를 온라인 처리하고 콜백되는 함수입니다.
    다른 유저가 재접속 한 경우에만 콜백됩니다.

    OnSessionOnlineGuildChannel이 호출되는 조건
  • 서버와 접속이 비정상적을 끊어진 후 1분 30초 이내에 연결이 복구되면 발생할 수 있습니다.
  • 게임 내에서 애드몹 등을 이용하여 광고시청 완료 후 x버튼 클릭, 백그라운드에 있던 게임이 다시 실행 됨 등의 상황에서
         Poll 함수가 다시 호출되면 연결이 복구될 수 있습니다.
  • OnSessionOnlineGuildChannel(SessionOnlineEventArgs args) => {}
    
    // example
    Backend.Chat.OnSessionOnlineGuildChannel(args) += {
      // TODO
    }

    SessionOnlineEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo성공/실패 정보
    SessionSessionInfo채널과 접속이 끊긴 게이머의 SessionInfo

    같은 채널의 게이머들이 전송한 메시지가 도착한 경우

    OnGuildChat(ChatEventArgs args) => {}
    
    // example
    Backend.Chat.OnGuildChat(args) += {
      //TODO
    }

    ChatEventArgs

    ValueTypeDescription
    ErrInfoErrorInfo성공/실패 정보
    FromSessionInfo채팅 메세지를 발송한 사람의 정보
    Messagestring채팅 메세지 내용

    채팅 관련 내부 기능에 예외가 발생한 경우 (일반 채팅과 공동으로 사용)

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

    Parameter

    ValueTypeDescription
    eException관련 예외 내용