Completed
Push — master ( 4c13e7...623c77 )
by Biao
03:29
created

Response::setChunkLimit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
4
namespace Hhxsv5\LaravelS\Swoole;
5
6
use Swoole\Http\Response as SwooleResponse;
7
use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
8
9
abstract class Response implements ResponseInterface
10
{
11
    protected $chunkLimit = 2097152; // 2 * 1024 * 1024
12
13
    protected $swooleResponse;
14
15
    protected $laravelResponse;
16
17
    public function __construct(SwooleResponse $swooleResponse, SymfonyResponse $laravelResponse)
18
    {
19
        $this->swooleResponse = $swooleResponse;
20
        $this->laravelResponse = $laravelResponse;
21
    }
22
23
    public function setChunkLimit($chunkLimit)
24
    {
25
        $this->chunkLimit = $chunkLimit;
26
    }
27
28
    public function sendStatusCode()
29
    {
30
        $this->swooleResponse->status($this->laravelResponse->getStatusCode());
31
    }
32
33
    public function sendHeaders()
34
    {
35
        $headers = method_exists($this->laravelResponse->headers, 'allPreserveCaseWithoutCookies') ?
36
            $this->laravelResponse->headers->allPreserveCaseWithoutCookies() : $this->laravelResponse->headers->allPreserveCase();
37
        foreach ($headers as $name => $values) {
38
            foreach ($values as $value) {
39
                $this->swooleResponse->header($name, $value);
40
            }
41
        }
42
    }
43
44
    public function sendCookies()
45
    {
46
        $hasIsRaw = null;
47
        /**@var \Symfony\Component\HttpFoundation\Cookie[] $cookies */
48
        $cookies = $this->laravelResponse->headers->getCookies();
49
        foreach ($cookies as $cookie) {
50
            if ($hasIsRaw === null) {
51
                $hasIsRaw = method_exists($cookie, 'isRaw');
52
            }
53
            $setCookie = $hasIsRaw && $cookie->isRaw() ? 'rawcookie' : 'cookie';
54
            $this->swooleResponse->$setCookie(
55
                $cookie->getName(),
56
                $cookie->getValue(),
57
                $cookie->getExpiresTime(),
58
                $cookie->getPath(),
59
                $cookie->getDomain(),
60
                $cookie->isSecure(),
61
                $cookie->isHttpOnly()
62
            );
63
        }
64
    }
65
66
    public function send($gzip = false)
67
    {
68
        $this->sendStatusCode();
69
        $this->sendHeaders();
70
        $this->sendCookies();
71
        if ($gzip) {
72
            $this->gzip();
73
        }
74
        $this->sendContent();
75
    }
76
}
77