Completed
Push — master ( 17da57...0d4fd4 )
by Denis
02:07
created

Server::setRequestProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace PhpJsonRpc;
4
5
use PhpJsonRpc\Server\Processor;
6
use PhpJsonRpc\Server\RequestParser;
7
use PhpJsonRpc\Server\RequestProvider;
8
use PhpJsonRpc\Server\RequestProviderInterface;
9
use PhpJsonRpc\Server\ResponseBuilder;
10
use PhpJsonRpc\Server\MapperInterface;
11
12
/**
13
 * Implementation of JSON-RPC2 server specification
14
 *
15
 * @link http://www.jsonrpc.org/specification 
16
 */
17
class Server
18
{
19
    /**
20
     * @var Processor
21
     */
22
    private $processor;
23
24
    /**
25
     * @var RequestProviderInterface
26
     */
27
    private $requestProvider;
28
29
    /**
30
     * @var RequestParser
31
     */
32
    private $requestParser;
33
34
    /**
35
     * @var ResponseBuilder
36
     */
37
    private $responseBuilder;
38
39
    /**
40
     * Server constructor.
41
     */
42
    public function __construct()
43
    {
44
        $this->processor = new Processor();
45
46
        $this->requestProvider = new RequestProvider();
47
        $this->requestParser   = new RequestParser();
48
        $this->responseBuilder = new ResponseBuilder();
49
    }
50
51
    /**
52
     * @return Processor
53
     */
54
    public function getProcessor(): Processor
55
    {
56
        return $this->processor;
57
    }
58
59
    /**
60
     * @return RequestProviderInterface
61
     */
62
    public function getRequestProvider(): RequestProviderInterface
63
    {
64
        return $this->requestProvider;
65
    }
66
67
    /**
68
     * @param RequestProviderInterface $requestProvider
69
     */
70
    public function setRequestProvider(RequestProviderInterface $requestProvider)
71
    {
72
        $this->requestProvider = $requestProvider;
73
    }
74
75
    /**
76
     * @return RequestParser
77
     */
78
    public function getRequestParser(): RequestParser
79
    {
80
        return $this->requestParser;
81
    }
82
83
    /**
84
     * @return ResponseBuilder
85
     */
86
    public function getResponseBuilder(): ResponseBuilder
87
    {
88
        return $this->responseBuilder;
89
    }
90
91
    /**
92
     * Add handler-object for handling request
93
     *
94
     * @param mixed $object
95
     * @return $this
96
     */
97
    public function addHandler($object)
98
    {
99
        $this->processor->addHandler($object);
100
        return $this;
101
    }
102
103
    /**
104
     * Set mapper-object for mapping request-method on class and method
105
     *
106
     * @param MapperInterface $mapper
107
     * @return $this
108
     */
109
    public function setMapper(MapperInterface $mapper)
110
    {
111
        $this->processor->setMapper($mapper);
112
        return $this;
113
    }
114
115
    /**
116
     * Run server
117
     *
118
     * @return string
119
     */
120
    public function execute(): string
121
    {
122
        $calls  = $this->requestParser->parse($this->requestProvider->getPayload());
123
        $result = $this->processor->process($calls);
124
125
        return $this->responseBuilder->build($result);
126
    }
127
}
128