Example #1
0
        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);
        }