Example #1
0
        /// <inheritdoc/>
        public override void OpenStream(IStreamReader streamReader)
        {
            if (streamReader == null)
            {
                throw new ArgumentNullException(nameof(streamReader));
            }

            if (this.StreamAdapter == null)
            {
                streamReader.OpenStream(this.StreamName, this.OnReceiveData, this.Allocator, this.Deallocator, this.OnReadError);
            }
            else
            {
                dynamic dynStreamAdapter   = this.StreamAdapter;
                dynamic dynAdaptedReceiver = dynStreamAdapter.AdaptReceiver(new Action <T, Envelope>(this.OnReceiveData));
                dynamic dynReadError       = new Action <SerializationException>(this.OnReadError);
                streamReader.OpenStream(this.StreamName, dynAdaptedReceiver, dynStreamAdapter.SourceAllocator, dynStreamAdapter.SourceDeallocator, dynReadError);
            }
        }
Example #2
0
        /// <inheritdoc />
        public void OpenStream(IStreamReader streamReader, bool readIndicesOnly)
        {
            if (streamReader == null)
            {
                throw new ArgumentNullException(nameof(streamReader));
            }

            if (readIndicesOnly)
            {
                if (this.StreamAdapter == null)
                {
                    streamReader.OpenStreamIndex <T>(this.StreamName, this.OnReceiveIndex);
                }
                else
                {
                    var genericOpenStreamIndex = typeof(IStreamReader)
                                                 .GetMethod("OpenStreamIndex", new Type[] { typeof(string), typeof(Action <Func <IStreamReader, T>, Envelope>) })
                                                 .MakeGenericMethod(this.StreamAdapter.SourceType);
                    var receiver = new Action <Func <IStreamReader, T>, Envelope>(this.OnReceiveIndex);
                    genericOpenStreamIndex.Invoke(streamReader, new object[] { this.StreamName, receiver });
                }
            }
            else
            {
                if (this.StreamAdapter == null)
                {
                    streamReader.OpenStream <T>(this.StreamName, this.OnReceiveData, this.Allocator, this.OnReadError);
                }
                else
                {
                    dynamic dynStreamAdapter   = this.StreamAdapter;
                    dynamic dynAdaptedReceiver = dynStreamAdapter.AdaptReceiver(new Action <T, Envelope>(this.OnReceiveData));
                    dynamic dynReadError       = new Action <SerializationException>(this.OnReadError);
                    streamReader.OpenStream(this.StreamName, dynAdaptedReceiver, dynStreamAdapter.Allocator, dynReadError);
                }
            }
        }
Example #3
0
        /// <inheritdoc />
        public void OpenStream(ISimpleReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (this.useIndex)
            {
                if (this.StreamBinding.StreamAdapter == null)
                {
                    reader.OpenStreamIndex <T>(this.StreamName, this.OnReceiveIndex);
                }
                else
                {
                    var genericOpenStreamIndex = typeof(ISimpleReader)
                                                 .GetMethod("OpenStreamIndex", new Type[] { typeof(string), typeof(Action <IndexEntry, Envelope>) })
                                                 .MakeGenericMethod(this.StreamBinding.StreamAdapter.SourceType);
                    var receiver = new Action <IndexEntry, Envelope>(this.OnReceiveIndex);
                    genericOpenStreamIndex.Invoke(reader, new object[] { this.StreamName, receiver });
                }
            }
            else
            {
                if (this.StreamBinding.StreamAdapter == null)
                {
                    reader.OpenStream <T>(this.StreamName, this.OnReceiveData, this.Allocator);
                }
                else
                {
                    dynamic dynStreamAdapater  = this.StreamBinding.StreamAdapter;
                    dynamic dynAdaptedReciever = dynStreamAdapater.AdaptReceiver(new Action <T, Envelope>(this.OnReceiveData));
                    reader.OpenStream(this.StreamName, dynAdaptedReciever, dynStreamAdapater.Allocator);
                }
            }
        }