/** * Start servers for UDP Discovery and set timer for sending packets * @param LoopInterface $loop */ public function start($loop) { $factory = new \React\Datagram\Factory($loop); // IPv4 Server $factory->createServer('0.0.0.0:' . $this->discoveryPort)->then(function (\React\Datagram\Socket $client) { $client->on('message', function ($message, $serverAddress, $client) { // echo 'received ip4 "' . bin2hex($message) . '" from ' . $serverAddress . PHP_EOL; $this->handlePacket(Packet::createFromString($message, $this->stripPort($serverAddress))); }); }); // IPv6 Server $factory->createServer('[::]:' . $this->discoveryPort)->then(function (\React\Datagram\Socket $client) { $client->on('message', function ($message, $serverAddress, $client) { // echo 'received ip6 "' . bin2hex($message) . '" from ' . $serverAddress . PHP_EOL; $this->handlePacket(Packet::createFromString($message, $this->stripPort($serverAddress))); }); }); $loop->addPeriodicTimer($this->syncInterval, function () { $this->sendAnnouncement(); }); $this->sendAnnouncement(); // TODO remove known hosts after some time }