Files
zhamao-framework/src/cqbot/event/server/WSOpenEvent.php
2018-11-28 13:26:18 +08:00

56 lines
2.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Created by PhpStorm.
* User: jerry
* Date: 2018/5/26
* Time: 下午4:10
*/
class WSOpenEvent extends ServerEvent
{
public function __construct(swoole_websocket_server $server, swoole_http_request $request) {
parent::__construct($server);
$fd = $request->fd;
$get = $request->get;
$header = $request->header;
//echo json_encode($header, 128|256);
$connect_type = $get["type"] ?? (isset($header["x-client-role"]) ? strtolower($header["x-client-role"]) : "");
$access_token = $get["token"] ?? (isset($header["authorization"]) ? explode(" ", $header["authorization"])[1] : "");
//Console::info("链接类型:".$connect_type."\n链接token".$access_token);
if ($connect_type == "") {
Console::info("未指定连接类型,关闭连接.");
$server->close($fd);
return;
}
//if (isset($request->header["authorization"])) {
//$tokens = explode(" ", $request->header["authorization"]);
//$tokens = trim($tokens[1]);
if ($access_token !== Cache::get("access_token") && Cache::get("access_token") != "") {
Console::info("监测到WS连接但是token不对无法匹配。");
$server->close($fd);
return;
}
switch ($connect_type) {
case "event":
case "api":
case "universal":
$self_id = $get["qq"] ?? ($header["x-self-id"] ?? "");
Console::info("收到 " . $connect_type . " 连接,来自机器人:" . $self_id . "fd" . $fd);
$conn = new RobotWSConnection($server, $fd, $self_id, $request, $connect_type);
if($conn->create_success) ConnectionManager::set($fd, $conn);
else {
Console::error("初始化WS连接失败fd".$fd."QQ".$self_id);
$server->close($fd);
return;
}
break;
case "custom":
$conn = new CustomWSConnection($server, $fd, $request);
if($conn->create_success) ConnectionManager::set($fd, $conn);
break;
default:
Console::info("Unknown WS Connection connected. I will close it.");
$server->close($fd);
}
}
}