This commit is contained in:
2020-08-31 01:27:08 +08:00
parent d6d4027b0d
commit e4f01d9499
119 changed files with 12232 additions and 0 deletions
@@ -0,0 +1,18 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
class OnAfterReload extends Callback
{
public function onHandler()
{
// TODO: Implement onHandler() method.
}
}
@@ -0,0 +1,17 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
class OnBeforeReload extends Callback
{
public function onHandler()
{
// TODO: Implement onHandler() method.
}
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
class OnClose extends Callback
{
public function onHandler()
{
// TODO: Implement onHandler() method.
}
}
+38
View File
@@ -0,0 +1,38 @@
<?php
namespace HttpServer\Events\Trigger;
use Exception;
use HttpServer\Events\Callback;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
/**
* Class OnConnect
* @package HttpServer\Events\Trigger
*/
class OnConnect extends Callback
{
/**
* @param Server $server
* @param int $fd
* @param int $reactorId
* @throws Exception
*/
public function onHandler(\Swoole\Server $server, int $fd, int $reactorId)
{
$event = Snowflake::get()->event;
if (!$event->exists(Event::RECEIVE_CONNECTION)) {
return;
}
$event->trigger(Event::RECEIVE_CONNECTION, [$server, $fd, $reactorId]);
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace HttpServer\Events\Trigger;
use Exception;
use HttpServer\Events\Callback;
use Swoole\Server;
class OnFinish extends Callback
{
/**
* @param Server $server
* @param $task_id
* @param $data
* @throws Exception
*/
public function onHandler(Server $server, $task_id, $data)
{
$data = json_decode($data, true);
$data['work_id'] = $task_id;
$this->write(var_export($data, true), 'Task');
}
}
@@ -0,0 +1,33 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
class OnManagerStart extends Callback
{
/**
* @param Server $server
* @throws \Exception
*/
public function onHandler(Server $server)
{
$this->debug('manager start.');
Snowflake::setProcessId($server->manager_pid);
$events = Snowflake::get()->event;
if ($events->exists(Event::SERVER_MANAGER_START)) {
$events->trigger(Event::SERVER_MANAGER_START, null, $server);
}
if (Snowflake::isLinux()) {
name('Server Manager.');
}
}
}
@@ -0,0 +1,41 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
/**
* Class OnManagerStop
* @package HttpServer\Events\Trigger
*/
class OnManagerStop extends Callback
{
/**
* @param $server
* @throws \Exception
*/
public function onHandler(Server $server)
{
$this->warning('manager stop.');
$events = Snowflake::get()->event;
if ($events->exists(Event::SERVER_MANAGER_STOP)) {
$events->trigger(Event::SERVER_MANAGER_STOP, [$server]);
}
// $runPath = storage(null, 'workerIds');
// foreach (glob($runPath . '/*') as $item) {
// if (!file_exists($item)) {
// continue;
// }
// @unlink($item);
// }
}
}
@@ -0,0 +1,17 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
class OnPipeMessage extends Callback
{
public function onHandler()
{
// TODO: Implement onHandler() method.
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace HttpServer\Events\Trigger;
use Exception;
use HttpServer\Events\Callback;
use Snowflake\Core\JSON;
use Snowflake\Error\Logger;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
use Closure;
class OnShutdown extends Callback
{
/**
* @param Server $server
*/
public function onHandler(Server $server)
{
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
class OnStart extends Callback
{
/**
* @param Server $server
* @throws \Exception
*/
public function onHandler($server)
{
$time = storage('socket.sock');
Snowflake::writeFile($time, $server->master_pid);
$event = Snowflake::get()->event;
if ($event->exists(Event::SERVER_EVENT_START)) {
$event->trigger(Event::SERVER_EVENT_START, null, $server);
}
}
}
+140
View File
@@ -0,0 +1,140 @@
<?php
namespace HttpServer\Events\Trigger\Trigger;
use HttpServer\Events\Callback;
use HttpServer\IInterface\Task as ITask;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
use Swoole\Timer;
use Exception;
class OnTask extends Callback
{
/**
* @throws Exception
*/
public function onHandler()
{
$parameter = func_get_args();
if (count($parameter) < 4) {
$this->onContinueTask(...func_get_args());
} else {
$this->onTask(...func_get_args());
}
}
/**
* @param Server $server
* @param int $task_id
* @param int $from_id
* @param string $data
*
* @return mixed|void
* @throws Exception
* 异步任务
*/
public function onTask(Server $server, $task_id, $from_id, $data)
{
$time = microtime(TRUE);
if (empty($data)) {
return $server->finish('null data');
}
$finish = $this->runTaskHandler($data);
if (!$finish) {
$finish = [];
}
$finish['runTime'] = [
'startTime' => $time,
'runTime' => microtime(TRUE) - $time,
'endTime' => microtime(TRUE),
];
$server->finish(json_encode($finish));
}
/**
* @param Server $server
* @param Server\Task $task
* @return mixed|void
* @throws Exception
* 异步任务
*/
public function onContinueTask(Server $server, Server\Task $task)
{
$time = microtime(TRUE);
if (empty($task->data)) {
return $task->finish('null data');
}
$finish = $this->runTaskHandler($task->data);
if (!$finish) {
$finish = [];
}
$finish['runTime'] = [
'startTime' => $time,
'runTime' => microtime(TRUE) - $time,
'endTime' => microtime(TRUE),
];
$task->finish(json_encode($finish));
}
/**
* @param $data
* @return array|null
* @throws Exception
*/
private function runTaskHandler($data)
{
$serialize = $this->before($data);
try {
$params = $serialize->getParams();
if (is_object($params)) {
$params = get_object_vars($params);
}
$finish['class'] = get_class($serialize);
$finish['params'] = $params;
$finish['status'] = 'success';
$finish['info'] = $serialize->handler();
} catch (\Throwable $exception) {
$finish['status'] = 'error';
$finish['info'] = $this->format($exception);
$this->error($exception, 'Task');
} finally {
$event = Snowflake::get()->event;
$event->trigger(Event::RELEASE_ALL);
$this->endCoroutine();
Timer::clearAll();
}
return $finish;
}
/**
* @param $data
* @return ITask|null
*/
protected function before($data)
{
if (empty($serialize = unserialize($data))) {
return null;
}
if (!($serialize instanceof ITask)) {
return null;
}
return $serialize;
}
/**
* @param $exception
* @return string
*/
private function format($exception)
{
return $exception->getMessage() . " on line " . $exception->getLine() . " at file " . $exception->getFile();
}
}
@@ -0,0 +1,22 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
class OnWorkerError extends Callback
{
/**
* @param $server
* @param $worker_id
* @throws \Exception
*/
public function onHandler($server, $worker_id)
{
$this->clear($server, $worker_id, self::EVENT_ERROR);
}
}
@@ -0,0 +1,22 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
class OnWorkerExit extends Callback
{
/**
* @param $server
* @param $worker_id
* @throws \Exception
*/
public function onHandler($server, $worker_id)
{
$this->clear($server, $worker_id, self::EVENT_EXIT);
}
}
@@ -0,0 +1,75 @@
<?php
namespace HttpServer\Events\Trigger;
use Exception;
use HttpServer\Events\Callback;
use Snowflake\Error\Logger;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
/**
* Class OnWorkerStart
* @package HttpServer\Events\Trigger
*/
class OnWorkerStart extends Callback
{
/**
* @param Server $server
* @param int $worker_id
*
* @return mixed|void
* @throws Exception
*/
public function onHandler(Server $server, $worker_id)
{
Logger::$worker_id = $worker_id;
Snowflake::setProcessId($server->worker_pid);
$get_name = $this->get_process_name($server, $worker_id);
if (!empty($get_name) && !Snowflake::isMac()) {
swoole_set_process_name($get_name);
}
$this->setWorkerAction($server, $worker_id);
}
/**
* @param $worker_id
* @param $socket
* @throws Exception
*/
private function setWorkerAction($socket, $worker_id)
{
try {
$event = Snowflake::get()->event;
if ($event->exists(Event::SERVER_WORKER_START)) {
$event->trigger(Event::SERVER_WORKER_START);
}
} catch (\Throwable $exception) {
Logger::write($exception->getMessage(), 'worker');
}
}
/**
* @param $socket
* @param $worker_id
* @return string
*/
private function get_process_name($socket, $worker_id)
{
$prefix = 'system:';
if ($worker_id >= $socket->setting['worker_num']) {
return $prefix . ': Task: No.' . $worker_id;
} else {
return $prefix . ': worker: No.' . $worker_id;
}
}
}
@@ -0,0 +1,23 @@
<?php
namespace HttpServer\Events\Trigger;
use HttpServer\Events\Callback;
class OnWorkerStop extends Callback
{
/**
* @param $server
* @param $worker_id
* @throws \Exception
*/
public function onHandler($server, $worker_id)
{
$this->clear($server, $worker_id, self::EVENT_STOP);
}
}