diff --git a/src/danog/MadelineProto/Logger.php b/src/danog/MadelineProto/Logger.php index a19d95d1..54dda793 100644 --- a/src/danog/MadelineProto/Logger.php +++ b/src/danog/MadelineProto/Logger.php @@ -105,7 +105,7 @@ class Logger self::$BIG_ENDIAN = (pack('L', 1) === pack('N', 1)); self::$bigint = PHP_INT_SIZE < 8; - preg_match('/const V = (\d+);/', file_get_contents('https://raw.githubusercontent.com/danog/MadelineProto/master/src/danog/MadelineProto/MTProto.php'), $matches); + preg_match('/const V = (\d+);/', @file_get_contents('https://raw.githubusercontent.com/danog/MadelineProto/master/src/danog/MadelineProto/MTProto.php'), $matches); if (isset($matches[1]) && \danog\MadelineProto\MTProto::V < (int) $matches[1]) { throw new \danog\MadelineProto\Exception(hex2bin(\danog\MadelineProto\Lang::$current_lang['v_error']), 0, null, 'MadelineProto', 1); diff --git a/src/danog/MadelineProto/MTProto.php b/src/danog/MadelineProto/MTProto.php index 260c1c3f..16fc4ba1 100644 --- a/src/danog/MadelineProto/MTProto.php +++ b/src/danog/MadelineProto/MTProto.php @@ -190,6 +190,8 @@ class MTProto public $setdem = false; public $storage = []; private $emojis; + private $postpone_updates = false; + public function ___construct($settings = []) { @@ -295,7 +297,7 @@ class MTProto } // Detect ipv6 $this->ipv6 = (bool) strlen(@file_get_contents('http://ipv6.test-ipv6.com/', false, stream_context_create(['http' => ['timeout' => 1]]))) > 0; - preg_match('/const V = (\d+);/', file_get_contents('https://raw.githubusercontent.com/danog/MadelineProto/master/src/danog/MadelineProto/MTProto.php'), $matches); + preg_match('/const V = (\d+);/', @file_get_contents('https://raw.githubusercontent.com/danog/MadelineProto/master/src/danog/MadelineProto/MTProto.php'), $matches); $keys = array_keys((array) get_object_vars($this)); if (count($keys) !== count(array_unique($keys))) { throw new Bug74586Exception(); @@ -714,6 +716,7 @@ class MTProto public function sync_authorization($authorized_dc) { $this->updates_state['sync_loading'] = true; + $this->postpone_updates = true; try { foreach ($this->datacenter->sockets as $new_dc => $socket) { @@ -733,6 +736,7 @@ class MTProto $authorization = $this->method_call('auth.importAuthorization', $exported_authorization, ['datacenter' => $new_dc]); } } finally { + $this->postpone_updates = false; $this->updates_state['sync_loading'] = false; } diff --git a/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php b/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php index 03f85d00..199e4832 100644 --- a/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php +++ b/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php @@ -354,7 +354,7 @@ trait ResponseHandler public function handle_pending_updates() { - if ($this->updates_state['sync_loading']) { + if ($this->postpone_updates) { return false; } if (count($this->pending_updates)) { @@ -370,14 +370,13 @@ trait ResponseHandler { if (!$this->settings['updates']['handle_updates']) { return; - }/* - if ($this->updates_state["sync_loading"]) { - \danog\MadelineProto\Logger::log(['Getting state, handle later'], \danog\MadelineProto\Logger::VERBOSE); - var_dump($updates); + } + if ($this->postpone_updates) { + \danog\MadelineProto\Logger::log(['Postpone update handling'], \danog\MadelineProto\Logger::VERBOSE); $this->pending_updates[] = $updates; - return false; - }*/ + } + $this->handle_pending_updates(); \danog\MadelineProto\Logger::log(['Parsing updates received via the socket...'], \danog\MadelineProto\Logger::VERBOSE); $opts = []; foreach (['date', 'seq', 'seq_start'] as $key) { diff --git a/src/danog/MadelineProto/Wrappers/DialogHandler.php b/src/danog/MadelineProto/Wrappers/DialogHandler.php index a407856c..eca0de57 100644 --- a/src/danog/MadelineProto/Wrappers/DialogHandler.php +++ b/src/danog/MadelineProto/Wrappers/DialogHandler.php @@ -29,6 +29,7 @@ trait DialogHandler $datacenter = $this->datacenter->curdc; $peers = []; + $this->postpone_updates = true; try { while ($this->dialog_params['count'] < $res['count']) { \danog\MadelineProto\Logger::log([\danog\MadelineProto\Lang::$current_lang['getting_dialogs']]); @@ -47,6 +48,7 @@ trait DialogHandler } } } finally { + $this->postpone_updates = false; $this->updates_state['sync_loading'] = false; }