This commit is contained in:
2020-09-01 03:11:34 +08:00
parent ae753bc267
commit 689c2556e6
8 changed files with 194 additions and 191 deletions
+17 -16
View File
@@ -11,6 +11,7 @@ namespace HttpServer\Events;
use Exception;
use HttpServer\ServerManager;
use ReflectionException;
use Snowflake\Application;
use Snowflake\Error\Logger;
use Snowflake\Event;
use Snowflake\Exception\NotFindClassException;
@@ -20,6 +21,7 @@ use Swoole\Http\Response as SResponse;
use Swoole\Process\Pool;
use Swoole\WebSocket\Frame;
use Swoole\WebSocket\Server;
use HttpServer\Route\Annotation\Websocket as AWebsocket;
/**
* Class ServerWebSocket
@@ -32,6 +34,7 @@ class WebSocket extends Server
public $callback = [];
/** @var Application */
public $application;
@@ -63,8 +66,14 @@ class WebSocket extends Server
public function set(array $settings, $pool = null, $events = [], $config = [])
{
parent::set($settings);
Snowflake::get()->set(WebSocket::class, $this);
Snowflake::get()->set(Pool::class, $pool);
$application = Snowflake::get();
$application->set(WebSocket::class, $this);
$application->set(Pool::class, $pool);
$annotation = $application->annotation;
$annotation->register('websocket', AWebsocket::class);
ServerManager::set($this, $settings, $this->application, $events, $config);
}
@@ -87,11 +96,12 @@ class WebSocket extends Server
}
$json = json_decode($frame->data, true);
$manager = Snowflake::get()->annotation;
$manager->runWith($this->getName($json), [$frame->fd, $server]);
/** @var AWebsocket $manager */
$manager = Snowflake::get()->annotation->get('websocket');
$path = $manager->getName(AWebsocket::MESSAGE, $json['route']);
$manager->runWith($path, [$frame->fd, $server]);
} catch (Exception $exception) {
// $this->error($exception->getMessage(), __METHOD__, __FILE__);
// $this->addError($exception->getMessage());
$this->application->addError($exception->getMessage(), 'websocket');
} finally {
$event = Snowflake::get()->event;
$event->trigger(Event::EVENT_AFTER_REQUEST);
@@ -99,15 +109,6 @@ class WebSocket extends Server
}
}
/**
* @param $json
* @return string
*/
private function getName($json)
{
return 'WEBSOCKET:MESSAGE:' . $json['route'];
}
/**
* @param SRequest $request
* @param SResponse $response
@@ -177,7 +178,7 @@ class WebSocket extends Server
$event->trigger(Event::SERVER_CLOSE, [$fd]);
}
} catch (\Throwable $exception) {
// $this->addError($exception->getMessage());
$this->application->addError($exception->getMessage());
} finally {
$event->trigger(Event::RELEASE_ALL);
Logger::insert();