示例#1
0
        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());
        }