public override void AddMessageReader(IMessageReader <TMessage> reader) { if (m_Readers == null) { m_Readers = new HashSet <int>(); } else if (m_Readers.Contains(reader.GetHashCode())) { throw new InvalidOperationException("This reader is already reading messages."); } // Create a new observable sequence and hook it up to the observable stream IObservable <EventPattern <MessageReadArgs <TMessage> > > messages = Observable.FromEventPattern <MessageReadArgs <TMessage> >(reader, "MessageRead"); // When events are fired, they will be fed into the bi-directional // observable stream implemented using a Subject<T> messages.Subscribe(msg => this.Write(msg.EventArgs.Message)); reader.StartReading(Name); m_Readers.Add(reader.GetHashCode()); }