MouseService.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Drawing;
  3. using System.Reactive.Concurrency;
  4. using System.Reactive.Disposables;
  5. using System.Reactive.Linq;
  6. using System.Reactive.Subjects;
  7. using RxMouseService;
  8. namespace RxMouseServer
  9. {
  10. public class MouseService : MarshalByRefObject, IMouseService, IObserver<Point>
  11. {
  12. private ReplaySubject<Point> _points;
  13. public MouseService()
  14. {
  15. _points = new ReplaySubject<Point>();
  16. }
  17. public IObservable<Point> GetPoints()
  18. {
  19. var src = _points.ObserveOn(NewThreadScheduler.Default);
  20. return Log(src).Remotable();
  21. }
  22. public IObservable<T> Log<T>(IObservable<T> source)
  23. {
  24. return Observable.Create<T>(observer =>
  25. {
  26. Console.WriteLine("Client connected!");
  27. var d = source.Subscribe(observer);
  28. return Disposable.Create(() =>
  29. {
  30. Console.WriteLine("Client disconnected!");
  31. d.Dispose();
  32. });
  33. });
  34. }
  35. public void OnNext(Point value)
  36. {
  37. _points.OnNext(value);
  38. }
  39. public void OnError(Exception error)
  40. {
  41. throw new NotImplementedException();
  42. }
  43. public void OnCompleted()
  44. {
  45. throw new NotImplementedException();
  46. }
  47. public override object InitializeLifetimeService()
  48. {
  49. return null;
  50. }
  51. }
  52. }