Beispiel #1
0
        public virtual ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            messageHeaderDecoder.Wrap(buffer, offset);

            int templateId = messageHeaderDecoder.TemplateId();

            switch (templateId)
            {
            case ControlResponseDecoder.TEMPLATE_ID:
                controlResponseDecoder.Wrap(buffer, offset + MessageHeaderEncoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version());

                if (controlResponseDecoder.ControlSessionId() != controlSessionId)
                {
                    break;
                }

                ControlResponseCode code = controlResponseDecoder.Code();

                if (ControlResponseCode.RECORDING_UNKNOWN == code)
                {
                    isDispatchComplete = true;
                    return(ControlledFragmentHandlerAction.BREAK);
                }

                if (ControlResponseCode.ERROR == code)
                {
                    throw new System.InvalidOperationException("response for expectedCorrelationId=" + expectedCorrelationId + ", error: " + controlResponseDecoder.ErrorMessage());
                }

                break;

            case RecordingDescriptorDecoder.TEMPLATE_ID:
                recordingDescriptorDecoder.Wrap(buffer, offset + MessageHeaderEncoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version());

                long correlationId = recordingDescriptorDecoder.CorrelationId();
                if (controlSessionId != recordingDescriptorDecoder.ControlSessionId() || correlationId != expectedCorrelationId)
                {
                    break;
                }

                consumer.OnRecordingDescriptor(controlSessionId, correlationId, recordingDescriptorDecoder.RecordingId(), recordingDescriptorDecoder.StartTimestamp(), recordingDescriptorDecoder.StopTimestamp(), recordingDescriptorDecoder.StartPosition(), recordingDescriptorDecoder.StopPosition(), recordingDescriptorDecoder.InitialTermId(), recordingDescriptorDecoder.SegmentFileLength(), recordingDescriptorDecoder.TermBufferLength(), recordingDescriptorDecoder.MtuLength(), recordingDescriptorDecoder.SessionId(), recordingDescriptorDecoder.StreamId(), recordingDescriptorDecoder.StrippedChannel(), recordingDescriptorDecoder.OriginalChannel(), recordingDescriptorDecoder.SourceIdentity());

                if (0 == --remainingRecordCount)
                {
                    isDispatchComplete = true;
                    return(ControlledFragmentHandlerAction.BREAK);
                }

                break;

            default:
                throw new System.InvalidOperationException("Unknown templateId: " + templateId);
            }

            return(ControlledFragmentHandlerAction.CONTINUE);
        }
        public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            if (isPollComplete)
            {
                return(ABORT);
            }

            messageHeaderDecoder.Wrap(buffer, offset);

            int schemaId = messageHeaderDecoder.SchemaId();

            if (schemaId != MessageHeaderDecoder.SCHEMA_ID)
            {
                throw new ArchiveException("expected schemaId=" + MessageHeaderDecoder.SCHEMA_ID + ", actual=" +
                                           schemaId);
            }

            if (messageHeaderDecoder.TemplateId() == ControlResponseDecoder.TEMPLATE_ID)
            {
                controlResponseDecoder.Wrap(buffer, offset + MessageHeaderEncoder.ENCODED_LENGTH,
                                            messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version());

                controlSessionId = controlResponseDecoder.ControlSessionId();
                correlationId    = controlResponseDecoder.CorrelationId();
                relevantId       = controlResponseDecoder.RelevantId();
                code             = controlResponseDecoder.Code();
                version          = controlResponseDecoder.Version();
                errorMessage     = controlResponseDecoder.ErrorMessage();
                isPollComplete   = true;

                return(BREAK);
            }

            if (messageHeaderDecoder.TemplateId() == ChallengeDecoder.TEMPLATE_ID)
            {
                challengeDecoder.Wrap(buffer, offset + MessageHeaderEncoder.ENCODED_LENGTH,
                                      messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version());

                controlSessionId = challengeDecoder.ControlSessionId();
                correlationId    = challengeDecoder.CorrelationId();
                relevantId       = Aeron.Aeron.NULL_VALUE;
                code             = ControlResponseCode.NULL_VALUE;
                version          = challengeDecoder.Version();
                errorMessage     = "";

                int encodedChallengeLength = challengeDecoder.EncodedChallengeLength();
                encodedChallenge = new byte[encodedChallengeLength];
                challengeDecoder.GetEncodedChallenge(encodedChallenge, 0, encodedChallengeLength);

                isPollComplete = true;

                return(BREAK);
            }

            return(CONTINUE);
        }
