Buffer   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 108
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 0
dl 0
loc 108
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A __destruct() 0 5 1
A push() 0 17 4
B pull() 0 35 6
A erase() 0 5 1
1
<?php
2
3
namespace Dazzle\ChannelSocket\Buffer;
4
5
/**
6
 * @codeCoverageIgnore
7
 */
8
class Buffer
9
{
10
    /**
11
     * @var string[][]
12
     */
13
    protected $messageBuffer;
14
15
    /**
16
     * @var int
17
     */
18
    protected $messageBufferSize;
19
20
    /**
21
     * @var int
22
     */
23
    protected $messageBufferMax;
24
25
    /**
26
     * @param int $bufferSize
27
     */
28
    public function __construct($bufferSize = 0)
29
    {
30
        $this->messageBuffer = [];
31
        $this->messageBufferSize = 0;
32
        $this->messageBufferMax = $bufferSize;
33
    }
34
35
    /**
36
     *
37
     */
38
    public function __destruct()
39
    {
40
        $this->erase();
41
        unset($this->messageBufferMax);
42
    }
43
44
    /**
45
     * @param string $id
46
     * @param string $frame
47
     * @return bool
48
     */
49
    public function push($id, $frame)
50
    {
51
        if ($this->messageBufferSize >= $this->messageBufferMax && $this->messageBufferMax > 0)
52
        {
53
            return false;
54
        }
55
56
        if (!isset($this->messageBuffer[$id]))
57
        {
58
            $this->messageBuffer[$id] = [];
59
        }
60
61
        $this->messageBuffer[$id][] = $frame;
62
        $this->messageBufferSize++;
63
64
        return true;
65
    }
66
67
    /**
68
     * @param string|null $id
69
     * @return string[]
70
     */
71
    public function pull($id = null)
72
    {
73
        $messages = [];
74
75
        if ($id === null)
76
        {
77
            foreach ($this->messageBuffer as $id=>$buffer)
78
            {
79
                foreach ($buffer as $message)
80
                {
81
                    $messages[] = [ $id, $message ];
82
                }
83
84
                $this->messageBuffer[$id] = [];
85
            }
86
87
            $this->messageBuffer = [];
88
            $this->messageBufferSize = 0;
89
        }
90
        else if (isset($this->messageBuffer[$id]))
91
        {
92
            $cnt = 0;
93
94
            foreach ($this->messageBuffer[$id] as $message)
95
            {
96
                $messages[] = [ $id, $message ];
97
                $cnt++;
98
            }
99
100
            unset($this->messageBuffer[$id]);
101
            $this->messageBufferSize -= $cnt;
102
        }
103
104
        return $messages;
105
    }
106
107
    /**
108
     *
109
     */
110
    public function erase()
111
    {
112
        $this->messageBuffer = [];
113
        $this->messageBufferSize = 0;
114
    }
115
}
116