Esempio n. 1
0
        public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            messageHeaderDecoder.Wrap(buffer, offset);
            int templateId = messageHeaderDecoder.TemplateId();

            if (templateId == SessionHeaderDecoder.TEMPLATE_ID)
            {
                sessionHeaderDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                agent.OnSessionMessage(
                    sessionHeaderDecoder.ClusterSessionId(),
                    sessionHeaderDecoder.Timestamp(),
                    buffer,
                    offset + SESSION_HEADER_LENGTH,
                    length - SESSION_HEADER_LENGTH,
                    header);

                return(ControlledFragmentHandlerAction.CONTINUE);
            }


            switch (templateId)
            {
            case TimerEventDecoder.TEMPLATE_ID:
                timerEventDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                agent.OnTimerEvent(timerEventDecoder.CorrelationId(), timerEventDecoder.Timestamp());
                break;

            case SessionOpenEventDecoder.TEMPLATE_ID:
                openEventDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                string responseChannel  = openEventDecoder.ResponseChannel();
                byte[] encodedPrincipal = new byte[openEventDecoder.EncodedPrincipalLength()];
                openEventDecoder.GetEncodedPrincipal(encodedPrincipal, 0, encodedPrincipal.Length);

                agent.OnSessionOpen(
                    openEventDecoder.ClusterSessionId(),
                    openEventDecoder.Timestamp(),
                    openEventDecoder.ResponseStreamId(),
                    responseChannel,
                    encodedPrincipal);
                break;

            case SessionCloseEventDecoder.TEMPLATE_ID:
                closeEventDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                agent.OnSessionClose(
                    closeEventDecoder.ClusterSessionId(),
                    closeEventDecoder.Timestamp(),
                    closeEventDecoder.CloseReason());
                break;

            case ClusterActionRequestDecoder.TEMPLATE_ID:
                actionRequestDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                agent.OnServiceAction(
                    actionRequestDecoder.LogPosition(),
                    actionRequestDecoder.LeadershipTermId(),
                    actionRequestDecoder.Timestamp(),
                    actionRequestDecoder.Action());
                break;

            case NewLeadershipTermEventDecoder.TEMPLATE_ID:
                newLeadershipTermEventDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                agent.OnNewLeadershipTermEvent(
                    newLeadershipTermEventDecoder.LeadershipTermId(),
                    newLeadershipTermEventDecoder.LogPosition(),
                    newLeadershipTermEventDecoder.Timestamp(),
                    newLeadershipTermEventDecoder.LeaderMemberId(),
                    newLeadershipTermEventDecoder.LogSessionId());
                break;

            case ClusterChangeEventDecoder.TEMPLATE_ID:
                clusterChangeEventDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version()
                    );

                agent.OnClusterChange(
                    clusterChangeEventDecoder.LeadershipTermId(),
                    clusterChangeEventDecoder.LogPosition(),
                    clusterChangeEventDecoder.Timestamp(),
                    clusterChangeEventDecoder.LeaderMemberId(),
                    clusterChangeEventDecoder.ClusterSize(),
                    clusterChangeEventDecoder.EventType(),
                    clusterChangeEventDecoder.MemberId(),
                    clusterChangeEventDecoder.ClusterMembers());
                break;
            }

            return(ControlledFragmentHandlerAction.CONTINUE);
        }