. * * @author Daniil Gentili * @copyright 2016-2023 Daniil Gentili * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * @link https://docs.madelineproto.xyz MadelineProto documentation */ namespace danog\MadelineProto; use danog\MadelineProto\Ipc\Client; final class APIWrapper { private MTProto|Client|null $API = null; private string $webApiTemplate = ''; /** * API wrapper. */ public function __construct( private SessionPaths $session, ) { } public function setSession(SessionPaths $session): void { $this->session = $session; } public function getWebApiTemplate(): string { return $this->webApiTemplate; } public function setWebApiTemplate(string $template): void { $this->webApiTemplate = $template; } public function logger(mixed $param, int $level = Logger::NOTICE, string $file = ''): void { ($this->API->logger ?? Logger::$default)->logger($param, $level, $file); } public function setAPI(Client|MTProto|null $API): void { $this->API?->unreference(); $this->API = $API; } /** * Sleep function. */ public function __sleep(): array { return ['API', 'webApiTemplate']; } /** * Get MTProto instance. */ public function getAPI(): Client|MTProto|null { return $this->API; } /** * Get IPC path. * * @internal */ public function getIpcPath(): string { return $this->session->getIpcPath(); } /** * Serialize session. */ public function serialize(): bool { if ($this->API === null) { return false; } if ($this->API instanceof Client) { return false; } $this->API->waitForInit(); $API = $this->API; if ($API->authorized === API::LOGGED_OUT) { return false; } $this->session->serialize( $API->serializeSession($this), $this->session->getSessionPath(), ); $this->session->storeLightState($API); if (!Magic::$suspendPeriodicLogging) { Logger::log('Saved session!'); } return true; } /** * Get session path. */ public function getSession(): SessionPaths { return $this->session; } }