add context() fetch data mode

enable coroutine override
This commit is contained in:
whale
2020-04-14 23:46:42 +08:00
parent c1f720a0b3
commit b560246efb
8 changed files with 43 additions and 15 deletions

View File

@@ -43,6 +43,9 @@ class EventHandler
} catch (Exception $e) {
/** @var Response $param1 */
$param1->status(500);
Console::info($param0->server["remote_addr"].":".$param0->server["remote_port"].
" [".$param1->getStatusCode()."] ".$param0->server["request_uri"]
);
if (!$param1->isEnd()) $param1->end("Internal server error: " . $e->getMessage());
Console::error("Internal server error (500), caused by uncaught exception.");
Console::log($e->getTraceAsString(), "gray");

View File

@@ -39,17 +39,19 @@ class MessageEvent implements SwooleEvent
*/
public function onActivate() {
ZMUtil::checkWait();
$conn = ConnectionManager::get($this->frame->fd);
set_coroutine_params(["server" => $this->server, "frame" => $this->frame, "connection" => $conn]);
try {
if (ConnectionManager::get($this->frame->fd)->getType() == "qq") {
if ($conn->getType() == "qq") {
$data = json_decode($this->frame->data, true);
if (isset($data["post_type"])) {
set_coroutine_params(["data" => $data, "connection" => $conn]);
EventHandler::callCQEvent($data, ConnectionManager::get($this->frame->fd), 0);
} else
EventHandler::callCQResponse($data);
}
foreach (ZMBuf::$events[SwooleEventAt::class] ?? [] as $v) {
if (strtolower($v->type) == "message" && $this->parseSwooleRule($v)) {
$conn = ConnectionManager::get($this->frame->fd);
$c = $v->class;
/** @var ModBase $class */
$class = new $c(["server" => $this->server, "frame" => $this->frame, "connection" => $conn], ModHandleType::SWOOLE_MESSAGE);
@@ -91,4 +93,4 @@ class MessageEvent implements SwooleEvent
}
return true;
}
}
}

View File

@@ -30,6 +30,7 @@ class WSCloseEvent implements SwooleEvent
public function onActivate() {
ZMUtil::checkWait();
ConnectionManager::close($this->fd);
set_coroutine_params(["server" => $this->server, "fd" => $this->fd]);
foreach(ZMBuf::$events[SwooleEventAt::class] ?? [] as $v) {
if(strtolower($v->type) == "close" && $this->parseSwooleRule($v)) {
$c = $v->class;
@@ -60,4 +61,4 @@ class WSCloseEvent implements SwooleEvent
private function parseSwooleRule($v) {
return true;
}
}
}

View File

@@ -55,6 +55,7 @@ class WSOpenEvent implements SwooleEvent
$this->conn = new $type_conn($this->server, $this->request->fd);
}
ZMBuf::$connect[$this->request->fd] = $this->conn;
set_coroutine_params(["server" => $this->server, "request" => $this->request, "connection" => $this->conn]);
foreach (ZMBuf::$events[SwooleEventAt::class] ?? [] as $v) {
if (strtolower($v->type) == "open" && $this->parseSwooleRule($v) === true) {
$c = $v->class;
@@ -90,4 +91,4 @@ class WSOpenEvent implements SwooleEvent
}
return true;
}
}
}

View File

@@ -94,6 +94,7 @@ class WorkerStartEvent implements SwooleEvent
$class = new $class_name(["server" => $this->server, "worker_id" => $this->worker_id], ModHandleType::SWOOLE_WORKER_START);
call_user_func_array([$class, $v->method], []);
}
set_coroutine_params(["server" => $this->server, "worker_id" => $this->worker_id]);
foreach (ZMBuf::$events[SwooleEventAfter::class] ?? [] as $v) {
/** @var AnnotationBase $v */
if (strtolower($v->type) == "workerstart") {
@@ -156,4 +157,4 @@ class WorkerStartEvent implements SwooleEvent
DataProvider::saveBuffer();
});
}
}
}