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