Beispiel #3
0
        public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            if (pollComplete)
            {
                return(ABORT);
            }

            messageHeaderDecoder.Wrap(buffer, offset);

            int schemaId = messageHeaderDecoder.SchemaId();

            if (schemaId != MessageHeaderDecoder.SCHEMA_ID)
            {
                throw new ArchiveException("expected schemaId=" + MessageHeaderDecoder.SCHEMA_ID + ", actual=" + schemaId);
            }

            templateId = messageHeaderDecoder.TemplateId();
            if (templateId == ControlResponseDecoder.TEMPLATE_ID)
            {
                controlResponseDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderEncoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                controlSessionId = controlResponseDecoder.ControlSessionId();
                correlationId    = controlResponseDecoder.CorrelationId();
                relevantId       = controlResponseDecoder.RelevantId();
                code             = controlResponseDecoder.Code();
                errorMessage     = controlResponseDecoder.ErrorMessage();
                pollComplete     = true;

                return(BREAK);
            }

            return(CONTINUE);
        }
        public virtual ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            messageHeaderDecoder.Wrap(buffer, offset);

            templateId = messageHeaderDecoder.TemplateId();
            switch (templateId)
            {
            case ControlResponseDecoder.TEMPLATE_ID:
                controlResponseDecoder.Wrap(buffer, offset + MessageHeaderEncoder.ENCODED_LENGTH, messageHeaderDecoder.BlockLength(), messageHeaderDecoder.Version());

                controlSessionId = controlResponseDecoder.ControlSessionId();
                correlationId    = controlResponseDecoder.CorrelationId();
                relevantId       = controlResponseDecoder.RelevantId();
                code             = controlResponseDecoder.Code();
                if (ControlResponseCode.ERROR == code)
                {
                    errorMessage = controlResponseDecoder.ErrorMessage();
                }
                else
                {
                    errorMessage = "";
                }

                break;

            case RecordingDescriptorDecoder.TEMPLATE_ID:
                break;

            default:
                throw new System.InvalidOperationException("unknown templateId: " + templateId);
            }

            pollComplete = true;

            return(ControlledFragmentHandlerAction.BREAK);
        }
        public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            if (isDispatchComplete)
            {
                return(ABORT);
            }

            messageHeaderDecoder.Wrap(buffer, offset);

            int schemaId = messageHeaderDecoder.SchemaId();

            if (schemaId != MessageHeaderDecoder.SCHEMA_ID)
            {
                throw new ArchiveException("expected schemaId=" + MessageHeaderDecoder.SCHEMA_ID + ", actual=" +
                                           schemaId);
            }

            int templateId = messageHeaderDecoder.TemplateId();

            switch (templateId)
            {
            case ControlResponseDecoder.TEMPLATE_ID:
            {
                controlResponseDecoder
                .Wrap(buffer,
                      offset + MessageHeaderEncoder.ENCODED_LENGTH,
                      messageHeaderDecoder.BlockLength(),
                      messageHeaderDecoder.Version());

                if (controlResponseDecoder.ControlSessionId() == controlSessionId)
                {
                    ControlResponseCode code = controlResponseDecoder.Code();
                    long correlationId       = controlResponseDecoder.CorrelationId();

                    if (ControlResponseCode.SUBSCRIPTION_UNKNOWN == code && correlationId == this.correlationId)
                    {
                        isDispatchComplete = true;
                        return(BREAK);
                    }

                    if (ControlResponseCode.ERROR == code)
                    {
                        ArchiveException ex = new ArchiveException(
                            "response for correlationId=" + this.correlationId + ", error: " +
                            controlResponseDecoder.ErrorMessage(), (int)controlResponseDecoder.RelevantId(),
                            correlationId);

                        if (correlationId == this.correlationId)
                        {
                            throw ex;
                        }
                        else
                        {
                            errorHandler?.Invoke(ex);
                        }
                    }
                }
            }

            break;

            case RecordingSubscriptionDescriptorDecoder.TEMPLATE_ID:
            {
                recordingSubscriptionDescriptorDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderEncoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                long correlationId = recordingSubscriptionDescriptorDecoder.CorrelationId();
                if (recordingSubscriptionDescriptorDecoder.ControlSessionId() == controlSessionId &&
                    correlationId == this.correlationId)
                {
                    consumer.OnSubscriptionDescriptor(
                        controlSessionId,
                        correlationId,
                        recordingSubscriptionDescriptorDecoder.SubscriptionId(),
                        recordingSubscriptionDescriptorDecoder.StreamId(),
                        recordingSubscriptionDescriptorDecoder.StrippedChannel());

                    if (0 == --remainingSubscriptionCount)
                    {
                        isDispatchComplete = true;
                        return(BREAK);
                    }
                }
            }
            break;
            }

            return(CONTINUE);
        }
