diff --git a/HttpServer/Http/HttpParams.php b/HttpServer/Http/HttpParams.php index 58899f9b..07904b01 100644 --- a/HttpServer/Http/HttpParams.php +++ b/HttpServer/Http/HttpParams.php @@ -10,6 +10,7 @@ namespace HttpServer\Http; use Exception; use HttpServer\Exception\RequestException; +use Snowflake\Core\Help; use Snowflake\Snowflake; /** @@ -19,386 +20,390 @@ use Snowflake\Snowflake; class HttpParams { - /** @var array */ - private $body = []; + /** @var array */ + private $body = []; - /** @var array */ - private $gets = []; + /** @var array */ + private $gets = []; - /** @var array */ - private $files = []; + /** @var array */ + private $files = []; - /** - * HttpParams constructor. - * @param $body - * @param $get - * @param $files - */ - public function __construct($body, $get, $files) - { - $this->body = $body; - $this->gets = $get ?? []; - $this->files = $files ?? []; - } + /** + * HttpParams constructor. + * @param $body + * @param $get + * @param $files + */ + public function __construct($body, $get, $files) + { + $this->body = $body; + $this->gets = $get ?? []; + $this->files = $files ?? []; + if (!is_array($this->body)) { + $this->body = Help::toArray($this->body); + } - /** - * @return int - */ - public function offset() - { - return ($this->page() - 1) * $this->size(); - } + } - /** - * @param array $data - * 批量添加数据 - */ - public function setPosts($data) - { - if (!is_array($data)) { - return; - } - foreach ($data as $key => $vla) { - $this->body[$key] = $vla; - } - } + /** + * @return int + */ + public function offset() + { + return ($this->page() - 1) * $this->size(); + } - /** - * @param string $key - * @param string $value - */ - public function addGetParam(string $key, string $value) - { - $this->gets[$key] = $value; - } + /** + * @param array $data + * 批量添加数据 + */ + public function setPosts(array $data) + { + if (!is_array($data)) { + return; + } + foreach ($data as $key => $vla) { + $this->body[$key] = $vla; + } + } - /** - * @return int - */ - private function page() - { - return (int)$this->get('page', 1); - } + /** + * @param string $key + * @param string $value + */ + public function addGetParam(string $key, string $value) + { + $this->gets[$key] = $value; + } - /** - * @return int - */ - public function size() - { - return (int)$this->get('size', 20); - } + /** + * @return int + */ + private function page() + { + return (int)$this->get('page', 1); + } + + /** + * @return int + */ + public function size() + { + return (int)$this->get('size', 20); + } - /** - * @param $name - * @param $defaultValue - * @param $call - * @return mixed|null - */ - public function get($name, $defaultValue = null, $call = null) - { - return $this->gets[$name] ?? $defaultValue; - } + /** + * @param $name + * @param $defaultValue + * @param $call + * @return mixed|null + */ + public function get($name, $defaultValue = null, $call = null) + { + return $this->gets[$name] ?? $defaultValue; + } - /** - * @param $name - * @param null $defaultValue - * @param $call - * @return mixed|null - */ - public function post($name, $defaultValue = null, $call = null) - { - $data = $this->body[$name] ?? $defaultValue; - if ($call !== null) { - $data = call_user_func($call, $data); - } - return $data; - } + /** + * @param $name + * @param null $defaultValue + * @param $call + * @return mixed|null + */ + public function post($name, $defaultValue = null, $call = null) + { + $data = $this->body[$name] ?? $defaultValue; + if ($call !== null) { + $data = call_user_func($call, $data); + } + return $data; + } - /** - * @param $name - * @return false|string - * @throws Exception - */ - public function json($name) - { - $data = $this->array($name); - if (empty($data)) { - return JSON::encode([]); - } else if (!is_array($data)) { - return JSON::encode([]); - } - return JSON::encode($data); - } + /** + * @param $name + * @return false|string + * @throws Exception + */ + public function json($name) + { + $data = $this->array($name); + if (empty($data)) { + return JSON::encode([]); + } else if (!is_array($data)) { + return JSON::encode([]); + } + return JSON::encode($data); + } - /** - * @return array - */ - public function gets() - { - return $this->gets; - } + /** + * @return array + */ + public function gets() + { + return $this->gets; + } - /** - * @return array - */ - public function params() - { - return array_merge($this->body ?? [], $this->files ?? []); - } + /** + * @return array + */ + public function params() + { + return array_merge($this->body ?? [], $this->files ?? []); + } - /** - * @return array - */ - public function load() - { - return array_merge($this->files, $this->body, $this->gets); - } + /** + * @return array + */ + public function load() + { + return array_merge($this->files, $this->body, $this->gets); + } - /** - * @param $name - * @param array $defaultValue - * @return array|mixed - */ - public function array($name, $defaultValue = []) - { - return $this->body[$name] ?? $defaultValue; - } + /** + * @param $name + * @param array $defaultValue + * @return array|mixed + */ + public function array($name, $defaultValue = []) + { + return $this->body[$name] ?? $defaultValue; + } - /** - * @param $name - * @return mixed|File|null - * @throws Exception - */ - public function file($name) - { - if (!isset($this->files[$name])) { - return null; - } - $param = $this->files[$name]; - $param['class'] = File::class; - return Snowflake::createObject($param); - } + /** + * @param $name + * @return mixed|File|null + * @throws Exception + */ + public function file($name) + { + if (!isset($this->files[$name])) { + return null; + } + $param = $this->files[$name]; + $param['class'] = File::class; + return Snowflake::createObject($param); + } - /** - * @param $name - * @param bool $isNeed - * @return mixed|null - * @throws RequestException - */ - private function required($name, $isNeed = false) - { - $int = $this->body[$name] ?? NULL; - if (is_null($int) && $isNeed === true) { - throw new RequestException("You need to add request parameter $name"); - } - return $int; - } + /** + * @param $name + * @param bool $isNeed + * @return mixed|null + * @throws RequestException + */ + private function required($name, $isNeed = false) + { + $int = $this->body[$name] ?? NULL; + if (is_null($int) && $isNeed === true) { + throw new RequestException("You need to add request parameter $name"); + } + return $int; + } - /** - * @param $name - * @param bool $isNeed - * @param null $min - * @param null $max - * @return int - * @throws Exception - */ - public function int($name, $isNeed = FALSE, $min = NULL, $max = NULL) - { - $int = $this->required($name, $isNeed); - if ($int === null) return null; - if (is_array($min)) { - list($min, $max) = $min; - } - if (is_null($int)) { - $length = 0; - } else { - $length = strlen(floatval($int)); - } - if (!is_numeric($int) || intval($int) != $int) { - throw new RequestException("The request parameter $name must integer."); - } - $this->between($length, $min, $max); - return (int)$int; - } + /** + * @param $name + * @param bool $isNeed + * @param null $min + * @param null $max + * @return int + * @throws Exception + */ + public function int($name, $isNeed = FALSE, $min = NULL, $max = NULL) + { + $int = $this->required($name, $isNeed); + if ($int === null) return null; + if (is_array($min)) { + list($min, $max) = $min; + } + if (is_null($int)) { + $length = 0; + } else { + $length = strlen(floatval($int)); + } + if (!is_numeric($int) || intval($int) != $int) { + throw new RequestException("The request parameter $name must integer."); + } + $this->between($length, $min, $max); + return (int)$int; + } - /** - * @param $name - * @param bool $isNeed - * @param int $round - * @return float - * @throws Exception - */ - public function float($name, $isNeed = FALSE, $round = 0) - { - $int = $this->required($name, $isNeed); - if ($int === null) { - return null; - } - if ($round > 0) { - return round(floatval($int), $round); - } else { - return floatval($int); - } - } + /** + * @param $name + * @param bool $isNeed + * @param int $round + * @return float + * @throws Exception + */ + public function float($name, $isNeed = FALSE, $round = 0) + { + $int = $this->required($name, $isNeed); + if ($int === null) { + return null; + } + if ($round > 0) { + return round(floatval($int), $round); + } else { + return floatval($int); + } + } - /** - * @param $name - * @param bool $isNeed - * @param null $length - * - * @return string - * @throws - */ - public function string($name, $isNeed = FALSE, $length = NULL) - { - $string = $this->required($name, $isNeed); - if ($string === null || $length === null) { - return $string; - } - if (!is_string($string)) { - $string = json_encode($string, JSON_UNESCAPED_UNICODE); - } - $_length = strlen($string); - if (is_array($length)) { - if (count($length) < 2) { - array_unshift($length, 0); - } - $this->between($_length, ...$length); - } else if (is_numeric($length) && $_length != $length) { - throw new RequestException("The length of the string must be $length characters"); - } - return $string; - } + /** + * @param $name + * @param bool $isNeed + * @param null $length + * + * @return string + * @throws + */ + public function string($name, $isNeed = FALSE, $length = NULL) + { + $string = $this->required($name, $isNeed); + if ($string === null || $length === null) { + return $string; + } + if (!is_string($string)) { + $string = json_encode($string, JSON_UNESCAPED_UNICODE); + } + $_length = strlen($string); + if (is_array($length)) { + if (count($length) < 2) { + array_unshift($length, 0); + } + $this->between($_length, ...$length); + } else if (is_numeric($length) && $_length != $length) { + throw new RequestException("The length of the string must be $length characters"); + } + return $string; + } - /** - * @param $_length - * @param $min - * @param $max - * @throws RequestException - */ - private function between($_length, $min, $max) - { - if ($min !== NULL && $_length < $min) { - throw new RequestException("The minimum value cannot be lower than $min"); - } - if ($max !== NULL && $_length > $max) { - throw new RequestException("Maximum cannot exceed $max, has length " . $_length); - } - } + /** + * @param $_length + * @param $min + * @param $max + * @throws RequestException + */ + private function between($_length, $min, $max) + { + if ($min !== NULL && $_length < $min) { + throw new RequestException("The minimum value cannot be lower than $min"); + } + if ($max !== NULL && $_length > $max) { + throw new RequestException("Maximum cannot exceed $max, has length " . $_length); + } + } - /** - * @param $name - * @param bool $isNeed - * - * @return string - * @throws RequestException - */ - public function email($name, $isNeed = FALSE) - { - $email = $this->required($name, $isNeed); - if ($email === null) { - return null; - } - if (!preg_match('/^\w+([.-_]\w+)+@\w+(\.\w+)+$/', $email)) { - throw new RequestException("Request parameter $name is in the wrong format", 4001); - } - return $email; - } + /** + * @param $name + * @param bool $isNeed + * + * @return string + * @throws RequestException + */ + public function email($name, $isNeed = FALSE) + { + $email = $this->required($name, $isNeed); + if ($email === null) { + return null; + } + if (!preg_match('/^\w+([.-_]\w+)+@\w+(\.\w+)+$/', $email)) { + throw new RequestException("Request parameter $name is in the wrong format", 4001); + } + return $email; + } - /** - * @param $name - * @param bool $isNeed - * - * @return string - * @throws RequestException - */ - public function bool($name, $isNeed = FALSE) - { - $email = $this->required($name, $isNeed); - if ($email === null) { - return false; - } - return (bool)$email; - } + /** + * @param $name + * @param bool $isNeed + * + * @return string + * @throws RequestException + */ + public function bool($name, $isNeed = FALSE) + { + $email = $this->required($name, $isNeed); + if ($email === null) { + return false; + } + return (bool)$email; + } - /** - * @param $name - * @param null $default - * - * @return mixed|null - * @throws RequestException - */ - public function timestamp($name, $default = NULL) - { - $value = $this->required($name, false); - if ($value === null) { - return $default; - } - if (!is_numeric($value)) { - throw new RequestException('The request param :attribute not is a timestamp value'); - } - if (strlen((string)$value) != 10) { - throw new RequestException('The request param :attribute not is a timestamp value'); - } - if (!date('YmdHis', $value)) { - throw new RequestException('The request param :attribute format error', 4001); - } - return $value; - } + /** + * @param $name + * @param null $default + * + * @return mixed|null + * @throws RequestException + */ + public function timestamp($name, $default = NULL) + { + $value = $this->required($name, false); + if ($value === null) { + return $default; + } + if (!is_numeric($value)) { + throw new RequestException('The request param :attribute not is a timestamp value'); + } + if (strlen((string)$value) != 10) { + throw new RequestException('The request param :attribute not is a timestamp value'); + } + if (!date('YmdHis', $value)) { + throw new RequestException('The request param :attribute format error', 4001); + } + return $value; + } - /** - * @param $name - * @param null $default - * - * @return mixed|null - * @throws RequestException - */ - public function datetime($name, $default = NULL) - { - $value = $this->required($name, false); - if ($value === null) { - return $default; - } - $match = '/^\d{4}.*?([1-12]).*([1-31]).*?[0-23].*?[0-59].*?[0-59].*?$/'; - $match = preg_match($match, $value, $result); - if (!$match || $result[0] != $value) { - throw new RequestException('The request param :attribute format error', 4001); - } - return $value; - } + /** + * @param $name + * @param null $default + * + * @return mixed|null + * @throws RequestException + */ + public function datetime($name, $default = NULL) + { + $value = $this->required($name, false); + if ($value === null) { + return $default; + } + $match = '/^\d{4}.*?([1-12]).*([1-31]).*?[0-23].*?[0-59].*?[0-59].*?$/'; + $match = preg_match($match, $value, $result); + if (!$match || $result[0] != $value) { + throw new RequestException('The request param :attribute format error', 4001); + } + return $value; + } - /** - * @param $name - * @param null $default - * @return mixed|null - * @throws RequestException - */ - public function ip($name, $default = NULL) - { - $value = $this->required($name, false); - if ($value == NULL) { - return $default; - } - $match = preg_match('/^\d{1,3}(\.\d{1,3}){3}$/', $value, $result); - if (!$match || $result[0] != $value) { - throw new RequestException('The request param :attribute format error', 4001); - } - return $value; - } + /** + * @param $name + * @param null $default + * @return mixed|null + * @throws RequestException + */ + public function ip($name, $default = NULL) + { + $value = $this->required($name, false); + if ($value == NULL) { + return $default; + } + $match = preg_match('/^\d{1,3}(\.\d{1,3}){3}$/', $value, $result); + if (!$match || $result[0] != $value) { + throw new RequestException('The request param :attribute format error', 4001); + } + return $value; + } - /** - * @param $name - * @return mixed|null - */ - public function __get($name) - { - $load = $this->load(); + /** + * @param $name + * @return mixed|null + */ + public function __get($name) + { + $load = $this->load(); - return $load[$name] ?? null; - } + return $load[$name] ?? null; + } } diff --git a/HttpServer/Http/Request.php b/HttpServer/Http/Request.php index bc09db1f..64aba085 100644 --- a/HttpServer/Http/Request.php +++ b/HttpServer/Http/Request.php @@ -424,7 +424,7 @@ class Request extends Application $sRequest->startTime = microtime(true); $sRequest->uri = $request->server['request_uri'] ?? $request->header['request_uri']; - $sRequest->params = Snowflake::createObject(HttpParams::class,[Help::toArray($request->rawContent()), $request->get, $request->files]); + $sRequest->params = new HttpParams($request->rawContent(), $request->get, $request->files); if (!empty($request->post)) { $sRequest->params->setPosts($request->post ?? []); } diff --git a/System/Pool/Connection.php b/System/Pool/Connection.php index d610db61..6fc86304 100644 --- a/System/Pool/Connection.php +++ b/System/Pool/Connection.php @@ -105,7 +105,7 @@ class Connection extends Pool */ public function inTransaction($cds) { - [$coroutineId, $coroutineName] = $this->getIndex($cds, true); + $coroutineName = $this->name($cds, true); if (!Context::hasContext('begin_' . $coroutineName)) { return false; } @@ -117,7 +117,7 @@ class Connection extends Pool */ public function beginTransaction($coroutineName) { - [$coroutineId, $coroutineName] = $this->getIndex($coroutineName, true); + $coroutineName = $this->name($coroutineName, true); if (!Context::hasContext('begin_' . $coroutineName)) { Context::setContext('begin_' . $coroutineName, 0); } @@ -136,7 +136,7 @@ class Connection extends Pool */ public function commit($coroutineName) { - [$coroutineId, $coroutineName] = $this->getIndex($coroutineName, true); + $coroutineName = $this->name($coroutineName, true); if (!Context::hasContext('begin_' . $coroutineName)) { return; } @@ -170,7 +170,7 @@ class Connection extends Pool */ public function rollback($coroutineName) { - [$coroutineId, $coroutineName] = $this->getIndex($coroutineName, true); + $coroutineName = $this->name($coroutineName, true); if (!Context::hasContext('begin_' . $coroutineName)) { return; } @@ -200,7 +200,7 @@ class Connection extends Pool if ($this->creates === 0) { $this->creates = Timer::tick(10000, [$this, 'Heartbeat_detection']); } - [$coroutineId, $coroutineName] = $this->getIndex($config['cds'], $isMaster); + $coroutineName = $this->name($config['cds'], $isMaster); if (!isset($this->hasCreate[$coroutineName])) { $this->hasCreate[$coroutineName] = 0; } @@ -210,9 +210,9 @@ class Connection extends Pool if ($this->size($coroutineName) < 1 && $this->hasCreate[$coroutineName] < $this->max) { return $this->saveClient($coroutineName, $this->nowClient($coroutineName, $config)); } - [$timeout, $connection] = $client = $this->get($coroutineName); - if ($connection instanceof PDO) { - return $this->saveClient($coroutineName, $connection); + $connections = $client = $this->get($coroutineName); + if ($connections[1] instanceof PDO) { + return $this->saveClient($coroutineName, $connections[1]); } return $this->saveClient($coroutineName, $this->nowClient($coroutineName, $config)); } @@ -252,7 +252,7 @@ class Connection extends Pool */ public function release($coroutineName, $isMaster) { - [$coroutineId, $coroutineName] = $this->getIndex($coroutineName, $isMaster); + $coroutineName = $this->name($coroutineName, $isMaster); if (!$this->hasClient($coroutineName)) { return; } diff --git a/System/Pool/Redis.php b/System/Pool/Redis.php index eeb66293..72dec475 100644 --- a/System/Pool/Redis.php +++ b/System/Pool/Redis.php @@ -36,7 +36,7 @@ class Redis extends Pool public function getConnection(array $config, $isMaster = false) { $name = $config['host'] . ':' . $config['prefix'] . ':' . $config['databases']; - [$coroutineId, $coroutineName] = $this->getIndex('redis:' . $name, $isMaster); + $coroutineName = $this->name('redis:' . $name, $isMaster); if (Context::hasContext($coroutineName)) { return Context::getContext($coroutineName); } else if (!$this->hasItem($coroutineName)) { @@ -59,11 +59,11 @@ class Redis extends Pool $this->success('create redis client -> ' . $config['host'] . ':' . $this->size($coroutineName)); return $this->saveClient($coroutineName, $this->createConnect($config)); } - [$time, $client] = $this->get($coroutineName); - if ($client === null) { + $clients = $this->get($coroutineName); + if ($clients[1] === null) { return $this->getByChannel($coroutineName, $config); } - return $this->saveClient($coroutineName, $client); + return $this->saveClient($coroutineName, $clients[1]); } @@ -109,7 +109,7 @@ class Redis extends Pool public function release(array $config, $isMaster = false) { $name = $config['host'] . ':' . $config['prefix'] . ':' . $config['databases']; - [$coroutineId, $coroutineName] = $this->getIndex('redis:' . $name, $isMaster); + $coroutineName = $this->name('redis:' . $name, $isMaster); if (!Context::hasContext($coroutineName)) { return; } @@ -127,7 +127,7 @@ class Redis extends Pool public function destroy(array $config, $isMaster = false) { $name = $config['host'] . ':' . $config['prefix'] . ':' . $config['databases']; - [$coroutineId, $coroutineName] = $this->getIndex('redis:' . $name, $isMaster); + $coroutineName = $this->name('redis:' . $name, $isMaster); if (!Context::hasContext($coroutineName)) { return; } @@ -177,15 +177,5 @@ class Redis extends Pool // TODO: Implement desc() method. } - /** - * @param $name - * @param false $isMaster - * @return array - */ - private function getIndex($name, $isMaster = false) - { - return [Coroutine::getCid(), $this->name($name, $isMaster)]; - } - }