. * * @author Daniil Gentili * @copyright 2016-2020 Daniil Gentili * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * * @link https://docs.madelineproto.xyz MadelineProto documentation */ namespace danog\MadelineProto\Loop\Connection; use danog\Loop\ResumableSignalLoop; /** * HttpWait loop. * * @author Daniil Gentili */ class HttpWaitLoop extends ResumableSignalLoop { use Common; /** * Main loop. * * @return \Generator */ public function loop(): \Generator { $API = $this->API; $datacenter = $this->datacenter; $connection = $this->connection; $shared = $this->datacenterConnection; if (!$shared->isHttp()) { return; } while (true) { if (yield $this->waitSignal($this->pause())) { return; } if (!$connection->isHttp()) { return; } while (!$shared->hasTempAuthKey()) { if (yield $this->waitSignal($this->pause())) { return; } } $API->logger->logger("DC {$datacenter}: request {$connection->countHttpSent()}, response {$connection->countHttpReceived()}"); if ($connection->countHttpSent() === $connection->countHttpReceived() && (!empty($connection->pending_outgoing) || !empty($connection->new_outgoing) && !$connection->hasPendingCalls())) { yield from $connection->sendMessage(['_' => 'http_wait', 'body' => ['max_wait' => 30000, 'wait_after' => 0, 'max_delay' => 0], 'contentRelated' => true, 'unencrypted' => false, 'method' => false]); } $API->logger->logger("DC {$datacenter}: request {$connection->countHttpSent()}, response {$connection->countHttpReceived()}"); } } /** * Loop name. * * @return string */ public function __toString(): string { return "HTTP wait loop in DC {$this->datacenter}"; } }