Completed
Branch master (1d1574)
by Evgenij
18:38
created

PipelineFactory::createPipeline()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 1

Importance

Changes 7
Bugs 0 Features 0
Metric Value
c 7
b 0
f 0
dl 0
loc 27
ccs 16
cts 16
cp 1
rs 8.8571
cc 1
eloc 18
nc 1
nop 3
crap 1
1
<?php
2
/**
3
 * Async sockets
4
 *
5
 * @copyright Copyright (c) 2015-2016, Efimov Evgenij <[email protected]>
6
 *
7
 * This source file is subject to the MIT license that is bundled
8
 * with this source code in the file LICENSE.
9
 */
10
namespace AsyncSockets\RequestExecutor\Pipeline;
11
12
use AsyncSockets\RequestExecutor\LimitationSolverInterface;
13
use AsyncSockets\RequestExecutor\RequestExecutorInterface;
14
use AsyncSockets\Socket\AsyncSelector;
15
16
/**
17
 * Class PipelineFactory
18
 */
19
class PipelineFactory
20
{
21
    /**
22
     * Stage factory
23
     *
24
     * @var StageFactoryInterface
25
     */
26
    private $stageFactory;
27
28
    /**
29
     * PipelineFactory constructor.
30
     *
31
     * @param StageFactoryInterface $stageFactory Stage factory
32
     */
33 64
    public function __construct(StageFactoryInterface $stageFactory)
34
    {
35 64
        $this->stageFactory = $stageFactory;
36 64
    }
37
38
    /**
39
     * Create Pipeline
40
     *
41
     * @param RequestExecutorInterface  $executor Request executor
42
     * @param EventCaller               $eventCaller Event caller
43
     * @param LimitationSolverInterface $limitationDecider Limitation solver
44
     *
45
     * @return Pipeline
46
     */
47 62
    public function createPipeline(
48
        RequestExecutorInterface $executor,
49
        EventCaller $eventCaller,
50
        LimitationSolverInterface $limitationDecider
51
    ) {
52 62
        $selector        = $this->createSelector();
53 62
        $disconnectStage = $this->stageFactory->createDisconnectStage($executor, $eventCaller, $selector);
54
55 62
        return new Pipeline(
56 62
            $this->stageFactory->createConnectStage($executor, $eventCaller, $limitationDecider),
57
            [
58 62
                new ExcludedOperationsStage(
59 62
                    $executor,
60 62
                    $eventCaller,
61
                    [
62 62
                        $this->stageFactory->createDelayStage($executor, $eventCaller),
63 62
                        new SelectStage($executor, $eventCaller, $selector),
64 62
                        $this->stageFactory->createIoStage($executor, $eventCaller),
65
                        $disconnectStage
66 62
                    ]
67 62
                ),
68 62
                new TimeoutStage($executor, $eventCaller),
69
                $disconnectStage
70 62
            ],
71
            $disconnectStage
72 62
        );
73
    }
74
75
    /**
76
     * Create AsyncSelector
77
     *
78
     * @return AsyncSelector
79
     */
80 62
    protected function createSelector()
81
    {
82 62
        return new AsyncSelector();
83
    }
84
}
85