comparison Implab/PromiseActionReaction.cs @ 249:d82909310094 v3

Implab.Test moved to xunit Complete set of PromiseHelpers (Then, Catch, Finally) Removed obsolete types ICancellable, ICancellationToken
author cin
date Wed, 31 Jan 2018 11:28:38 +0300
parents 5cb4826c2c2a
children
comparison
equal deleted inserted replaced
248:5cb4826c2c2a 249:d82909310094
1 using System; 1 using System;
2 using System.Diagnostics; 2 using System.Diagnostics;
3 3
4 namespace Implab { 4 namespace Implab {
5 class PromiseActionReaction : PromiseReaction { 5 class PromiseActionReaction : IResolvable {
6 6
7 readonly Deferred m_next; 7 readonly Deferred m_next;
8
9 readonly IDispatcher m_dispatcher;
10
11 readonly Action<Deferred> m_fulfilled;
12
13 readonly Action<Exception, Deferred> m_rejected;
8 14
9 public IPromise Promise { 15 public IPromise Promise {
10 get { return m_next.Promise; } 16 get { return m_next.Promise; }
11 } 17 }
12 18
13 public PromiseActionReaction(Action fulfilled, Action<Exception> rejected, IDispatcher dispatcher) : base(dispatcher) { 19 public PromiseActionReaction(Action<Deferred> fulfilled, Action<Exception, Deferred> rejected, Deferred next, IDispatcher dispatcher) {
14 m_next = new Deferred(dispatcher); 20 m_next = next;
15 if (fulfilled != null) 21 m_fulfilled = fulfilled;
16 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); 22 m_rejected = rejected;
17 23 m_dispatcher = dispatcher;
18 if (rejected != null)
19 RejectHandler = PromiseHandler.Create(rejected, m_next);
20 } 24 }
21 25
22 public PromiseActionReaction(Func<IPromise> fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) : base(dispatcher) { 26 public void Resolve() {
23 m_next = new Deferred(dispatcher); 27 if (m_fulfilled != null) {
24 if (fulfilled != null) 28 if (m_dispatcher != null)
25 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); 29 m_dispatcher.Enqueue(ResolveImpl);
26 30 else
27 if (rejected != null) 31 ResolveImpl();
28 RejectHandler = PromiseHandler.Create(rejected, m_next); 32 } else {
33 m_next.Resolve();
34 }
29 } 35 }
30 36
31 public PromiseActionReaction(Action fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) : base(dispatcher) { 37 void ResolveImpl() {
32 m_next = new Deferred(dispatcher); 38 m_fulfilled(m_next);
33 if (fulfilled != null)
34 FulfilHandler = PromiseHandler.Create(fulfilled, m_next);
35
36 if (rejected != null)
37 RejectHandler = PromiseHandler.Create(rejected, m_next);
38 } 39 }
39 40
40 public PromiseActionReaction(Func<IPromise> fulfilled, Action<Exception> rejected, IDispatcher dispatcher) : base(dispatcher) { 41 public void Reject(Exception error) {
41 m_next = new Deferred(dispatcher); 42 if (m_fulfilled != null) {
42 if (fulfilled != null) 43 if (m_dispatcher != null)
43 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); 44 m_dispatcher.Enqueue(RejectImpl, error);
44 45 else
45 if (rejected != null) 46 RejectImpl(error);
46 RejectHandler = PromiseHandler.Create(rejected, m_next); 47 } else {
48 m_next.Reject(error);
49 }
47 } 50 }
48 51
49 protected override void DefaultReject(Exception reason) { 52 void RejectImpl(Exception error) {
50 m_next.Reject(reason); 53 m_rejected(error, m_next);
51 } 54 }
52 55
53 protected override void DefaultResolve() { 56 public static PromiseActionReaction Create(Action fulfilled, Action<Exception> rejected, IDispatcher dispatcher) {
54 m_next.Resolve(); 57 return new PromiseActionReaction(
58 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
59 rejected != null ? PromiseHandler.Create(rejected) : null,
60 new Deferred(),
61 dispatcher
62 );
63 }
64
65 public static PromiseActionReaction Create(Func<IPromise> fulfilled, Action<Exception> rejected, IDispatcher dispatcher) {
66 return new PromiseActionReaction(
67 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
68 rejected != null ? PromiseHandler.Create(rejected) : null,
69 new Deferred(),
70 dispatcher
71 );
72 }
73
74 public static PromiseActionReaction Create(Action fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) {
75 return new PromiseActionReaction(
76 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
77 rejected != null ? PromiseHandler.Create(rejected) : null,
78 new Deferred(),
79 dispatcher
80 );
81 }
82
83 public static PromiseActionReaction Create(Func<IPromise> fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) {
84 return new PromiseActionReaction(
85 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
86 rejected != null ? PromiseHandler.Create(rejected) : null,
87 new Deferred(),
88 dispatcher
89 );
55 } 90 }
56 } 91 }
57 } 92 }