This commit is contained in:
as2252258@163.com
2021-07-26 04:59:03 +08:00
parent abdaeb3e08
commit 826b3b2102
7 changed files with 394 additions and 342 deletions
+2 -20
View File
@@ -126,7 +126,7 @@ class ActiveRecord extends BaseActiveRecord
if (empty($attributes)) { if (empty($attributes)) {
return $logger->addError(FIND_OR_CREATE_MESSAGE, 'mysql'); return $logger->addError(FIND_OR_CREATE_MESSAGE, 'mysql');
} }
$select = self::getModelClass(); $select = duplicate(static::class);
$select->attributes = $attributes; $select->attributes = $attributes;
if (!$select->save()) { if (!$select->save()) {
return $logger->addError($select->getLastError(), 'mysql'); return $logger->addError($select->getLastError(), 'mysql');
@@ -150,7 +150,7 @@ class ActiveRecord extends BaseActiveRecord
/** @var static $select */ /** @var static $select */
$select = static::find()->where($condition)->first(); $select = static::find()->where($condition)->first();
if (empty($select)) { if (empty($select)) {
$select = self::getModelClass(); $select = duplicate(static::class);
} }
$select->attributes = $attributes; $select->attributes = $attributes;
if (!$select->save()) { if (!$select->save()) {
@@ -160,20 +160,6 @@ class ActiveRecord extends BaseActiveRecord
} }
/**
* @return static
* @throws Exception
*/
private static function getModelClass(): static
{
/** @var Channel $channel */
$channel = Snowflake::app()->get('channel');
return $channel->pop(static::class, function () {
return new static();
});
}
/** /**
* @param $action * @param $action
* @param $columns * @param $columns
@@ -306,10 +292,6 @@ class ActiveRecord extends BaseActiveRecord
$data[$key] = $this->{$item}($data[$key] ?? null); $data[$key] = $this->{$item}($data[$key] ?? null);
} }
$data = array_merge($data, $this->runRelate()); $data = array_merge($data, $this->runRelate());
$class = Snowflake::app()->getChannel();
$class->push($this, static::class);
return $data; return $data;
} }
+4 -10
View File
@@ -54,7 +54,7 @@ abstract class AbstractCollection extends Component implements \IteratorAggregat
{ {
$this->_item = $array; $this->_item = $array;
$this->query = $query; $this->query = $query;
$this->model = $model; $this->model = duplicate($model);
parent::__construct([]); parent::__construct([]);
} }
@@ -110,10 +110,6 @@ abstract class AbstractCollection extends Component implements \IteratorAggregat
*/ */
public function getModel(): ActiveRecord public function getModel(): ActiveRecord
{ {
if (!is_object($this->model)) {
$this->model = duplicate($this->model);
$this->model->setIsCreate(false);
}
return $this->model; return $this->model;
} }
@@ -137,12 +133,10 @@ abstract class AbstractCollection extends Component implements \IteratorAggregat
if (!$this->offsetExists($offset)) { if (!$this->offsetExists($offset)) {
return NULL; return NULL;
} }
if (!($this->_item[$offset] instanceof ActiveRecord)) {
if ($this->_item[$offset] instanceof ActiveRecord) { return $this->model->setAttributes($this->_item[$offset]);
return $this->_item[$offset];
} }
return $this->_item[$offset];
return $this->model::populate($this->_item[$offset]);
} }
/** /**
+1 -1
View File
@@ -56,7 +56,7 @@ class CollectionIterator extends \ArrayIterator
*/ */
protected function newModel($current): ActiveRecord protected function newModel($current): ActiveRecord
{ {
return $this->model::populate($current); return $this->model->setAttributes($current);
} }
+4 -1
View File
@@ -6,6 +6,7 @@ namespace HttpServer\Http;
use Annotation\Route\Socket; use Annotation\Route\Socket;
use Exception; use Exception;
use HttpServer\Abstracts\HttpService; use HttpServer\Abstracts\HttpService;
use HttpServer\Http\Response as HResponse;
use HttpServer\IInterface\AuthIdentity; use HttpServer\IInterface\AuthIdentity;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
use Snowflake\Abstracts\Config; use Snowflake\Abstracts\Config;
@@ -451,7 +452,7 @@ class Request extends HttpService
* @param \Swoole\Http\Request $request * @param \Swoole\Http\Request $request
* @return mixed * @return mixed
*/ */
public static function create(\Swoole\Http\Request $request): Request public static function create(\Swoole\Http\Request $request, \Swoole\Http\Response $response): Request
{ {
/** @var Request $sRequest */ /** @var Request $sRequest */
$sRequest = Context::setContext('request', new Request()); $sRequest = Context::setContext('request', new Request());
@@ -467,6 +468,8 @@ class Request extends HttpService
$sRequest->uri = $sRequest->headers->get('request_uri'); $sRequest->uri = $sRequest->headers->get('request_uri');
$sRequest->parseUri(); $sRequest->parseUri();
HResponse::create($response);
return $sRequest; return $sRequest;
} }
+73
View File
@@ -0,0 +1,73 @@
<?php
namespace Server;
use Swoole\Coroutine\Channel;
class ApplicationStore
{
private static ?ApplicationStore $applicationStore = null;
private Channel $lock;
private function __construct()
{
$this->lock = new Channel(99999);
}
/**
* @return \Server\ApplicationStore|null
*/
public static function getStore()
{
if (!(static::$applicationStore instanceof ApplicationStore)) {
static::$applicationStore = new ApplicationStore();
}
return static::$applicationStore;
}
public function add()
{
$this->lock->push(1);
return $this;
}
public function waite()
{
$this->lock->pop(-1);
}
public function done()
{
$this->lock->pop();
}
/**
* @return bool
*/
public function isBusy()
{
return !$this->lock->isEmpty();
}
/**
* @return string
*/
public function getStatus(): string
{
return env('state');
}
}
+4 -1
View File
@@ -32,6 +32,8 @@ class HTTPServerListener extends Abstracts\Server
private Router $router; private Router $router;
private ApplicationStore $store;
/** /**
* HTTPServerListener constructor. * HTTPServerListener constructor.
@@ -40,6 +42,7 @@ class HTTPServerListener extends Abstracts\Server
public function __construct() public function __construct()
{ {
$this->router = Snowflake::getApp('router'); $this->router = Snowflake::getApp('router');
$this->store = ApplicationStore::getStore();
parent::__construct(); parent::__construct();
} }
@@ -103,7 +106,7 @@ class HTTPServerListener extends Abstracts\Server
public function onRequest(Request $request, Response $response) public function onRequest(Request $request, Response $response)
{ {
try { try {
[$request, $_] = [HRequest::create($request), HResponse::create($response)]; $request = HRequest::create($request, $response);
if ($request->is('favicon.ico')) { if ($request->is('favicon.ico')) {
throw new Exception('Not found.', 404); throw new Exception('Not found.', 404);
} }
-3
View File
@@ -69,7 +69,6 @@ class ServerWorker extends \Server\Abstracts\Server
} }
/** /**
* @param $worker_id * @param $worker_id
* @throws Exception * @throws Exception
@@ -98,8 +97,6 @@ class ServerWorker extends \Server\Abstracts\Server
Event::trigger(Event::SERVER_WORKER_STOP); Event::trigger(Event::SERVER_WORKER_STOP);
var_dump('worker stop .' . $workerId);
fire(Event::SYSTEM_RESOURCE_CLEAN); fire(Event::SYSTEM_RESOURCE_CLEAN);
Timer::clearAll(); Timer::clearAll();