Completed
Push — master ( d8071a...139121 )
by Dusan
02:42
created

ResponseSenderMiddleware   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 3
dl 0
loc 42
ccs 22
cts 22
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A process() 0 9 1
A sendHeaders() 0 18 4
A sendOutput() 0 10 3
1
<?php
2
/**
3
 * This file is part of the response-sender-middleware package.
4
 *
5
 * Copyright (c) Dusan Vejin
6
 *
7
 * For full copyright and license information, please refer to the LICENSE file,
8
 * located at the package root folder.
9
 */
10
11
declare(strict_types=1);
12
13
namespace WeCodeIn\Http\Server\Middleware;
14
15
use Interop\Http\Server\MiddlewareInterface;
16
use Interop\Http\Server\RequestHandlerInterface;
17
use Psr\Http\Message\ResponseInterface;
18
use Psr\Http\Message\ServerRequestInterface;
19
use Psr\Http\Message\StreamInterface;
20
21
class ResponseSenderMiddleware implements MiddlewareInterface
22
{
23 3
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
24
    {
25 3
        $response = $handler->handle($request);
26
27 3
        $this->sendHeaders($response);
28 3
        $this->sendOutput($response->getBody());
29
30 3
        return $response;
31
    }
32
33 3
    protected function sendHeaders(ResponseInterface $response)
34
    {
35 3
        if (headers_sent()) {
36 1
            return;
37
        }
38
39 2
        $protocolVersion = $response->getProtocolVersion();
40 2
        $statusCode = $response->getStatusCode();
41 2
        $reasonPhrase = $response->getReasonPhrase();
42
43 2
        header("HTTP/$protocolVersion $statusCode $reasonPhrase", true, $statusCode);
44
45 2
        foreach ($response->getHeaders() as $name => $values) {
46 1
            foreach ($values as $value) {
47 1
                header("$name: $value", false);
48
            }
49
        }
50 2
    }
51
52 3
    protected function sendOutput(StreamInterface $stream)
53
    {
54 3
        if ($stream->isSeekable()) {
55 3
            $stream->rewind();
56
        }
57
58 3
        while (false === $stream->eof()) {
59 3
            echo $stream->read(1024 * 8);
60
        }
61 3
    }
62
}
63