Files
kiri-core/system/Annotation/Definition/Websocket.php
T

67 lines
1.1 KiB
PHP
Raw Normal View History

2020-08-31 01:27:08 +08:00
<?php
namespace Snowflake\Annotation;
use ReflectionClass;
/**
* Class Websocket
* @package Snowflake\Annotation
*/
class Websocket extends Annotation
{
const MESSAGE = 'WEBSOCKET:MESSAGE:';
const EVENT = 'WEBSOCKET:EVENT:';
public $Message;
public $Event;
/**
* @param ReflectionClass $reflect
* @param array $methods
*/
public function resolve(ReflectionClass $reflect, array $methods)
{
$controller = $reflect->newInstance();
foreach ($methods as $function) {
$comment = $function->getDocComment();
$methodName = $function->getName();
preg_match('/@Event\((.*)?\)/', $comment, $events);
if (!isset($events[1])) {
continue;
}
if (!($_key = $this->getName($events, $comment))) {
continue;
}
$this->push($_key, [$controller, $methodName]);
}
}
/**
* @param $events
* @param $comment
* @return false|string
*/
private function getName($events, $comment)
{
$event = $events[1];
if ($event !== 'message') {
return self::EVENT . $event;
}
preg_match('/@Message\((.*)?\)/', $comment, $message);
if (isset($message[1])) {
return false;
}
return self::MESSAGE . $message[1];
}
}