PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.6
Booking for Appointments and Events Calendar – Amelia v2.4.6
2.4.8 2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / league / tactician / src / Plugins / LockingMiddleware.php
ameliabooking / vendor / league / tactician / src / Plugins Last commit date
NamedCommand 7 years ago LockingMiddleware.php 7 years ago
LockingMiddleware.php
72 lines
1 <?php
2
3 namespace League\Tactician\Plugins;
4
5 use League\Tactician\Middleware;
6
7 /**
8 * If another command is already being executed, locks the command bus and
9 * queues the new incoming commands until the first has completed.
10 */
11 class LockingMiddleware implements Middleware
12 {
13 /**
14 * @var bool
15 */
16 private $isExecuting;
17
18 /**
19 * @var callable[]
20 */
21 private $queue = [];
22
23 /**
24 * Execute the given command... after other running commands are complete.
25 *
26 * @param object $command
27 * @param callable $next
28 *
29 * @throws \Exception
30 *
31 * @return mixed|void
32 */
33 public function execute($command, callable $next)
34 {
35 $this->queue[] = function () use ($command, $next) {
36 return $next($command);
37 };
38
39 if ($this->isExecuting) {
40 return;
41 }
42 $this->isExecuting = true;
43
44 try {
45 $returnValue = $this->executeQueuedJobs();
46 } catch (\Exception $e) {
47 $this->isExecuting = false;
48 $this->queue = [];
49 throw $e;
50 }
51
52 $this->isExecuting = false;
53 return $returnValue;
54 }
55
56 /**
57 * Process any pending commands in the queue. If multiple, jobs are in the
58 * queue, only the first return value is given back.
59 *
60 * @return mixed
61 */
62 protected function executeQueuedJobs()
63 {
64 $returnValues = [];
65 while ($resumeCommand = array_shift($this->queue)) {
66 $returnValues[] = $resumeCommand();
67 }
68
69 return array_shift($returnValues);
70 }
71 }
72