Beispiel #6
0
        public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            if (isDispatchComplete)
            {
                return(ControlledFragmentHandlerAction.ABORT);
            }

            messageHeaderDecoder.Wrap(buffer, offset);

            int schemaId = messageHeaderDecoder.SchemaId();

            if (schemaId != MessageHeaderDecoder.SCHEMA_ID)
            {
                throw new ArchiveException("expected schemaId=" + MessageHeaderDecoder.SCHEMA_ID + ", actual=" +
                                           schemaId);
            }

            int templateId = messageHeaderDecoder.TemplateId();

            switch (templateId)
            {
            case ControlResponseDecoder.TEMPLATE_ID:
            {
                controlResponseDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderEncoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                if (controlResponseDecoder.ControlSessionId() == controlSessionId)
                {
                    ControlResponseCode code = controlResponseDecoder.Code();
                    long correlationId       = controlResponseDecoder.CorrelationId();

                    if (ControlResponseCode.RECORDING_UNKNOWN == code && correlationId == this.correlationId)
                    {
                        isDispatchComplete = true;
                        return(ControlledFragmentHandlerAction.BREAK);
                    }

                    if (ControlResponseCode.ERROR == code)
                    {
                        ArchiveException ex = new ArchiveException(
                            "response for correlationId=" + this.correlationId + ", error: " +
                            controlResponseDecoder.ErrorMessage(),
                            (int)controlResponseDecoder.RelevantId(),
                            correlationId);

                        if (correlationId == this.correlationId)
                        {
                            throw ex;
                        }
                        else
                        {
                            errorHandler?.Invoke(ex);
                        }
                    }
                }

                break;
            }

            case RecordingDescriptorDecoder.TEMPLATE_ID:
            {
                recordingDescriptorDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderEncoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                long correlationId = recordingDescriptorDecoder.CorrelationId();
                if (controlSessionId == recordingDescriptorDecoder.ControlSessionId() &&
                    correlationId == this.correlationId)
                {
                    consumer.OnRecordingDescriptor(
                        controlSessionId,
                        correlationId,
                        recordingDescriptorDecoder.RecordingId(),
                        recordingDescriptorDecoder.StartTimestamp(),
                        recordingDescriptorDecoder.StopTimestamp(),
                        recordingDescriptorDecoder.StartPosition(),
                        recordingDescriptorDecoder.StopPosition(),
                        recordingDescriptorDecoder.InitialTermId(),
                        recordingDescriptorDecoder.SegmentFileLength(),
                        recordingDescriptorDecoder.TermBufferLength(),
                        recordingDescriptorDecoder.MtuLength(),
                        recordingDescriptorDecoder.SessionId(),
                        recordingDescriptorDecoder.StreamId(),
                        recordingDescriptorDecoder.StrippedChannel(),
                        recordingDescriptorDecoder.OriginalChannel(),
                        recordingDescriptorDecoder.SourceIdentity());

                    if (0 == --remainingRecordCount)
                    {
                        isDispatchComplete = true;
                        return(ControlledFragmentHandlerAction.BREAK);
                    }
                }

                break;
            }
            }

            return(ControlledFragmentHandlerAction.CONTINUE);
        }
Beispiel #7
0
 public ControlResponseEncoder Code(ControlResponseCode value)
 {
     _buffer.PutInt(_offset + 24, (int)value, ByteOrder.LittleEndian);
     return(this);
 }
Beispiel #8
0
 public EndpointCreated(ControlResponseCode code) : base(code)
 {
 }
Beispiel #9
0
 public APIStatus(ControlResponseCode code) : base(code)
 {
 }
 public ControlResponseHeader(ControlResponseCode code) : base(3, (int)code)
 {
 }