Improved update signaling
This commit is contained in:
parent
9197c7013d
commit
060659dc92
@ -96,15 +96,7 @@ class FeedLoop extends ResumableSignalLoop
|
||||
yield $API->save_update_async($update);
|
||||
}
|
||||
$this->parsedUpdates = [];
|
||||
if ($API->update_deferred) {
|
||||
Loop::defer(function () use ($API) {
|
||||
if ($API->update_deferred) {
|
||||
$API->logger->logger("Resuming deferred in $this", Logger::VERBOSE);
|
||||
$API->update_deferred->resolve();
|
||||
$API->logger->logger("Done resuming deferred in $this", Logger::VERBOSE);
|
||||
}
|
||||
});
|
||||
}
|
||||
$this->API->signalUpdate();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -164,15 +164,7 @@ class UpdateLoop extends ResumableSignalLoop
|
||||
foreach ($result as $channelId => $boh) {
|
||||
$this->API->feeders[$channelId]->resumeDefer();
|
||||
}
|
||||
if ($API->update_deferred) {
|
||||
Loop::defer(function () use ($API) {
|
||||
if ($API->update_deferred) {
|
||||
$API->logger->logger("Resuming deferred in $this", Logger::VERBOSE);
|
||||
$API->update_deferred->resolve();
|
||||
$API->logger->logger("Done resuming deferred in $this", Logger::VERBOSE);
|
||||
}
|
||||
});
|
||||
}
|
||||
$this->API->signalUpdate();
|
||||
|
||||
if (yield $this->waitSignal($this->pause($timeout))) {
|
||||
$API->logger->logger("Exiting $this");
|
||||
|
@ -148,7 +148,6 @@ class MTProto extends AsyncConstruct implements TLCallback
|
||||
private $postpone_updates = false;
|
||||
private $supportUser = 0;
|
||||
public $referenceDatabase;
|
||||
public $update_deferred;
|
||||
public $phoneConfigWatcherId;
|
||||
public $feeders = [];
|
||||
public $updaters = [];
|
||||
|
@ -25,6 +25,7 @@ use Amp\Delayed;
|
||||
use function Amp\Promise\any;
|
||||
use danog\MadelineProto\Loop\Update\FeedLoop;
|
||||
use danog\MadelineProto\Loop\Update\UpdateLoop;
|
||||
use Amp\Loop;
|
||||
|
||||
/**
|
||||
* Manages updates.
|
||||
@ -80,7 +81,7 @@ trait UpdateHandler
|
||||
if (!$params['timeout']) {
|
||||
$params['timeout'] = 0.001;
|
||||
}
|
||||
yield any([$this->update_deferred->promise(), new Delayed($params['timeout'] * 1000)]);
|
||||
yield any([$this->waitUpdate(), new Delayed($params['timeout'] * 1000)]);
|
||||
}
|
||||
|
||||
if (empty($this->updates)) {
|
||||
@ -101,6 +102,30 @@ trait UpdateHandler
|
||||
|
||||
return $updates;
|
||||
}
|
||||
public $update_resolved = false;
|
||||
public $update_deferred;
|
||||
|
||||
public function waitUpdate()
|
||||
{
|
||||
if (!$this->update_deferred) {
|
||||
$this->update_deferred = new Deferred;
|
||||
}
|
||||
yield $this->update_deferred->promise();
|
||||
$this->update_resolved = false;
|
||||
$this->update_deferred = new Deferred;
|
||||
}
|
||||
public function signalUpdate()
|
||||
{
|
||||
if (!$this->update_deferred) {
|
||||
$this->update_deferred = new Deferred;
|
||||
}
|
||||
Loop::defer(function () {
|
||||
if (!$this->update_resolved) {
|
||||
$this->update_resolved = true;
|
||||
$this->update_deferred->resolve();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function check_msg_id($message)
|
||||
{
|
||||
|
@ -123,8 +123,7 @@ trait Loop
|
||||
$controller->discard();
|
||||
}
|
||||
});
|
||||
$this->update_deferred = new Deferred();
|
||||
yield $this->update_deferred->promise();
|
||||
yield $this->waitUpdate();
|
||||
}
|
||||
}
|
||||
public function closeConnection($message = 'OK!')
|
||||
|
Loading…
Reference in New Issue
Block a user