Skip to content

Instantly share code, notes, and snippets.

@teo-mateo
Last active December 31, 2015 18:49
Show Gist options
  • Select an option

  • Save teo-mateo/8029960 to your computer and use it in GitHub Desktop.

Select an option

Save teo-mateo/8029960 to your computer and use it in GitHub Desktop.
publisher
public class LocationPublisher : IObservable<Location>
{
private List<IObserver<Location>> observers;
public LocationPublisher()
{
observers = new List<IObserver<Location>>();
}
public IDisposable Subscribe(IObserver<Location> observer)
{
if (!observers.Contains(observer))
observers.Add(observer);
return new Unsubscriber(observers, observer);
}
public void TrackLocation(Nullable<Location> loc)
{
foreach (var observer in observers)
{
if (!loc.HasValue)
observer.OnError(new LocationUnknownException());
else
observer.OnNext(loc.Value);
}
}
public void EndTransmission()
{
foreach (var observer in observers.ToArray())
observer.OnCompleted();
observers.Clear();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment