MySubject.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Reactive.Disposables;
  5. using System.Reactive.Subjects;
  6. namespace ReactiveTests.Tests
  7. {
  8. class MySubject : ISubject<int>
  9. {
  10. private Dictionary<int, IDisposable> _disposeOn = new Dictionary<int, IDisposable>();
  11. public void DisposeOn(int value, IDisposable disposable)
  12. {
  13. _disposeOn[value] = disposable;
  14. }
  15. private IObserver<int> _observer;
  16. public void OnNext(int value)
  17. {
  18. _observer.OnNext(value);
  19. IDisposable disconnect;
  20. if (_disposeOn.TryGetValue(value, out disconnect))
  21. disconnect.Dispose();
  22. }
  23. public void OnError(Exception exception)
  24. {
  25. _observer.OnError(exception);
  26. }
  27. public void OnCompleted()
  28. {
  29. _observer.OnCompleted();
  30. }
  31. public IDisposable Subscribe(IObserver<int> observer)
  32. {
  33. _subscribeCount++;
  34. _observer = observer;
  35. return Disposable.Create(() => { _disposed = true; });
  36. }
  37. private int _subscribeCount;
  38. private bool _disposed;
  39. public int SubscribeCount { get { return _subscribeCount; } }
  40. public bool Disposed { get { return _disposed; } }
  41. }
  42. }