diff --git a/src/danog/MadelineProto/API.php b/src/danog/MadelineProto/API.php index 26939cd7..1e422e72 100644 --- a/src/danog/MadelineProto/API.php +++ b/src/danog/MadelineProto/API.php @@ -136,6 +136,7 @@ class API extends InternalDoc $unserialized->session = $session; APIWrapper::link($this, $unserialized); APIWrapper::link($this->wrapper, $this); + AbstractAPIFactory::link($this->wrapper->getFactory(), $this); if (isset($this->API)) { $this->storage = $this->API->storage ?? $this->storage; diff --git a/src/danog/MadelineProto/DataCenter.php b/src/danog/MadelineProto/DataCenter.php index 51b584e2..f3a4758e 100644 --- a/src/danog/MadelineProto/DataCenter.php +++ b/src/danog/MadelineProto/DataCenter.php @@ -34,6 +34,7 @@ use Amp\Http\Client\HttpClientBuilder; use Amp\Http\Client\Request; use Amp\Socket\ConnectContext; use Amp\Socket\DnsConnector; +use Amp\Websocket\Client\Handshake; use Amp\Websocket\Client\Rfc6455Connector; use danog\MadelineProto\MTProto\PermAuthKey; use danog\MadelineProto\MTProto\TempAuthKey; @@ -233,7 +234,9 @@ class DataCenter $this->nonProxiedDoHClient = Magic::$altervista || Magic::$zerowebhost ? new Rfc1035StubResolver() : new Rfc8484StubResolver($nonProxiedDoHConfig); $this->dnsConnector = new DnsConnector(new Rfc1035StubResolver()); - $this->webSocketConnnector = new Rfc6455Connector($this->HTTPClient); + if (\class_exists(Rfc6455Connector::class)) { + $this->webSocketConnnector = new Rfc6455Connector($this->HTTPClient); + } } } public function dcConnect(string $dc_number, int $id = -1): \Generator @@ -265,7 +268,7 @@ class DataCenter if (\MADELINEPROTO_TEST === 'pony') { throw $e; } - $this->API->logger->logger("Connection failed ({$dc_number}): " . $e->getMessage(), \danog\MadelineProto\Logger::ERROR); + $this->API->logger->logger("Connection failed ({$dc_number}): ".$e->getMessage(), \danog\MadelineProto\Logger::ERROR); } } throw new Exception("Could not connect to DC {$dc_number}"); @@ -468,6 +471,9 @@ class DataCenter $stream[1] = $useDoH ? new DoHConnector($this, $ctx) : $this->dnsConnector; } if (\in_array($stream[0], [WsStream::class, WssStream::class]) && $stream[1] === []) { + if (!\class_exists(Handshake::class)) { + throw new Exception('Please install amphp/websocket-client by running "composer require amphp/websocket-client:dev-master"'); + } $stream[1] = $this->webSocketConnnector; } $ctx->addStream(...$stream); @@ -477,8 +483,8 @@ class DataCenter } } } - if (isset($this->dclist[$test][$ipv6][$dc_number . '_bk']['ip_address'])) { - $ctxs = \array_merge($ctxs, $this->generateContexts($dc_number . '_bk')); + if (isset($this->dclist[$test][$ipv6][$dc_number.'_bk']['ip_address'])) { + $ctxs = \array_merge($ctxs, $this->generateContexts($dc_number.'_bk')); } if (empty($ctxs)) { unset($this->sockets[$dc_number]); diff --git a/src/danog/MadelineProto/Loop/Update/FeedLoop.php b/src/danog/MadelineProto/Loop/Update/FeedLoop.php index f79738ae..0a6bfe62 100644 --- a/src/danog/MadelineProto/Loop/Update/FeedLoop.php +++ b/src/danog/MadelineProto/Loop/Update/FeedLoop.php @@ -138,7 +138,7 @@ class FeedLoop extends ResumableSignalLoop foreach ($updates as $update) { $res = $this->feedSingle($update); if ($res instanceof \Generator) { - $res = yield $res; + $res = yield from $res; } $result[$res] = true; } diff --git a/src/danog/MadelineProto/Wrappers/Events.php b/src/danog/MadelineProto/Wrappers/Events.php index 0bf64e31..937857b4 100644 --- a/src/danog/MadelineProto/Wrappers/Events.php +++ b/src/danog/MadelineProto/Wrappers/Events.php @@ -20,6 +20,7 @@ namespace danog\MadelineProto\Wrappers; use danog\MadelineProto\EventHandler; +use danog\MadelineProto\Tools; /** * Event handler. @@ -84,6 +85,9 @@ trait Events $this->settings['updates']['callback'] = [$this, 'eventUpdateHandler']; $this->settings['updates']['handle_updates'] = true; $this->settings['updates']['run_callback'] = true; + if (method_exists($this->event_handler_instance, 'onStart')) { + Tools::callFork($this->event_handler_instance->onStart()); + } if ($this->inited()) { $this->startUpdateSystem(); } diff --git a/src/danog/MadelineProto/Wrappers/Loop.php b/src/danog/MadelineProto/Wrappers/Loop.php index daf130d0..023b15e4 100644 --- a/src/danog/MadelineProto/Wrappers/Loop.php +++ b/src/danog/MadelineProto/Wrappers/Loop.php @@ -220,4 +220,4 @@ trait Loop \fastcgi_finish_request(); } } -} \ No newline at end of file +} diff --git a/tests/makephar.sh b/tests/makephar.sh index 4660d79d..bc705fe4 100755 --- a/tests/makephar.sh +++ b/tests/makephar.sh @@ -60,7 +60,13 @@ composer config platform.php "7.4" composer clearcache composer update composer require amphp/mysql -[ $PHP_MAJOR_VERSION -eq 5 ] && composer require dstuecken/php7ify && composer require symfony/polyfill-php70 +[ $PHP_MAJOR_VERSION -eq 5 ] && { + composer require dstuecken/php7ify + composer require symfony/polyfill-php70 + composer require symfony/polyfill-php71 + composer require symfony/polyfill-php72 + composer require symfony/polyfill-php73 +} [ $PHP_MAJOR_VERSION -eq 7 ] && [ $PHP_MINOR_VERSION -eq 0 ] && { composer require symfony/polyfill-php71 composer require symfony/polyfill-php72