OnReceive 예제 코드 질문

뒤끝매치 예제에 있는 OnReceive에서 이해가 안 되는 부분이 있습니다.

        if (BackEndMatchManager.GetInstance().IsHost() != true && args.From.SessionId == myPlayerIndex)
        {
            return;
        }

이 코드 때문에 비호스트에서 데이터 적용이 안됩니다.
비호스트 플레이어가 데미지를 입었을 때,

          var takeDamageMessage =
                new PlayerTakeDamageMessage(Instance.Player.GetIndex(), 1);
            BackendMatchManager.Instance.SendDataToInGame(takeDamageMessage);

이 코드로 서버에 데이터를 보냅니다.

그러면 OnReceive에서 이를 감지해서 처리해야 하는데,
비호스트일때 본인 세션 ID면 리턴한다는 저 한 줄 때문에 비호스트의 경우에는 피격 처리가 되지 않습니다.
저 코드 한 줄이 왜 들어있는 건가요?
이를 고치려면 어떻게 해야 하는지 궁금합니다.

안녕하세요, 개발자님.

현재 제공해드린 뒤끝매치 예제 게임에서는, 호스트(슈퍼게이머)가 모든 상태 처리를 주도하며,
이를 다른 게스트 유저에게 전달하는 방식으로 구성되어 있습니다.
대미지 처리의 경우도 게스트 클라이언트에서 이벤트를 감지하더라도 무시하고,
호스트에서 이벤트를 감지했을 때만 메시지를 구성해 다른 게스트에게 전송하도록 되어 있습니다.
이에, OnReceive 메서드 내에 host sessionId 체크 조건문이 있어도 문제없이 메시지를 정상 처리할 수 있게 되어 있습니다.

문의하신 조건문 중 args.From.SessionId == myPlayerIndex 조건은 SendDataToInGameRoom 함수를 사용해 메시지를 전송할 경우 서버를 통해 자기 자신에게도 메시지가 다시 돌아오기 때문에,
이를 방지하기 위해 자신의 메시지를 무시하도록 추가된 일반적인 조건식 입니다.
해당 예제 게임의 처리 방식이나 조건문이 절대적인 것은 아니며,
예제 게임에서 모든 상태 동작 이벤트를 호스트가 주도하여 처리하도록 한 것은 하나의 예시일 뿐입니다.

만약 게스트가 주도하여 이벤트를 처리하고 메시지를 전달하는 방식으로 구현하신다면,
처리 방식이나 조건문은 개발하는 방향에 맞도록 변경하여 적용하시면 됩니다.
문의하신 상황처럼 게스트가 대미지 이벤트를 직접 처리하도록 설계하신다면,
args.From.SessionId == myPlayerIndex 조건문을 삭제하시거나,
자신의 피격 대미지 이벤트라면 먼저 처리한 후 메시지를 전송하고,
이후 OnReceive에서는 지금처럼 자신의 메시지를 무시하도록 구현하는 방식도 가능합니다.

감사합니다.