/**
  * @param integer $discoverTime
  * @return $this
  */
 public function discover(int $discoverTime = 10) : self
 {
     $client = new UDPClient();
     $client->setHost($this->host);
     $client->setPort($this->port);
     $client->setTimeout($discoverTime, 0);
     $client->setAllowBrowscast(true);
     $client->connect();
     $client->write($this->buildPacket('OPTIONS', max(1, $discoverTime / 2)));
     $client->write($this->buildPacket('M-SEARCH', max(1, $discoverTime / 2)));
     $endTime = time() + $discoverTime;
     while (time() < $endTime) {
         if ($this->server) {
             $this->server->listen(1);
         }
         /** @var string $msg */
         if (!($msg = $client->read())) {
             usleep(0.01);
             continue;
         }
         self::$eventHandler->fireEvent(EventDiscover::EVENT_NAME, new EventDiscover((new SsdpResponse())->setFromString($msg)));
     }
     $client->disconnect();
     return $this;
 }
Exemplo n.º 2
0
 public function testClicksWithStopPropagationAndPriority()
 {
     $clicks = 0;
     $this->eventHandler->addEvent(__METHOD__, function (Event $event) use(&$clicks) {
         $clicks++;
         $event->stopPropagation();
     });
     $this->eventHandler->addEvent(__METHOD__, function () use(&$clicks) {
         $clicks++;
     }, -1);
     $this->assertEquals(0, $clicks);
     $this->eventHandler->fireEvent(__METHOD__);
     $this->assertEquals(2, $clicks);
 }
 /**
  * @param ServerClient $client
  * @param string $buffer
  * @return void
  */
 public function onIncoming(ServerClient $client, string $buffer)
 {
     if (preg_match('/^NOTIFY/', $buffer)) {
         $response = new SsdpResponse();
         $response->setFromString($buffer);
         if ($response->getHttpCode() !== 200) {
             return;
         }
         self::$eventHandler->fireEvent(EventDiscover::EVENT_NAME, new EventDiscover($response));
         return;
     }
     if (preg_match('/^(OPTIONS|M-SEARCH) /', $buffer)) {
         foreach ($this->services as $service) {
             $buffer = sprintf("HTTP/1.1 200 OK\n" . "LOCATION: %s\n" . "SERVER: %s\n" . "CACHE-CONTROL: max-age=%d\n" . "EXT:\n" . "ST: %s\n" . "USN: %s\n", $service['location'], $service['server'], $service['ttl'], $service['usn'], $service['usn']);
             $this->send($client, $buffer);
         }
     }
 }