2016-08-07 23:23:10 +02:00
|
|
|
<?php
|
2018-02-24 17:54:13 +01:00
|
|
|
|
Merge alpha into master (async, huge bugfixes and more) (#546)
* Implement async and lots of bugfixes
* Implement more async
* Implement async, implement bugfixes for the connection module, for the datacenter module, huge bugfixes, huge perfomance improvements, media DCs for https, advanced selecting, custom var_dump, totally rewritten IOLoop and response mechanism, promises, improvements to the TL parser, custom mb_substr
* Apply fixes from StyleCI
* Bugfixes
* Apply fixes from StyleCI
* Bugfixes, implement combined promises
* Apply fixes from StyleCI
* Support passing method arguments as callable
* Starting to write async upload logic
* Apply fixes from StyleCI
* Start implementing async file upload
* Apply fixes from StyleCI
* bugfix
* Apply fixes from StyleCI
* Start rewriting connection module
* Add PHP file docblocks for all classes
* Start working on new async stream API
* Finish writing stream API
* More stream API fixes
* Apply fixes from StyleCI
* Rewrite DataCenter and Connection modules
* Clean up stream API documentation
* Fixes
* Apply fixes from StyleCI
* Add referenced parameter to get length of buffer to read in getReadBuffer API
* Moved all MessageHandler code in the Connection module, added a PHP version warning in the phar
* Start fixing reads
* Fix all protocol stream wrappers
* Apply fixes from StyleCI
* Implement disconnection, and remove end function
* Working async RPC
* Implement async file upload
* Bugfix
* Method recall bugfixes
* Bugfixes
* Trait bugfixes
* Fix FIFO buffer
* Bugfixes and speedtests
* Async logging
* Implement websocket streams
* Implement loop API, signal API, clean closing and start changing layer
* Small magna, websocket and HTTP fixes
* Clean up loop API
* Improved stack traces, 2FA and async
* Login fixes
* Added instructions for manual verification
* Small fixes
* More app info improvements
* More app info improvements
* TL and 2FA fixes
* Update to layer 89
* More bugfixes
* Implement broken media reporting
* Remove debug comments
* PHP 7.2 backwards compatibility
* Bugfixes
* Async key generation
* Some simplifications
* Transport fixes
* Cleanup
* async API
* Performance fixes
* Fixes to async API
* Bugfixes
* Implement one-time async loop
* Authorization and logging fixes
* Update to layer 91
* 7to5 fix
* Null coalesce conversion
* Implement socks5 proxy
* Implement HTTP proxy
* Fixes to HTTP proxy
* MTProxy and socks5 fixes
* Disable PHP 5 conversion
* Proxies have higher priority
* Avoid error handling in vendor
* Override composer dependencies
* Fix travis build
* Final composer fixes
* Proxy logic fixes
* Fix get_updates update handling
* Do not use parallel file driver if not supported
* Refactor loader and implement HTTP fixes
* Suppress errors in loader
* HTTP and authorization fixes
* HTTP fixes
* Improved peer management
* Use HTTP protocol on altervista
* Small bugfixes
* Minor fixes
* Docufix
* Docufix
* Legacy fixes
* Fix message queue
* Avoid updating if using MTProxy
* Improve logs and examples
* Trim final newlines while converting parse mode
* Reimplement noResponse flag
* Async combined event handler and APIFactory fixes
* Actually return config
* Case-insensitive methods
* Bugfix
* Apply fixes from StyleCI (#545)
* MTProxy fixes
* PHP 5 warning
* Improved PHP 5 warning
* Use <br> along with newlines in web logs
* Update docs
2018-12-26 20:51:14 +01:00
|
|
|
/**
|
|
|
|
* API module.
|
|
|
|
*
|
|
|
|
* This file is part of MadelineProto.
|
|
|
|
* MadelineProto is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
|
|
* MadelineProto is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
* See the GNU Affero General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License along with MadelineProto.
|
|
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
* @author Daniil Gentili <daniil@daniil.it>
|
2020-02-17 14:13:46 +01:00
|
|
|
* @copyright 2016-2020 Daniil Gentili <daniil@daniil.it>
|
Merge alpha into master (async, huge bugfixes and more) (#546)
* Implement async and lots of bugfixes
* Implement more async
* Implement async, implement bugfixes for the connection module, for the datacenter module, huge bugfixes, huge perfomance improvements, media DCs for https, advanced selecting, custom var_dump, totally rewritten IOLoop and response mechanism, promises, improvements to the TL parser, custom mb_substr
* Apply fixes from StyleCI
* Bugfixes
* Apply fixes from StyleCI
* Bugfixes, implement combined promises
* Apply fixes from StyleCI
* Support passing method arguments as callable
* Starting to write async upload logic
* Apply fixes from StyleCI
* Start implementing async file upload
* Apply fixes from StyleCI
* bugfix
* Apply fixes from StyleCI
* Start rewriting connection module
* Add PHP file docblocks for all classes
* Start working on new async stream API
* Finish writing stream API
* More stream API fixes
* Apply fixes from StyleCI
* Rewrite DataCenter and Connection modules
* Clean up stream API documentation
* Fixes
* Apply fixes from StyleCI
* Add referenced parameter to get length of buffer to read in getReadBuffer API
* Moved all MessageHandler code in the Connection module, added a PHP version warning in the phar
* Start fixing reads
* Fix all protocol stream wrappers
* Apply fixes from StyleCI
* Implement disconnection, and remove end function
* Working async RPC
* Implement async file upload
* Bugfix
* Method recall bugfixes
* Bugfixes
* Trait bugfixes
* Fix FIFO buffer
* Bugfixes and speedtests
* Async logging
* Implement websocket streams
* Implement loop API, signal API, clean closing and start changing layer
* Small magna, websocket and HTTP fixes
* Clean up loop API
* Improved stack traces, 2FA and async
* Login fixes
* Added instructions for manual verification
* Small fixes
* More app info improvements
* More app info improvements
* TL and 2FA fixes
* Update to layer 89
* More bugfixes
* Implement broken media reporting
* Remove debug comments
* PHP 7.2 backwards compatibility
* Bugfixes
* Async key generation
* Some simplifications
* Transport fixes
* Cleanup
* async API
* Performance fixes
* Fixes to async API
* Bugfixes
* Implement one-time async loop
* Authorization and logging fixes
* Update to layer 91
* 7to5 fix
* Null coalesce conversion
* Implement socks5 proxy
* Implement HTTP proxy
* Fixes to HTTP proxy
* MTProxy and socks5 fixes
* Disable PHP 5 conversion
* Proxies have higher priority
* Avoid error handling in vendor
* Override composer dependencies
* Fix travis build
* Final composer fixes
* Proxy logic fixes
* Fix get_updates update handling
* Do not use parallel file driver if not supported
* Refactor loader and implement HTTP fixes
* Suppress errors in loader
* HTTP and authorization fixes
* HTTP fixes
* Improved peer management
* Use HTTP protocol on altervista
* Small bugfixes
* Minor fixes
* Docufix
* Docufix
* Legacy fixes
* Fix message queue
* Avoid updating if using MTProxy
* Improve logs and examples
* Trim final newlines while converting parse mode
* Reimplement noResponse flag
* Async combined event handler and APIFactory fixes
* Actually return config
* Case-insensitive methods
* Bugfix
* Apply fixes from StyleCI (#545)
* MTProxy fixes
* PHP 5 warning
* Improved PHP 5 warning
* Use <br> along with newlines in web logs
* Update docs
2018-12-26 20:51:14 +01:00
|
|
|
* @license https://opensource.org/licenses/AGPL-3.0 AGPLv3
|
|
|
|
*
|
2019-10-31 15:07:35 +01:00
|
|
|
* @link https://docs.madelineproto.xyz MadelineProto documentation
|
Merge alpha into master (async, huge bugfixes and more) (#546)
* Implement async and lots of bugfixes
* Implement more async
* Implement async, implement bugfixes for the connection module, for the datacenter module, huge bugfixes, huge perfomance improvements, media DCs for https, advanced selecting, custom var_dump, totally rewritten IOLoop and response mechanism, promises, improvements to the TL parser, custom mb_substr
* Apply fixes from StyleCI
* Bugfixes
* Apply fixes from StyleCI
* Bugfixes, implement combined promises
* Apply fixes from StyleCI
* Support passing method arguments as callable
* Starting to write async upload logic
* Apply fixes from StyleCI
* Start implementing async file upload
* Apply fixes from StyleCI
* bugfix
* Apply fixes from StyleCI
* Start rewriting connection module
* Add PHP file docblocks for all classes
* Start working on new async stream API
* Finish writing stream API
* More stream API fixes
* Apply fixes from StyleCI
* Rewrite DataCenter and Connection modules
* Clean up stream API documentation
* Fixes
* Apply fixes from StyleCI
* Add referenced parameter to get length of buffer to read in getReadBuffer API
* Moved all MessageHandler code in the Connection module, added a PHP version warning in the phar
* Start fixing reads
* Fix all protocol stream wrappers
* Apply fixes from StyleCI
* Implement disconnection, and remove end function
* Working async RPC
* Implement async file upload
* Bugfix
* Method recall bugfixes
* Bugfixes
* Trait bugfixes
* Fix FIFO buffer
* Bugfixes and speedtests
* Async logging
* Implement websocket streams
* Implement loop API, signal API, clean closing and start changing layer
* Small magna, websocket and HTTP fixes
* Clean up loop API
* Improved stack traces, 2FA and async
* Login fixes
* Added instructions for manual verification
* Small fixes
* More app info improvements
* More app info improvements
* TL and 2FA fixes
* Update to layer 89
* More bugfixes
* Implement broken media reporting
* Remove debug comments
* PHP 7.2 backwards compatibility
* Bugfixes
* Async key generation
* Some simplifications
* Transport fixes
* Cleanup
* async API
* Performance fixes
* Fixes to async API
* Bugfixes
* Implement one-time async loop
* Authorization and logging fixes
* Update to layer 91
* 7to5 fix
* Null coalesce conversion
* Implement socks5 proxy
* Implement HTTP proxy
* Fixes to HTTP proxy
* MTProxy and socks5 fixes
* Disable PHP 5 conversion
* Proxies have higher priority
* Avoid error handling in vendor
* Override composer dependencies
* Fix travis build
* Final composer fixes
* Proxy logic fixes
* Fix get_updates update handling
* Do not use parallel file driver if not supported
* Refactor loader and implement HTTP fixes
* Suppress errors in loader
* HTTP and authorization fixes
* HTTP fixes
* Improved peer management
* Use HTTP protocol on altervista
* Small bugfixes
* Minor fixes
* Docufix
* Docufix
* Legacy fixes
* Fix message queue
* Avoid updating if using MTProxy
* Improve logs and examples
* Trim final newlines while converting parse mode
* Reimplement noResponse flag
* Async combined event handler and APIFactory fixes
* Actually return config
* Case-insensitive methods
* Bugfix
* Apply fixes from StyleCI (#545)
* MTProxy fixes
* PHP 5 warning
* Improved PHP 5 warning
* Use <br> along with newlines in web logs
* Update docs
2018-12-26 20:51:14 +01:00
|
|
|
*/
|
2018-02-25 17:50:03 +01:00
|
|
|
|
2016-08-07 23:23:10 +02:00
|
|
|
namespace danog\MadelineProto;
|
2016-08-08 18:10:28 +02:00
|
|
|
|
2020-02-05 18:41:37 +01:00
|
|
|
if (!\defined('MADELINEPROTO_TEST')) {
|
|
|
|
\define('MADELINEPROTO_TEST', 'NOT PONY');
|
|
|
|
}
|
|
|
|
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
|
|
|
* Main API wrapper for MadelineProto.
|
|
|
|
*/
|
2019-09-18 20:46:20 +02:00
|
|
|
class API extends InternalDoc
|
2016-08-07 23:23:30 +02:00
|
|
|
{
|
2017-05-16 15:12:04 +02:00
|
|
|
use \danog\Serializable;
|
2020-02-25 18:02:32 +01:00
|
|
|
use \danog\MadelineProto\ApiWrappers\Start;
|
|
|
|
use \danog\MadelineProto\ApiWrappers\Templates;
|
|
|
|
/**
|
|
|
|
* Session path.
|
|
|
|
*
|
|
|
|
* @internal
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
public string $session = '';
|
|
|
|
|
2019-09-14 14:21:11 +02:00
|
|
|
/**
|
2019-09-14 15:39:42 +02:00
|
|
|
* Instance of MadelineProto.
|
2019-09-14 14:21:11 +02:00
|
|
|
*
|
2020-02-25 18:02:32 +01:00
|
|
|
* @var ?MTProto
|
2019-09-14 14:21:11 +02:00
|
|
|
*/
|
2018-03-11 18:36:32 +01:00
|
|
|
public $API;
|
2020-02-25 18:02:32 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Storage for externally set properties to be serialized.
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
protected array $storage = [];
|
|
|
|
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
|
|
|
* Whether we're getting our API ID.
|
|
|
|
*
|
|
|
|
* @internal
|
|
|
|
*
|
|
|
|
* @var boolean
|
|
|
|
*/
|
2020-02-25 18:02:32 +01:00
|
|
|
private bool $gettingApiId = false;
|
|
|
|
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
|
|
|
* my.telegram.org API wrapper.
|
|
|
|
*
|
|
|
|
* @internal
|
|
|
|
*
|
2020-02-25 18:02:32 +01:00
|
|
|
* @var ?MyTelegramOrgWrapper
|
2019-12-28 17:34:04 +01:00
|
|
|
*/
|
2020-02-25 18:02:32 +01:00
|
|
|
private $myTelegramOrgWrapper;
|
|
|
|
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
2020-02-25 18:02:32 +01:00
|
|
|
* Whether this is an old instance.
|
2019-12-28 17:34:04 +01:00
|
|
|
*
|
2020-02-25 18:02:32 +01:00
|
|
|
* @var boolean
|
2019-12-28 17:34:04 +01:00
|
|
|
*/
|
2020-02-25 18:02:32 +01:00
|
|
|
private bool $oldInstance = false;
|
|
|
|
/**
|
|
|
|
* Whether we're destructing.
|
|
|
|
*
|
|
|
|
* @var boolean
|
|
|
|
*/
|
|
|
|
private bool $destructing = false;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* API wrapper (to avoid circular references).
|
|
|
|
*
|
|
|
|
* @var APIWrapper
|
|
|
|
*/
|
|
|
|
private $wrapper;
|
|
|
|
|
|
|
|
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
|
|
|
* Magic constructor function.
|
|
|
|
*
|
2020-02-25 18:02:32 +01:00
|
|
|
* @param string $session Session name
|
|
|
|
* @param array $settings Settings
|
2019-12-28 17:34:04 +01:00
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
2020-02-25 18:02:32 +01:00
|
|
|
public function __magic_construct(string $session, array $settings = []): void
|
2016-08-07 23:23:30 +02:00
|
|
|
{
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->wrapper = new APIWrapper($this, $this->exportNamespace());
|
|
|
|
|
2019-10-29 21:33:23 +01:00
|
|
|
Magic::classExists();
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->setInitPromise($this->__construct_async($session, $settings));
|
|
|
|
foreach (\get_class_vars(APIFactory::class) as $key => $var) {
|
|
|
|
if (\in_array($key, ['namespace', 'API', 'lua', 'async', 'asyncAPIPromise', 'methods'])) {
|
2019-06-08 13:29:54 +02:00
|
|
|
continue;
|
|
|
|
}
|
2020-02-25 18:02:32 +01:00
|
|
|
if (!$this->{$key}) {
|
|
|
|
$this->{$key} = $this->exportNamespace($key);
|
2019-06-08 13:29:54 +02:00
|
|
|
}
|
|
|
|
}
|
2019-05-22 17:35:16 +02:00
|
|
|
}
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
|
|
|
* Async constructor function.
|
|
|
|
*
|
2020-02-25 18:02:32 +01:00
|
|
|
* @param string $session Session name
|
|
|
|
* @param array $settings Settings
|
2019-12-28 17:34:04 +01:00
|
|
|
*
|
|
|
|
* @return \Generator
|
|
|
|
*/
|
2020-02-25 18:02:32 +01:00
|
|
|
public function __construct_async(string $session, array $settings = []): \Generator
|
2019-05-22 17:35:16 +02:00
|
|
|
{
|
2020-02-25 18:02:32 +01:00
|
|
|
Logger::constructorFromSettings($settings);
|
|
|
|
$session = Absolute::absolute($session);
|
|
|
|
if ($unserialized = yield from Serialization::legacyUnserialize($session)) {
|
|
|
|
$unserialized->storage = $unserialized->storage ?? [];
|
|
|
|
$unserialized->session = $session;
|
|
|
|
APIWrapper::link($this, $unserialized);
|
|
|
|
APIWrapper::link($this->wrapper, $this);
|
|
|
|
if (isset($this->API)) {
|
|
|
|
$this->storage = $this->API->storage ?? $this->storage;
|
|
|
|
|
|
|
|
unset($unserialized);
|
|
|
|
|
|
|
|
yield from $this->API->initAsynchronously();
|
|
|
|
$this->APIFactory();
|
|
|
|
$this->logger->logger(Lang::$current_lang['madelineproto_ready'], Logger::NOTICE);
|
|
|
|
return;
|
2017-11-08 13:04:40 +01:00
|
|
|
}
|
2017-11-03 13:02:01 +01:00
|
|
|
}
|
2020-02-25 18:02:32 +01:00
|
|
|
|
|
|
|
if (!isset($settings['app_info']['api_id']) || !$settings['app_info']['api_id']) {
|
|
|
|
$app = (yield from $this->APIStart($settings));
|
|
|
|
if (!$app) {
|
|
|
|
$this->forceInit(true);
|
|
|
|
die();
|
|
|
|
}
|
|
|
|
$settings['app_info']['api_id'] = $app['api_id'];
|
|
|
|
$settings['app_info']['api_hash'] = $app['api_hash'];
|
2018-03-22 20:50:57 +01:00
|
|
|
}
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->API = new MTProto($settings);
|
2020-01-31 19:49:58 +01:00
|
|
|
yield from $this->API->initAsynchronously();
|
2019-05-22 17:35:16 +02:00
|
|
|
$this->APIFactory();
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->logger->logger(Lang::$current_lang['madelineproto_ready'], Logger::NOTICE);
|
Added documentation, simplified code, organized exceptions, added some more examples in testing.php, decided to unset flags in deserialized responses, moved message id arrays to Connection classes, added wrappers for logging in to telegram as a bot or as a user and for logging out, fixed deserializing of gzip packed objects, added more logging, fixed bugs, added methods to get and parse configuration, saved some fairies, fixed exporting/importing of authorization, added some wakeup methods to prevent problems during serialization, added support for ipv6 and automagical detection too. I think we can safely say this is now a beta.
2016-11-25 00:15:22 +01:00
|
|
|
}
|
2020-02-25 18:02:32 +01:00
|
|
|
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
|
|
|
* Destruct function.
|
|
|
|
*
|
|
|
|
* @internal
|
|
|
|
*/
|
2017-04-21 13:14:21 +02:00
|
|
|
public function __destruct()
|
|
|
|
{
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->init();
|
2019-06-13 14:43:30 +02:00
|
|
|
if (!$this->oldInstance) {
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->logger('Shutting down MadelineProto (API)');
|
2019-06-08 21:01:57 +02:00
|
|
|
if ($this->API) {
|
|
|
|
$this->API->destructing = true;
|
|
|
|
}
|
|
|
|
$this->destructing = true;
|
2020-02-25 18:02:32 +01:00
|
|
|
Tools::wait($this->wrapper->serialize(), true);
|
|
|
|
$this->API->unreference();
|
|
|
|
} else {
|
|
|
|
$this->logger('Shutting down MadelineProto (old deserialized instance of API)');
|
2019-06-07 18:33:06 +02:00
|
|
|
}
|
2016-08-07 23:23:10 +02:00
|
|
|
}
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
2020-02-25 18:02:32 +01:00
|
|
|
* Wakeup function
|
2019-12-28 17:34:04 +01:00
|
|
|
*
|
2020-02-25 18:02:32 +01:00
|
|
|
* @return void
|
2019-12-28 17:34:04 +01:00
|
|
|
*/
|
2020-02-25 18:02:32 +01:00
|
|
|
public function __wakeup(): void
|
2017-04-21 13:14:21 +02:00
|
|
|
{
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->oldInstance = true;
|
2017-04-21 13:14:21 +02:00
|
|
|
}
|
2019-12-28 17:34:04 +01:00
|
|
|
/**
|
|
|
|
* Init API wrapper.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
private function APIFactory(): void
|
2016-12-24 17:20:45 +01:00
|
|
|
{
|
2020-02-25 18:02:32 +01:00
|
|
|
if ($this->API && $this->API->inited()) {
|
2019-10-29 21:33:23 +01:00
|
|
|
foreach ($this->API->getMethodNamespaces() as $namespace) {
|
2020-02-25 18:02:32 +01:00
|
|
|
if (!$this->{$namespace}) {
|
|
|
|
$this->{$namespace} = $this->exportNamespace($namespace);
|
Merge alpha into master (async, huge bugfixes and more) (#546)
* Implement async and lots of bugfixes
* Implement more async
* Implement async, implement bugfixes for the connection module, for the datacenter module, huge bugfixes, huge perfomance improvements, media DCs for https, advanced selecting, custom var_dump, totally rewritten IOLoop and response mechanism, promises, improvements to the TL parser, custom mb_substr
* Apply fixes from StyleCI
* Bugfixes
* Apply fixes from StyleCI
* Bugfixes, implement combined promises
* Apply fixes from StyleCI
* Support passing method arguments as callable
* Starting to write async upload logic
* Apply fixes from StyleCI
* Start implementing async file upload
* Apply fixes from StyleCI
* bugfix
* Apply fixes from StyleCI
* Start rewriting connection module
* Add PHP file docblocks for all classes
* Start working on new async stream API
* Finish writing stream API
* More stream API fixes
* Apply fixes from StyleCI
* Rewrite DataCenter and Connection modules
* Clean up stream API documentation
* Fixes
* Apply fixes from StyleCI
* Add referenced parameter to get length of buffer to read in getReadBuffer API
* Moved all MessageHandler code in the Connection module, added a PHP version warning in the phar
* Start fixing reads
* Fix all protocol stream wrappers
* Apply fixes from StyleCI
* Implement disconnection, and remove end function
* Working async RPC
* Implement async file upload
* Bugfix
* Method recall bugfixes
* Bugfixes
* Trait bugfixes
* Fix FIFO buffer
* Bugfixes and speedtests
* Async logging
* Implement websocket streams
* Implement loop API, signal API, clean closing and start changing layer
* Small magna, websocket and HTTP fixes
* Clean up loop API
* Improved stack traces, 2FA and async
* Login fixes
* Added instructions for manual verification
* Small fixes
* More app info improvements
* More app info improvements
* TL and 2FA fixes
* Update to layer 89
* More bugfixes
* Implement broken media reporting
* Remove debug comments
* PHP 7.2 backwards compatibility
* Bugfixes
* Async key generation
* Some simplifications
* Transport fixes
* Cleanup
* async API
* Performance fixes
* Fixes to async API
* Bugfixes
* Implement one-time async loop
* Authorization and logging fixes
* Update to layer 91
* 7to5 fix
* Null coalesce conversion
* Implement socks5 proxy
* Implement HTTP proxy
* Fixes to HTTP proxy
* MTProxy and socks5 fixes
* Disable PHP 5 conversion
* Proxies have higher priority
* Avoid error handling in vendor
* Override composer dependencies
* Fix travis build
* Final composer fixes
* Proxy logic fixes
* Fix get_updates update handling
* Do not use parallel file driver if not supported
* Refactor loader and implement HTTP fixes
* Suppress errors in loader
* HTTP and authorization fixes
* HTTP fixes
* Improved peer management
* Use HTTP protocol on altervista
* Small bugfixes
* Minor fixes
* Docufix
* Docufix
* Legacy fixes
* Fix message queue
* Avoid updating if using MTProxy
* Improve logs and examples
* Trim final newlines while converting parse mode
* Reimplement noResponse flag
* Async combined event handler and APIFactory fixes
* Actually return config
* Case-insensitive methods
* Bugfix
* Apply fixes from StyleCI (#545)
* MTProxy fixes
* PHP 5 warning
* Improved PHP 5 warning
* Use <br> along with newlines in web logs
* Update docs
2018-12-26 20:51:14 +01:00
|
|
|
}
|
|
|
|
}
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->methods = self::getInternalMethodList($this->API);
|
|
|
|
$this->API->wrapper = $this->wrapper;
|
|
|
|
if ($this->API->event_handler && \class_exists($this->API->event_handler) && \is_subclass_of($this->API->event_handler, EventHandler::class)) {
|
Merge alpha into master (async, huge bugfixes and more) (#546)
* Implement async and lots of bugfixes
* Implement more async
* Implement async, implement bugfixes for the connection module, for the datacenter module, huge bugfixes, huge perfomance improvements, media DCs for https, advanced selecting, custom var_dump, totally rewritten IOLoop and response mechanism, promises, improvements to the TL parser, custom mb_substr
* Apply fixes from StyleCI
* Bugfixes
* Apply fixes from StyleCI
* Bugfixes, implement combined promises
* Apply fixes from StyleCI
* Support passing method arguments as callable
* Starting to write async upload logic
* Apply fixes from StyleCI
* Start implementing async file upload
* Apply fixes from StyleCI
* bugfix
* Apply fixes from StyleCI
* Start rewriting connection module
* Add PHP file docblocks for all classes
* Start working on new async stream API
* Finish writing stream API
* More stream API fixes
* Apply fixes from StyleCI
* Rewrite DataCenter and Connection modules
* Clean up stream API documentation
* Fixes
* Apply fixes from StyleCI
* Add referenced parameter to get length of buffer to read in getReadBuffer API
* Moved all MessageHandler code in the Connection module, added a PHP version warning in the phar
* Start fixing reads
* Fix all protocol stream wrappers
* Apply fixes from StyleCI
* Implement disconnection, and remove end function
* Working async RPC
* Implement async file upload
* Bugfix
* Method recall bugfixes
* Bugfixes
* Trait bugfixes
* Fix FIFO buffer
* Bugfixes and speedtests
* Async logging
* Implement websocket streams
* Implement loop API, signal API, clean closing and start changing layer
* Small magna, websocket and HTTP fixes
* Clean up loop API
* Improved stack traces, 2FA and async
* Login fixes
* Added instructions for manual verification
* Small fixes
* More app info improvements
* More app info improvements
* TL and 2FA fixes
* Update to layer 89
* More bugfixes
* Implement broken media reporting
* Remove debug comments
* PHP 7.2 backwards compatibility
* Bugfixes
* Async key generation
* Some simplifications
* Transport fixes
* Cleanup
* async API
* Performance fixes
* Fixes to async API
* Bugfixes
* Implement one-time async loop
* Authorization and logging fixes
* Update to layer 91
* 7to5 fix
* Null coalesce conversion
* Implement socks5 proxy
* Implement HTTP proxy
* Fixes to HTTP proxy
* MTProxy and socks5 fixes
* Disable PHP 5 conversion
* Proxies have higher priority
* Avoid error handling in vendor
* Override composer dependencies
* Fix travis build
* Final composer fixes
* Proxy logic fixes
* Fix get_updates update handling
* Do not use parallel file driver if not supported
* Refactor loader and implement HTTP fixes
* Suppress errors in loader
* HTTP and authorization fixes
* HTTP fixes
* Improved peer management
* Use HTTP protocol on altervista
* Small bugfixes
* Minor fixes
* Docufix
* Docufix
* Legacy fixes
* Fix message queue
* Avoid updating if using MTProxy
* Improve logs and examples
* Trim final newlines while converting parse mode
* Reimplement noResponse flag
* Async combined event handler and APIFactory fixes
* Actually return config
* Case-insensitive methods
* Bugfix
* Apply fixes from StyleCI (#545)
* MTProxy fixes
* PHP 5 warning
* Improved PHP 5 warning
* Use <br> along with newlines in web logs
* Update docs
2018-12-26 20:51:14 +01:00
|
|
|
$this->API->setEventHandler($this->API->event_handler);
|
|
|
|
}
|
2016-12-24 17:20:45 +01:00
|
|
|
}
|
|
|
|
}
|
2020-02-25 18:02:32 +01:00
|
|
|
|
2020-02-23 19:28:42 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Start MadelineProto and the event handler (enables async).
|
|
|
|
*
|
|
|
|
* Also initializes error reporting, catching and reporting all errors surfacing from the event loop.
|
|
|
|
*
|
|
|
|
* @param string $eventHandler Event handler class name
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function startAndLoop(string $eventHandler): void
|
|
|
|
{
|
|
|
|
$this->async(true);
|
|
|
|
do {
|
|
|
|
$thrown = false;
|
|
|
|
try {
|
|
|
|
$this->loop(function () use ($eventHandler) {
|
|
|
|
yield $this->start();
|
|
|
|
yield $this->setEventHandler($eventHandler);
|
|
|
|
});
|
|
|
|
$this->loop();
|
|
|
|
} catch (\Throwable $e) {
|
|
|
|
$thrown = true;
|
2020-02-25 18:02:32 +01:00
|
|
|
$this->logger((string) $e, Logger::FATAL_ERROR);
|
2020-02-23 19:28:42 +01:00
|
|
|
try {
|
|
|
|
$this->report("Surfaced: $e");
|
|
|
|
} catch (\Throwable $e) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while ($thrown);
|
|
|
|
}
|
2018-02-25 17:50:03 +01:00
|
|
|
}
|