JsonFormatter::class, self::XML => XmlFormatter::class, self::HTML => HtmlFormatter::class ]; public $fd = 0; /** * @param $format * @return $this */ public function setFormat($format) { $this->format = $format; return $this; } /** * 清理无用数据 */ public function clear() { $this->fd = 0; $this->isWebSocket = false; $this->format = null; } /** * @return string */ public function getContentType() { if ($this->format == null || $this->format == static::JSON) { return 'application/json;charset=utf-8'; } else if ($this->format == static::XML) { return 'application/xml;charset=utf-8'; } else { return 'text/html;charset=utf-8'; } } /** * @param $content * @return mixed */ public function toHtml($content) { $this->format = self::HTML; return $content; } /** * @param $content * @return mixed */ public function toJson($content) { $this->format = self::JSON; return $content; } /** * @param $content * @return mixed */ public function toXml($content) { $this->format = self::XML; return $content; } /** * @return mixed * @throws Exception */ public function sender() { return $this->send(func_get_args()); } /** * @param $key * @param $value * @return Response */ public function addHeader($key, $value) { $this->headers[$key] = $value; return $this; } /** * @return bool */ private function isClient() { return !($this->response instanceof SResponse) && !($this->response instanceof S2Response); } /** * @param string $context * @param int $statusCode * @param null $response * @return bool * @throws Exception */ public function send($context = '', $statusCode = 200, $response = null) { $sendData = $this->parseData($context); if ($response instanceof SResponse) { $this->response = $response; } if ($this->response instanceof SResponse) { return $this->sendData($sendData, $statusCode); } else { return $this->printResult($sendData); } } /** * @param $context * @return mixed * @throws Exception */ private function parseData($context) { if (isset($this->_format_maps[$this->format])) { $config['class'] = $this->_format_maps[$this->format]; } else { $config['class'] = HtmlFormatter::class; } $formatter = Snowflake::createObject($config); return $formatter->send($context)->getData(); } /** * @param $result * @return string * @throws Exception */ private function printResult($result) { $result = Help::toString($result); $string = PHP_EOL . 'Command Result: ' . PHP_EOL . PHP_EOL; if (empty($result)) { $string .= 'success!' . PHP_EOL . PHP_EOL; } else { $string .= $result . PHP_EOL . PHP_EOL; } $string .= 'Command End!' . PHP_EOL . PHP_EOL; echo $string; $event = Snowflake::app()->event; $event->trigger('CONSOLE_END'); return $result; } /** * @param $sendData * @param $status * @return mixed */ private function sendData($sendData, $status) { $this->response->status($status); $this->response->header('Content-Type', $this->getContentType()); $this->response->header('Run-Time', $this->getRuntime()); if (!empty($this->headers) && is_array($this->headers)) { foreach ($this->headers as $key => $header) { $this->response->header($key, $header); } $this->headers = []; } if (empty($sendData)) { $sendData = ''; } $this->response->end($sendData); $this->response = null; unset($this->response); return $sendData; } /** * @param $url * @param array $param * @return int */ public function redirect($url, array $param = []) { if (!empty($param)) { $url .= '?' . http_build_query($param); } $url = ltrim($url, '/'); if (!preg_match('/^http/', $url)) { $url = '/' . $url; } return $this->response->redirect($url); } /** * @param null $response * @return mixed */ public static function create($response = null) { $ciResponse = Context::setContext('response', new Response()); $ciResponse->response = $response; $ciResponse->startTime = microtime(true); $ciResponse->format = self::JSON; return $ciResponse; } /** * @throws Exception */ public function sendNotFind() { $this->format = static::HTML; $this->send('', 404); } /** * @return string */ public function getRuntime() { return sprintf('%.5f', microtime(TRUE) - $this->startTime); } }