Created
June 25, 2018 18:30
-
-
Save follesoe/70ed091e3d5f13c7b4138e071687088d to your computer and use it in GitHub Desktop.
Attempt at extending example further
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static void Main(string[] args) | |
{ | |
var browser = new ServiceBrowser(); | |
var observableFound = | |
Observable.FromEventPattern<ServiceFoundEventArgs>( | |
h => browser.ServiceFound += h, | |
h => browser.ServiceFound -= h) | |
.Select(e => e.EventArgs.Service); | |
var observableError = | |
Observable.FromEventPattern<ServiceSearchErrorEventArgs>( | |
h => browser.ServiceError += h, | |
h => browser.ServiceError -= h); | |
var observableFoundWithError = observableFound | |
.Materialize() | |
.Merge( | |
observableError | |
.Materialize() | |
.Select(x => Notification.CreateOnError<Service>(new Exception("Error")))) | |
.Dematerialize() | |
.Synchronize(); | |
var subject = new Subject<Service>(); | |
var sub = observableFoundWithError.Subscribe(s => | |
{ | |
var observableResolved = Observable.FromEventPattern<EventArgs>( | |
h => s.AddressResolved += h, | |
h => s.AddressResolved -= h); | |
var observableResolveError = Observable.FromEventPattern<EventArgs>( | |
h => s.ErrorResolvingAddress += h, | |
h => s.ErrorResolvingAddress -= h); | |
var observableResolvedWithError = observableResolved | |
.Materialize() | |
.Merge( | |
observableResolveError | |
.Do(e => Console.WriteLine($"Error resolving: {s.Name}")) | |
.Materialize() | |
.Select(x => Notification.CreateOnError<EventPattern<EventArgs>>(new Exception($"Error resolving address for service: {s.Name}")))) | |
.Dematerialize() | |
.Synchronize(); | |
var resolveSub = observableResolved.Subscribe( | |
r => subject.OnNext(s), | |
ex => subject.OnError(ex), | |
() => Console.WriteLine("Resolve Completed")); | |
s.ResolveAddress(); | |
}); | |
using (subject.Subscribe( | |
s => Console.WriteLine($"Found and resolved service: {s.Name} ({s.Address})"), | |
ex => Console.WriteLine($"Found error: {ex.Message}"), | |
() => Console.WriteLine("Found Completed"))) | |
{ | |
browser.Search(); | |
Console.ReadLine(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment