Repository navigation
Expand file tree
/
Copy pathRealtimeDistributor.php
More file actions
77 lines (66 loc) · 1.8 KB
/
Copy pathRealtimeDistributor.php
File metadata and controls
77 lines (66 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
namespace Modules\Internal;
use ErrorException;
use Modules\Internal\Interfaces\InterfaceObservableRealtime;
use Modules\Internal\Interfaces\InterfaceObserverRealtime;
use Core\Config\ConfigException;
use Core\Parser\ParserException;
use Core\Protocol\Frames\Frame\Frame;
use Core\Protocol\Socket\Client;
use Core\Protocol\Socket\SocketException;
class RealtimeDistributor implements InterfaceObservableRealtime
{
private Frame $frame;
private array $observers = [];
private string $data;
private ?Client $webSocket = null;
/**
* @throws ConfigException
* @throws ErrorException
* @throws ParserException
* @throws SocketException
*/
public function setFrame(Frame $frame, string $data, ?Client $webSocket = null):void
{
$this->frame = $frame;
$this->data = $data;
$this->webSocket = $webSocket;
$this->notify();
}
public function getFrame():Frame
{
return $this->frame;
}
public function attach(InterfaceObserverRealtime $observer):self
{
$this->observers[] = $observer;
return $this;
}
public function detach(InterfaceObserverRealtime $observer):void
{
$this->observers = array_diff($this->observers, array($observer));
}
/**
* @throws ConfigException
* @throws ErrorException
* @throws ParserException
* @throws SocketException
*/
public function notify():void
{
foreach ($this->observers as $observer) {
/**
* @var $observer InterfaceObserverRealtime
*/
$observer->update($this);
}
}
public function getData(): string
{
return $this->data;
}
public function getWebSocket(): ?Client
{
return $this->webSocket;
}
}