diff --git a/Database/Db.php b/Database/Db.php index 5c0375cf..599236f1 100644 --- a/Database/Db.php +++ b/Database/Db.php @@ -22,12 +22,15 @@ class Db { use QueryTrait; + + private static bool $_inTransaction = false; + /** * @return bool */ public static function transactionsActive(): bool { - return Context::getContext('begin:transaction') === true; + return static::$_inTransaction === true; } /** @@ -35,7 +38,8 @@ class Db */ public static function beginTransaction() { - Context::setContext('begin:transaction', true); + static::$_inTransaction = true; +// Context::setContext('begin:transaction', true); } /** @@ -49,7 +53,7 @@ class Db $event = Snowflake::app()->getEvent(); $event->trigger(Connection::TRANSACTION_COMMIT); $event->offName(Connection::TRANSACTION_COMMIT); - Context::deleteContext('begin:transaction'); + static::$_inTransaction = false; } /** @@ -63,7 +67,7 @@ class Db $event = Snowflake::app()->getEvent(); $event->trigger(Connection::TRANSACTION_ROLLBACK); $event->offName(Connection::TRANSACTION_ROLLBACK); - Context::deleteContext('begin:transaction'); + static::$_inTransaction = false; } /** diff --git a/HttpServer/Http/Context.php b/HttpServer/Http/Context.php index 25c86d2f..f335694e 100644 --- a/HttpServer/Http/Context.php +++ b/HttpServer/Http/Context.php @@ -13,194 +13,239 @@ use Swoole\Coroutine; class Context extends BaseContext { - protected static array $_requests = []; + protected static array $_requests = []; - protected static array $_response = []; + protected static array $_response = []; - /** - * @param $id - * @param $context - * @param null $key - * @return mixed - */ - public static function setContext($id, $context, $key = null): mixed - { - if (static::inCoroutine()) { - return self::setCoroutine($id, $context, $key); - } else { - return self::setStatic($id, $context, $key); - } - } + /** + * @param $id + * @param $context + * @param null $key + * @return mixed + */ + public static function setContext($id, $context, $key = null): mixed + { + if (static::inCoroutine()) { + return self::setCoroutine($id, $context, $key); + } else { + return self::setStatic($id, $context, $key); + } + } - /** - * @param $id - * @param $context - * @param null $key - * @return mixed - */ - private static function setStatic($id, $context, $key = null): mixed - { - if (!empty($key)) { - if (!is_array(static::$_requests[$id])) { - static::$_requests[$id] = [$key => $context]; - } else { - static::$_requests[$id][$key] = $context; - } - } else { - static::$_requests[$id] = $context; - } - return $context; - } + /** + * @param $id + * @param $context + * @param null $key + * @return mixed + */ + private static function setStatic($id, $context, $key = null): mixed + { + if (empty($key)) { + return static::$_requests[$id] = $context; + } + if (!is_array(static::$_requests[$id])) { + return static::$_requests[$id] = [$key => $context]; + } else { + return static::$_requests[$id][$key] = $context; + } + } - /** - * @param $id - * @param $context - * @param null $key - * @return mixed - */ - private static function setCoroutine($id, $context, $key = null): mixed - { - if (!static::hasContext($id)) { - Coroutine::getContext()[$id] = []; - } - if (!empty($key)) { - if (!is_array(Coroutine::getContext()[$id])) { - Coroutine::getContext()[$id] = [$key => $context]; - } else { - Coroutine::getContext()[$id][$key] = $context; - } - } else { - Coroutine::getContext()[$id] = $context; - } - return $context; - } + /** + * @param $id + * @param $context + * @param null $key + * @return mixed + */ + private static function setCoroutine($id, $context, $key = null): mixed + { + if (empty($key)) { + return Coroutine::getContext()[$id] = $context; + } + if (!is_array(Coroutine::getContext()[$id])) { + Coroutine::getContext()[$id] = [$key => $context]; + } else { + Coroutine::getContext()[$id][$key] = $context; + } + return $context; + } - /** - * @param $id - * @param null $key - * @return mixed - */ - public static function autoIncr($id, $key = null): mixed - { - if (!static::inCoroutine()) { - return false; - } - if (!isset(Coroutine::getContext()[$id][$key])) { - return false; - } - return Coroutine::getContext()[$id][$key] += 1; - } + /** + * @param $id + * @param null $key + * @param int $value + * @return bool|int + */ + public static function increment($id, $key = null, $value = 1): bool|int + { + if (!static::inCoroutine()) { + return false; + } + if (!isset(Coroutine::getContext()[$id][$key])) { + return false; + } + return Coroutine::getContext()[$id][$key] += $value; + } - /** - * @param $id - * @param null $key - * @return mixed - */ - public static function autoDecr($id, $key = null): mixed - { - if (!static::inCoroutine() || !static::hasContext($id)) { - return false; - } - if (!isset(Coroutine::getContext()[$id][$key])) { - return false; - } - return Coroutine::getContext()[$id][$key] -= 1; - } + /** + * @param $id + * @param null $key + * @param int $value + * @return bool|int + */ + public static function decrement($id, $key = null, $value = 1): bool|int + { + if (!static::inCoroutine() || !static::hasContext($id)) { + return false; + } + if (!isset(Coroutine::getContext()[$id][$key])) { + return false; + } + return Coroutine::getContext()[$id][$key] -= $value; + } - /** - * @param $id - * @param null $key - * @return mixed - */ - public static function getContext($id, $key = null): mixed - { - if (!static::hasContext($id)) { - return null; - } - if (static::inCoroutine()) { - if ($key === null) { - return Coroutine::getContext()[$id]; - } else { - return Coroutine::getContext()[$id][$key] ?? null; - } - } else { - if ($key === null) { - return static::$_requests[$id]; - } else { - return static::$_requests[$id][$key] ?? null; - } - } - } - - /** - * @return mixed - */ - public static function getAllContext(): mixed - { - if (static::inCoroutine()) { - return Coroutine::getContext() ?? []; - } else { - return static::$_requests ?? []; - } - } - - /** - * @param string $id - * @param string|null $key - */ - public static function deleteContext(string $id, string $key = null) - { - if (!static::hasContext($id, $key)) { - return; - } - if (static::inCoroutine()) { - if (!empty($key)) { - unset(Coroutine::getContext()[$id][$key]); - } else { - unset(Coroutine::getContext()[$id]); - } - } else { - unset(static::$_requests[$id]); - } - } - - /** - * @param $id - * @param null $key - * @return bool - */ - public static function hasContext($id, $key = null): bool - { - if (!static::inCoroutine()) { - if (!isset(static::$_requests[$id]) || empty(static::$_requests[$id])) { - return false; - } - if (!empty($key) && !isset(static::$_requests[$id][$key])) { - return false; - } - return true; - } - if (!isset(Coroutine::getContext()[$id])) { - return false; - } - if (Coroutine::getContext()[$id] !== null) { - if ($key === null) { - return true; - } - return isset(Coroutine::getContext()[$id][$key]); - } - return false; - } + /** + * @param $id + * @param null $key + * @return mixed + */ + public static function getContext($id, $key = null): mixed + { + if (!static::hasContext($id)) { + return null; + } + if (static::inCoroutine()) { + return static::loadByContext($id, $key); + } else { + return static::loadByStatic($id, $key); + } + } - /** - * @return bool - */ - public static function inCoroutine(): bool - { - return Coroutine::getCid() > 0; - } + /** + * @param $id + * @param null $key + * @return mixed + */ + private static function loadByContext($id, $key = null): mixed + { + $data = Coroutine::getContext()[$id] ?? null; + if ($data === null) { + return null; + } + if ($key !== null) { + return $data[$key] ?? null; + } + return $data; + } + + + /** + * @param $id + * @param null $key + * @return mixed + */ + private static function loadByStatic($id, $key = null): mixed + { + $data = static::$_requests[$id] ?? null; + if ($data === null) { + return null; + } + if ($key !== null) { + return $data[$key] ?? null; + } + return $data; + } + + + /** + * @return mixed + */ + public static function getAllContext(): mixed + { + if (static::inCoroutine()) { + return Coroutine::getContext() ?? []; + } else { + return static::$_requests ?? []; + } + } + + /** + * @param string $id + * @param string|null $key + */ + public static function remove(string $id, string $key = null) + { + if (!static::hasContext($id, $key)) { + return; + } + if (static::inCoroutine()) { + unset(static::$_requests[$id]); + return; + } + if (!empty($key)) { + unset(Coroutine::getContext()[$id][$key]); + } else { + unset(Coroutine::getContext()[$id]); + } + } + + /** + * @param $id + * @param null $key + * @return bool + */ + public static function hasContext($id, $key = null): bool + { + if (!static::inCoroutine()) { + return static::searchByStatic($id, $key); + } else { + return static::searchByCoroutine($id, $key); + } + } + + + /** + * @param $id + * @param null $key + * @return bool + */ + private static function searchByStatic($id, $key = null): bool + { + if (!isset(static::$_requests[$id])) { + return false; + } + if (!empty($key) && !isset(static::$_requests[$id][$key])) { + return false; + } + return true; + } + + + /** + * @param $id + * @param null $key + * @return bool + */ + private static function searchByCoroutine($id, $key = null): bool + { + if (!isset(Coroutine::getContext()[$id])) { + return false; + } + if ($key !== null) { + return isset((Coroutine::getContext()[$id] ?? [])[$key]); + } + return true; + } + + + /** + * @return bool + */ + public static function inCoroutine(): bool + { + return Coroutine::getCid() > 0; + } } diff --git a/System/Abstracts/Pool.php b/System/Abstracts/Pool.php index 1aeb996c..667d3eae 100644 --- a/System/Abstracts/Pool.php +++ b/System/Abstracts/Pool.php @@ -154,7 +154,7 @@ abstract class Pool extends Component } if (!Context::hasContext('create::client::ing::' . $name)) { $this->push($name, $this->createClient($name, $callback)); - Context::deleteContext('create::client::ing::' . $name); + Context::remove('create::client::ing::' . $name); } } diff --git a/System/Pool/Connection.php b/System/Pool/Connection.php index 091db18d..ae1592ee 100644 --- a/System/Pool/Connection.php +++ b/System/Pool/Connection.php @@ -65,7 +65,7 @@ class Connection extends Pool if (!Context::hasContext('begin_' . $coroutineName)) { Context::setContext('begin_' . $coroutineName, 0); } - Context::autoIncr('begin_' . $coroutineName); + Context::increment('begin_' . $coroutineName); if (!Context::getContext('begin_' . $coroutineName) !== 0) { return; } @@ -84,7 +84,7 @@ class Connection extends Pool if (!Context::hasContext('begin_' . $coroutineName)) { return; } - if (Context::autoDecr('begin_' . $coroutineName) > 0) { + if (Context::decrement('begin_' . $coroutineName) > 0) { return; } $connection = Context::getContext($coroutineName); @@ -117,7 +117,7 @@ class Connection extends Pool if (!Context::hasContext('begin_' . $coroutineName)) { return; } - if (Context::autoDecr('begin_' . $coroutineName) > 0) { + if (Context::decrement('begin_' . $coroutineName) > 0) { return; } if (($connection = Context::getContext($coroutineName)) instanceof PDO) { @@ -250,7 +250,7 @@ class Connection extends Pool */ public function remove($coroutineName) { - Context::deleteContext($coroutineName); + Context::remove($coroutineName); } /** diff --git a/System/Pool/Redis.php b/System/Pool/Redis.php index a2974fb7..1a7f068a 100644 --- a/System/Pool/Redis.php +++ b/System/Pool/Redis.php @@ -119,7 +119,7 @@ class Redis extends Pool */ public function remove(string $coroutineName) { - Context::deleteContext($coroutineName); + Context::remove($coroutineName); } /**