ts3phpframework
Loading...
Searching...
No Matches
UDP.php
Go to the documentation of this file.
1<?php
2
3namespace PlanetTeamSpeak\TeamSpeak3Framework\Transport;
4
5use PlanetTeamSpeak\TeamSpeak3Framework\Exception\TransportException;
6use PlanetTeamSpeak\TeamSpeak3Framework\Helper\Signal;
7use PlanetTeamSpeak\TeamSpeak3Framework\Helper\StringHelper;
8
15class UDP extends Transport
16{
23 public function connect(): void
24 {
25 if ($this->stream !== null) {
26 return;
27 }
28
29 $host = strval($this->config["host"]);
30 $port = strval($this->config["port"]);
31
32 $address = "udp://" . (str_contains($host, ":") ? "[" . $host . "]" : $host) . ":" . $port;
33 $timeout = (int)$this->config["timeout"];
34
35 $this->stream = @stream_socket_client($address, $errno, $errstr, $timeout);
36
37 if ($this->stream === false) {
38 throw new TransportException(StringHelper::factory($errstr)->toUtf8()->toString(), $errno);
39 }
40
41 @stream_set_timeout($this->stream, $timeout);
42 @stream_set_blocking($this->stream, $this->config["blocking"] ? 1 : 0);
43 }
44
50 public function disconnect(): void
51 {
52 if ($this->stream === null) {
53 return;
54 }
55
56 $this->stream = null;
57
58 Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "Disconnected");
59 }
60
68 public function read(int $length = 4096): StringHelper
69 {
70 $this->connect();
71 $this->waitForReadyRead();
72
73 $data = @fread($this->stream, $length);
74
75 Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataRead", $data);
76
77 if ($data === false) {
78 throw new TransportException("connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost");
79 }
80
81 return new StringHelper($data);
82 }
83
91 public function send(string $data): void
92 {
93 $this->connect();
94
95 @stream_socket_sendto($this->stream, $data);
96
97 Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataSend", $data);
98 }
99}
Enhanced exception class for PlanetTeamSpeak\TeamSpeak3Framework\Transport\Transport objects.
Abstract class for connecting to a TeamSpeak 3 Server through different ways of transport.
Definition Transport.php:17
Class for connecting to a remote server through UDP.
Definition UDP.php:16