forked from broadway/broadway
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathState.php
105 lines (91 loc) · 1.98 KB
/
State.php
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
<?php
/*
* This file is part of the broadway/broadway package.
*
* (c) Qandidate.com <opensource@qandidate.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Broadway\Saga;
use Broadway\Serializer\SerializableInterface;
/**
* Encapsulates the state of a saga.
*
* Saga's are implemented as stateless services. The state is passed to a saga
* every time it's called. The state is also used to signal that the saga is
* finished.
*
* @todo should it be immutable?
*/
class State implements SerializableInterface
{
private $done = false;
private $id;
private $values = array();
/**
* @param string $id Unique identifier for the state object
*/
public function __construct($id)
{
$this->id = $id;
}
/**
* @param string $key
* @param mixed $value
*/
public function set($key, $value)
{
$this->values[$key] = $value;
}
/**
* @param string $key
*
* @return mixed|null
*/
public function get($key)
{
if (! isset($this->values[$key])) {
return null; // todo: exception?
}
return $this->values[$key];
}
/**
* @return string
*/
public function getId()
{
return $this->id;
}
/**
* Mark the saga as done.
*/
public function setDone()
{
$this->done = true;
}
/**
* @return boolean
*/
public function isDone()
{
return $this->done;
}
/**
* {@inheritDoc}
*/
public function serialize()
{
return array('id' => $this->getId(), 'values' => $this->values, 'done' => $this->isDone());
}
/**
* {@inheritDoc}
*/
public static function deserialize(array $data)
{
$state = new State($data['id']);
$state->done = $data['done'];
$state->values = $data['values'];
return $state;
}
}