using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace ObserverPattern.Twits { /// /// Concrete observer /// public class TwitUser : IObserver, IDisposable { TwitObservable twits; public string Name { get; private set; } IDisposable channel; public TwitUser(string name, TwitObservable twits) { Name = name; channel = twits.Subscribe(this); this.twits = twits; } public void Twit(string twit) { twits.AddTwit(new Twit { Emiter = this, Message = twit }); } public void OnCompleted() { Console.WriteLine("{0} finished watching twitter", Name); } public void OnError(Exception error) { Console.WriteLine("Error while watching twitter: {0}", error); } public void OnNext(Twit value) { Console.WriteLine("{0} just observed that {1} tweeted {2}", Name, value.Emiter.Name, value.Message); } public void Dispose() { channel.Dispose(); } } }