/// <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); } }
/// <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); } } }
/// <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); } } }