. * * @author Daniil Gentili * @copyright 2016-2019 Daniil Gentili * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * * @link https://docs.madelineproto.xyz MadelineProto documentation */ namespace danog\MadelineProto\MTProtoTools; use Amp\Promise; /** * Manages method and object calls. */ trait CallHandler { /** * Synchronous wrapper for methodCall. * * @param string $method Method name * @param array $args Arguments * @param array $aargs Additional arguments * * @return array */ public function methodCall(string $method, $args = [], array $aargs = ['msg_id' => null]) { return $this->wait($this->methodCallAsyncRead($method, $args, $aargs)); } /** * Call method and wait asynchronously for response. * * If the $aargs['noResponse'] is true, will not wait for a response. * * @param string $method Method name * @param array $args Arguments * @param array $aargs Additional arguments * * @return Promise */ public function methodCallAsyncRead(string $method, $args = [], array $aargs = ['msg_id' => null]): Promise { return $this->datacenter->getConnection($aargs['datacenter'] ?? $this->datacenter->curdc)->methodCallAsyncRead($method, $args, $aargs); } /** * Call method and make sure it is asynchronously sent. * * @param string $method Method name * @param array $args Arguments * @param array $aargs Additional arguments * * @return Promise */ public function methodCallAsyncWrite(string $method, $args = [], array $aargs = ['msg_id' => null]): Promise { return $this->datacenter->getConnection($aargs['datacenter'] ?? $this->datacenter->curdc)->methodCallAsyncWrite($method, $args, $aargs); } }