Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1),...

23

Transcript of Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1),...

Page 1: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher
Page 2: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher
Page 3: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

Krzysztof Owsiany

GemuStudio → Alfavox

godev.gemustudio.com

Page 4: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

Reactive Extensions - wzorzec obserwatora, czyli programowanie reaktywne.

Page 5: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher
Page 6: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

Programowanie reaktywne

Page 7: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher
Page 8: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

Reactive Extensions

Page 9: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher
Page 10: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher
Page 11: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

Observable.Kreator/Generator(lambda)

.Filter1(lambda)

.Modyfikator1(lambda)

.Selektor1(lambda)

.Modyfikator2(lambda)

.Filter2(lambda)

.Selektor2(lambda)

.Subscribe(OnNext, OnError, OnClompleted

);

Page 12: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

var stream = Observable.Interval(TimeSpan.FromSeconds(1));

var subscribent = stream.Subscribe(

tick => Debug.WriteLine(tick));

Page 13: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

var stream = Observable.Interval (

TimeSpan.FromSeconds(1),NewThreadScheduler.Default

).Timestamp();

var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher).Subscribe(

tick => Label1.Content = tick);

Page 14: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

var stream = Observable.FromEventPattern<TextChangedEventHandler,

TextChangedEventArgs>(@event => TextBox1.TextChanged += @event,@event => TextBox1.TextChanged -= @event

).Select(x => x.Sender).OfType<TextBox>().Select(

textBox => textBox.Text);

Page 15: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

Observable.FromEventPattern<RoutedEventHandler,RoutedEventArgs>(

@event => ExitButton.Click += @event,@event => ExitButton.Click -= @event

).Subscribe(

eventArgs => Action());

Page 16: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

var stream = Observable.FromEventPattern<TextChangedEventHandler,

TextChangedEventArgs>(@event => TextBox1.TextChanged += @event,@event => TextBox1.TextChanged -= @event

).Select(x => x.Sender).OfType<TextBox>().Select(textBox => textBox.Text);

var subscribent = stream.Where(text =>

text.ToLower().Equals("fibonacci")).Subscribe(

text => Action());

Page 17: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

public class EventObservable : IObservable<IEvent>{

private IList<IObserver<IEvent>> _subscribents;

public EventObservable(){_subscribents = new List<IObserver<IEvent>>();

}

public void Push(IEvent eventType){foreach (var subscribent in _subscribents){

subscribent.OnNext(eventType);}

}

public IDisposable Subscribe(IObserver<IEvent> observer){if (!_subscribents.Contains(observer)){

_subscribents.Add(observer);}

return new Unsubscribe<IEvent>(observer, _subscribents);}

}

Page 18: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

public class Unsubscribe<T> : IDisposable{

private readonly IObserver<T> _observer;private readonly IList<IObserver<T>> _subscribents;

public Unsubscribe(IObserver<T> observer, IList<IObserver<T>> subscribents)

{_observer = observer;_subscribents = subscribents;

}

public void Dispose(){

_subscribents.Remove(_observer);}

}

Page 19: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

public class ExitObserver : IObserver<ApplicationExitedEvent>{

public void OnNext(ApplicationExitedEvent applicationExitedEvent)

{Debug.WriteLine("Observer: ExitObserver");

Environment.Exit(applicationExitedEvent.ExitCode);}

public void OnCompleted() { }

public void OnError(Exception error) { }}

Page 20: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher
Page 21: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

CQRS/ESGUI – obsługa kontrolekZdarzenia w domenieKlient-SerwerNasłuch urządzeń peryferyjnychModel Aktorów

Page 22: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

reactivex.ioreactivemanifesto.orgrxmarbles.comintrotorx.comrxwiki.wikidot.com/101samplesgodev.gemustudio.com

github.com/Reactive-Extensions/Rx.NETgithub.com/godevblog/30DayChallengegithub.com/krzysztofowsiany/rxexamples

Page 23: Krzysztof Owsiany - MrDevvar stream = Observable.Interval ( TimeSpan.FromSeconds(1), NewThreadScheduler.Default Timestamp(); var subscribent = stream.ObserveOn(Dispatcher.CurrentDispatcher

Krzysztof Owsiany

Twitter: @k_owsiany

Blog: mrdev.pl

Snapchat: gocom7