static void Main(string[] args) { // Nice docs (although Java): http://reactivex.io/RxJava/javadoc/rx/Observable.html // The challenge: // The ChangeReceiver will fire an event every time a change is received. // Events can be: // "Ignore!" -> don't do anything // "Change!" -> send notification to staff and customers // "StaffOnly!" -> send notification to staff // "CustomerOnly!" -> send notification to customer only // // Staff must be notified within 3 seconds. // Customers most be notified between 5 and 7 seconds. using (var pub = new ChangeReceiver("tcp://*:5555")) { Console.WriteLine("Listening..."); var staffSender = new NotificationSender("tcp://localhost:5556"); var customerSender = new NotificationSender("tcp://localhost:5557"); var obs = Observable.FromEventPattern <Tuple <Guid, string> >(pub, "ChangeRecieved").Select(ep => ep.EventArgs); obs.Subscribe <Tuple <Guid, string> >(Handler); obs.Select(t => t.Item1).Subscribe(guid => customerSender.Send(guid)); //var err = Observable.FromEventPattern<Exception>(pub, "OnError").Select(ep => ep.EventArgs); //err.Subscribe<Exception>(Error); pub.Start(); Console.ReadLine(); Console.WriteLine("Closing down."); } }
protected virtual void RemoteSubscribe() { _changeReceiver = new ChangeReceiver <T>((IBaseService <T>)_remoteService); _changeReceiver.EntitiesChanged += new EntitiesChangedDelegate(_remoteService_EntitiesChanged); _invalidateWholeCacheReceiver = new InvalidateWholeCacheReceiver <T>((IBaseService <T>)_remoteService); _invalidateWholeCacheReceiver.InvalidateWholeCache += new InvalidateWholeCacheDelegate(_remoteService_InvalidateWholeCache); }