public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header) { messageHeaderDecoder.Wrap(buffer, offset); templateId = messageHeaderDecoder.TemplateId(); switch (templateId) { case SessionEventDecoder.TEMPLATE_ID: sessionEventDecoder.Wrap(buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); clusterSessionId = sessionEventDecoder.ClusterSessionId(); correlationId = sessionEventDecoder.CorrelationId(); leadershipTermId = sessionEventDecoder.LeadershipTermId(); leaderMemberId = sessionEventDecoder.LeaderMemberId(); eventCode = sessionEventDecoder.Code(); detail = sessionEventDecoder.Detail(); break; case NewLeaderEventDecoder.TEMPLATE_ID: newLeaderEventDecoder.Wrap(buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); clusterSessionId = newLeaderEventDecoder.ClusterSessionId(); leadershipTermId = newLeaderEventDecoder.LeadershipTermId(); leaderMemberId = newLeaderEventDecoder.LeaderMemberId(); detail = newLeaderEventDecoder.MemberEndpoints(); break; case EgressMessageHeaderDecoder.TEMPLATE_ID: egressMessageHeaderDecoder.Wrap(buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); leadershipTermId = EgressMessageHeaderDecoder.LeadershipTermIdId(); clusterSessionId = egressMessageHeaderDecoder.ClusterSessionId(); break; case ChallengeDecoder.TEMPLATE_ID: challengeDecoder.Wrap(buffer, offset + MessageHeaderDecoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version()); encodedChallenge = new byte[challengeDecoder.EncodedChallengeLength()]; challengeDecoder.GetEncodedChallenge(encodedChallenge, 0, challengeDecoder.EncodedChallengeLength()); clusterSessionId = challengeDecoder.ClusterSessionId(); correlationId = challengeDecoder.CorrelationId(); break; default: throw new ClusterException("unknown templateId: " + templateId); } pollComplete = true; return(ControlledFragmentHandlerAction.BREAK); }