Queue::join()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 2
c 1
b 0
f 1
nc 1
nop 1
dl 0
loc 4
rs 10
1
<?php
2
/**
3
 * Jobs queue
4
 * User: moyo
5
 * Date: 01/08/2017
6
 * Time: 4:06 PM
7
 */
8
9
namespace Carno\Coroutine;
10
11
use Carno\Coroutine\Job\Signal;
12
use Carno\Coroutine\Scheduled\PQJobs;
13
14
class Queue
15
{
16
    /**
17
     * @var PQJobs
18
     */
19
    private $jobs = null;
20
21
    /**
22
     * Queue constructor.
23
     */
24
    public function __construct()
25
    {
26
        $this->jobs = new PQJobs();
27
    }
28
29
    /**
30
     * @param Job $job
31
     * @return Queue
32
     */
33
    public function join(Job $job) : Queue
34
    {
35
        $this->jobs->enqueue($job);
36
        return $this;
37
    }
38
39
    /**
40
     * run jobs
41
     */
42
    public function loop() : void
43
    {
44
        while ($this->jobs->valid()) {
45
            $job = $this->jobs->dequeue();
46
            RUNNING:
47
            switch ($job->exec()) {
48
                case Signal::SLEEP:
49
                    break;
50
                case Signal::KEEP:
51
                    goto RUNNING;
52
                    break;
53
                case Signal::ROLL:
54
                    $this->jobs->enqueue($job);
55
                    break;
56
                case Signal::KILL:
57
                    $job->end()->pended() && $job->end()->throw($job->result());
58
                    break;
59
                case Signal::FIN:
60
                    $job->failure() ? $job->end()->throw($job->result()) : $job->end()->resolve($job->result());
61
                    break;
62
            }
63
        }
64
    }
65
}
66