Simpler async API
This commit is contained in:
parent
d44e35f514
commit
bdd04ff7b3
@ -18,8 +18,6 @@
|
||||
|
||||
namespace danog\MadelineProto\Async;
|
||||
|
||||
use Amp\Success;
|
||||
|
||||
/**
|
||||
* Async parameters class.
|
||||
*
|
||||
@ -53,17 +51,9 @@ class AsyncParameters extends Parameters
|
||||
return $this->refetchable;
|
||||
}
|
||||
|
||||
public function getParameters(): \Generator
|
||||
public function getParameters()
|
||||
{
|
||||
$callable = $this->callable;
|
||||
$params = $callable();
|
||||
|
||||
if ($params instanceof \Generator) {
|
||||
$params = yield coroutine($params);
|
||||
} else {
|
||||
$params = yield new Success($params);
|
||||
}
|
||||
|
||||
return $params;
|
||||
return yield $callable();
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,6 @@
|
||||
namespace danog\MadelineProto\Async;
|
||||
|
||||
use Amp\Promise;
|
||||
use function Amp\call;
|
||||
|
||||
/**
|
||||
* Parameters module.
|
||||
@ -37,23 +36,13 @@ abstract class Parameters
|
||||
*
|
||||
* @return Promise
|
||||
*/
|
||||
public function fetchParameters(): Promise
|
||||
{
|
||||
return call([$this, 'fetchParametersAsync']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch parameters asynchronously.
|
||||
*
|
||||
* @return \Generator
|
||||
*/
|
||||
public function fetchParametersAsync(): \Generator
|
||||
public function fetchParameters()
|
||||
{
|
||||
$refetchable = $this->isRefetchable();
|
||||
if ($this->params && !$refetchable) {
|
||||
return $this->params;
|
||||
}
|
||||
$params = yield call([$this, 'getParameters']);
|
||||
$params = yield $this->getParameters();
|
||||
|
||||
if (!$refetchable) {
|
||||
$this->params = $params;
|
||||
@ -74,5 +63,5 @@ abstract class Parameters
|
||||
*
|
||||
* @return \Generator
|
||||
*/
|
||||
abstract public function getParameters(): \Generator;
|
||||
abstract public function getParameters();
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ namespace danog\MadelineProto\Loop\Connection;
|
||||
use Amp\Deferred;
|
||||
use danog\MadelineProto\Logger;
|
||||
use danog\MadelineProto\Loop\Impl\ResumableSignalLoop;
|
||||
use function Amp\call;
|
||||
|
||||
/**
|
||||
* RPC call status check loop.
|
||||
@ -30,7 +29,7 @@ use function Amp\call;
|
||||
*/
|
||||
class CheckLoop extends ResumableSignalLoop
|
||||
{
|
||||
public function loop(): \Generator
|
||||
public function loop()
|
||||
{
|
||||
$API = $this->API;
|
||||
$datacenter = $this->datacenter;
|
||||
|
@ -31,7 +31,7 @@ use danog\MadelineProto\Stream\MTProtoTransport\HttpStream;
|
||||
*/
|
||||
class HttpWaitLoop extends ResumableSignalLoop
|
||||
{
|
||||
public function loop(): \Generator
|
||||
public function loop()
|
||||
{
|
||||
$API = $this->API;
|
||||
$datacenter = $this->datacenter;
|
||||
|
@ -26,7 +26,6 @@ use danog\MadelineProto\Loop\Impl\SignalLoop;
|
||||
use danog\MadelineProto\MTProtoTools\Crypt;
|
||||
use danog\MadelineProto\NothingInTheSocketException;
|
||||
use danog\MadelineProto\Tools;
|
||||
use function Amp\call;
|
||||
|
||||
/**
|
||||
* Socket read loop.
|
||||
@ -38,7 +37,7 @@ class ReadLoop extends SignalLoop
|
||||
use Tools;
|
||||
use Crypt;
|
||||
|
||||
public function loop(): \Generator
|
||||
public function loop()
|
||||
{
|
||||
$API = $this->API;
|
||||
$datacenter = $this->datacenter;
|
||||
@ -46,7 +45,7 @@ class ReadLoop extends SignalLoop
|
||||
|
||||
$this->startedLoop();
|
||||
$API->logger->logger("Entered read loop in DC {$datacenter}", Logger::ULTRA_VERBOSE);
|
||||
$timeout = $API->settings['connection_settings'][isset($API->settings['connection_settings'][$datacenter]) ? $datacenter : 'all']['timeout'];
|
||||
//$timeout = $API->settings['connection_settings'][isset($API->settings['connection_settings'][$datacenter]) ? $datacenter : 'all']['timeout'];
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
@ -110,12 +109,7 @@ class ReadLoop extends SignalLoop
|
||||
}
|
||||
}
|
||||
|
||||
public function readMessage(): Promise
|
||||
{
|
||||
return call([$this, 'readMessageAsync']);
|
||||
}
|
||||
|
||||
public function readMessageAsync(): \Generator
|
||||
public function readMessage()
|
||||
{
|
||||
$API = $this->API;
|
||||
$datacenter = $this->datacenter;
|
||||
|
@ -31,7 +31,7 @@ class UpdateLoop extends ResumableSignalLoop
|
||||
{
|
||||
use \danog\MadelineProto\Tools;
|
||||
|
||||
public function loop(): \Generator
|
||||
public function loop()
|
||||
{
|
||||
$API = $this->API;
|
||||
$datacenter = $this->datacenter;
|
||||
@ -57,7 +57,7 @@ class UpdateLoop extends ResumableSignalLoop
|
||||
}
|
||||
}
|
||||
if (time() - $API->last_getdifference > $timeout) {
|
||||
if (!yield $this->call($API->get_updates_difference_async())) {
|
||||
if (!yield $API->get_updates_difference_async()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ class WriteLoop extends ResumableSignalLoop
|
||||
}
|
||||
}
|
||||
|
||||
public function unencryptedWriteLoopAsync(): \Generator
|
||||
public function unencryptedWriteLoopAsync()
|
||||
{
|
||||
$API = $this->API;
|
||||
$datacenter = $this->datacenter;
|
||||
|
@ -64,9 +64,10 @@ abstract class ResumableSignalLoop extends SignalLoop implements ResumableLoopIn
|
||||
return;
|
||||
}
|
||||
}
|
||||
/*
|
||||
if ($expected) {
|
||||
//var_dump("=======", "resume $watcherId ".get_class($this)." DC {$this->datacenter} diff ".(microtime(true) - $expected).": expected $expected, actual ".microtime(true));
|
||||
}
|
||||
}*/
|
||||
if ($this->resume) {
|
||||
$resume = $this->resume;
|
||||
$this->resume = null;
|
||||
|
@ -37,5 +37,5 @@ interface LoopInterface
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function loop(): \Generator;
|
||||
public function loop();
|
||||
}
|
||||
|
@ -25,7 +25,6 @@ use Amp\Success;
|
||||
use danog\MadelineProto\Exception;
|
||||
use danog\MadelineProto\TL\TLCallback;
|
||||
use danog\MadelineProto\Tools;
|
||||
use function Amp\call;
|
||||
|
||||
/**
|
||||
* Manages upload and download of files.
|
||||
@ -460,19 +459,14 @@ class ReferenceDatabase implements TLCallback
|
||||
return $this->refreshReferenceInternal($this->serializeLocation($locationType, $location));
|
||||
}
|
||||
|
||||
public function refreshReferenceInternal(string $location): Promise
|
||||
public function refreshReferenceInternal(string $location)
|
||||
{
|
||||
if (isset($this->refreshed[$location])) {
|
||||
$this->API->logger->logger('Reference already refreshed!', \danog\MadelineProto\Logger::VERBOSE);
|
||||
|
||||
return new Success($this->db[$location]['reference']);
|
||||
return $this->db[$location]['reference'];
|
||||
}
|
||||
|
||||
return call([$this, 'refreshReferenceInternalGenerator'], $location);
|
||||
}
|
||||
|
||||
public function refreshReferenceInternalGenerator(string $location): \Generator
|
||||
{
|
||||
ksort($this->db[$location]['origins']);
|
||||
$count = 0;
|
||||
|
||||
@ -497,7 +491,6 @@ class ReferenceDatabase implements TLCallback
|
||||
$this->API->full_chats[$origin['peer']]['last_update'] = 0;
|
||||
}
|
||||
$this->API->get_full_info($origin['peer']);
|
||||
yield new Success(0);
|
||||
break;
|
||||
// Peer (default photo ID)
|
||||
case self::USER_PHOTO_ORIGIN:
|
||||
@ -546,14 +539,14 @@ class ReferenceDatabase implements TLCallback
|
||||
return $deferred->promise();
|
||||
}
|
||||
|
||||
public function getReference(int $locationType, array $location): Promise
|
||||
public function getReference(int $locationType, array $location)
|
||||
{
|
||||
$locationString = $this->serializeLocation($locationType, $location);
|
||||
if (!isset($this->db[$locationString]['reference'])) {
|
||||
if (isset($location['file_reference'])) {
|
||||
$this->API->logger->logger("Using outdated file reference for location of type $locationType object {$location['_']}", \danog\MadelineProto\Logger::ULTRA_VERBOSE);
|
||||
|
||||
return new Success($location['file_reference']);
|
||||
return $location['file_reference'];
|
||||
}
|
||||
|
||||
throw new \danog\MadelineProto\Exception("Could not find file reference for location of type $locationType object {$location['_']}");
|
||||
@ -564,7 +557,7 @@ class ReferenceDatabase implements TLCallback
|
||||
return $this->refreshReferenceInternal($locationString);
|
||||
}
|
||||
|
||||
return new Success($this->db[$locationString]['reference']);
|
||||
return $this->db[$locationString]['reference'];
|
||||
}
|
||||
|
||||
private function serializeLocation(int $locationType, array $location)
|
||||
|
Loading…
x
Reference in New Issue
Block a user