-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCommandPolicy.cpp
107 lines (95 loc) · 3.45 KB
/
CommandPolicy.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include"RxCommand/CommandPolicy.h"
namespace Reactor {
CommandPolicy::CommandPolicy()
: policy_(TaskPolicy::Default())
, undoRedo_(Policy::UndoRedo::UndoAndRedo())
, successCriterion_(Policy::Criterion::All())
, composition_(Policy::Composition::Individual())
{ }
CommandPolicy::CommandPolicy(TaskPolicy policy, Policy::Composition composition, Policy::Criterion successCriterion)
: policy_(policy)
, undoRedo_(Policy::UndoRedo::UndoAndRedo())
, successCriterion_(successCriterion)
, composition_(composition)
{ }
CommandPolicy::~CommandPolicy()
{ }
Policy::Criterion CommandPolicy::SuccessCriterion() const
{
return successCriterion_;
}
TaskPolicy CommandPolicy::GetTaskPolicy() const
{
return policy_;
}
CommandPolicy CommandPolicy::Default()
{
return CommandPolicy(
TaskPolicy(
Policy::Attempt::Default(),
Policy::Interval::Default(),
Policy::Interval::Default(),
Policy::Timeout::FromMilliseconds(60000),
Policy::Lifespan::Infinite(),
Policy::Deadline::FromDuration(Duration::Infinite()),
Policy::LeasePlan::NoRenew()),
Policy::Composition::Individual(),
Policy::Criterion::All());
}
CommandPolicy CommandPolicy::OnceAggregate(Policy::Interval retryInterval, Policy::Timeout timeout, int maxNumberAttempts)
{
return CommandPolicy(
TaskPolicy(
Policy::Attempt::UntilSuccess(maxNumberAttempts),
Policy::Interval::RunImmediatelyAndThenEvery(1000),
retryInterval,
timeout,
Policy::Lifespan::Infinite(),
Policy::Deadline::FromDuration(Duration::Infinite()),
Policy::LeasePlan::NoRenew()),
Policy::Composition::Aggregate(),
Policy::Criterion::All());
}
CommandPolicy CommandPolicy::OnceIndividual(Policy::Interval retryInterval, Policy::Timeout timeout, int maxNumberAttempts)
{
return CommandPolicy(
TaskPolicy(
Policy::Attempt::UntilSuccess(maxNumberAttempts),
Policy::Interval::RunImmediatelyAndThenEvery(1000),
retryInterval,
timeout,
Policy::Lifespan::Infinite(),
Policy::Deadline::FromDuration(Duration::Infinite()),
Policy::LeasePlan::NoRenew()),
Policy::Composition::Individual(),
Policy::Criterion::All());
}
CommandPolicy CommandPolicy::OnceImmediatelyIndividual(Policy::Timeout timeout, int maxNumberAttempts)
{
return CommandPolicy(
TaskPolicy(
Policy::Attempt::UntilSuccess(maxNumberAttempts),
Policy::Interval::RunImmediatelyAndThenEvery(1000),
Policy::Interval::DelayedRunAndThenEvery(1000, 1000),
timeout,
Policy::Lifespan::Infinite(),
Policy::Deadline::FromDuration(Duration::Infinite()),
Policy::LeasePlan::NoRenew()),
Policy::Composition::Individual(),
Policy::Criterion::All());
}
CommandPolicy CommandPolicy::ForeverIndividual(Policy::Interval interval, Policy::Interval retryInterval, Policy::Timeout timeout)
{
return CommandPolicy(
TaskPolicy(
Policy::Attempt::Forever(),
interval,
retryInterval,
timeout,
Policy::Lifespan::Infinite(),
Policy::Deadline::FromDuration(Duration::Infinite()),
Policy::LeasePlan::NoRenew()),
Policy::Composition::Individual(),
Policy::Criterion::Unconditional());
}
}