Example #1
0
 public function run($handlerCallable, $invalidRequestHandlerCallable = null)
 {
     $this->handlerCallable = $handlerCallable;
     $this->invalidRequestHandlerCallable = $invalidRequestHandlerCallable;
     $loop = \React\EventLoop\Factory::create();
     $factory = new \React\Datagram\Factory($loop);
     $listener = $this;
     $factory->createServer($this->udpServerIp . ':' . $this->udpServerPort)->then(function (\React\Datagram\Socket $server) use($listener) {
         $server->on('message', [$listener, "receive"]);
     });
     $loop->run();
 }
 /**
  * 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
 }