/** * Handles query invocation * @return mixed */ public function __invoke() { $result = call_user_func_array([$this, 'invoke'], func_get_args()); $e = new observr\Event($this, ['result' => &$result]); if (!isset($this->stream)) { throw new xral\Exception('No resource specified'); } if ($this->stream->isWrite()) { $this->attach(self::COMPLETE, function () use($result, $e) { if ($this->hasObservers(self::SAVE)) { $this->setState(self::SAVE, new observr\Event($this, ['result' => $e['result']])); $this->clearState(self::SAVE); } }); } $this->setState(self::COMPLETE, $e); if (!$e->canceled) { $result = $e['result']; } if ($this->stream->isOpen()) { $this->stream->close(); } return $result; }