initial 2.0.0-a4 commit

This commit is contained in:
jerry
2020-11-03 21:02:24 +08:00
parent da584e0542
commit 29fa9d8662
48 changed files with 794 additions and 1470 deletions

View File

@@ -6,9 +6,9 @@ namespace ZM\API;
use Co;
use ZM\ConnectionManager\ConnectionObject;
use ZM\Console\Console;
use ZM\Event\EventHandler;
use ZM\Store\LightCache;
use ZM\Store\ZMBuf;
use ZM\Store\LightCacheInside;
use ZM\Store\Lock\SpinLock;
use ZM\Store\ZMAtomic;
trait CQAPI
{
@@ -28,30 +28,28 @@ trait CQAPI
}
public function processWebsocketAPI($connection, $reply, $function = false) {
$api_id = ZMBuf::atomic("wait_msg_id")->get();
$api_id = ZMAtomic::get("wait_msg_id")->add(1);
$reply["echo"] = $api_id;
ZMBuf::atomic("wait_msg_id")->add(1);
EventHandler::callCQAPISend($reply, $connection);
if ($function === true) {
LightCache::set("sent_api_".$api_id, [
"data" => $reply,
"time" => microtime(true),
"coroutine" => Co::getuid(),
"self_id" => $connection->getOption("connect_id")
]);
} else {
LightCache::set("sent_api_".$api_id, [
"data" => $reply,
"time" => microtime(true),
"self_id" => $connection->getOption("connect_id")
]);
}
//EventHandler::callCQAPISend($reply, $connection);
SpinLock::lock("wait_api");
$r = LightCacheInside::get("wait_api", "wait_api");
$r[$api_id] = [
"data" => $reply,
"time" => microtime(true),
"self_id" => $connection->getOption("connect_id")
];
if ($function === true) $r[$api_id]["coroutine"] = Co::getuid();
LightCacheInside::set("wait_api", "wait_api", $r);
SpinLock::unlock("wait_api");
if (server()->push($connection->getFd(), json_encode($reply))) {
if ($function === true) {
Co::suspend();
$data = LightCache::get("sent_api_".$api_id);
LightCache::unset("sent_api_".$api_id);
SpinLock::lock("wait_api");
$r = LightCacheInside::get("wait_api", "wait_api");
$data = $r[$api_id];
unset($r[$api_id]);
LightCacheInside::set("wait_api", "wait_api", $r);
SpinLock::unlock("wait_api");
return isset($data['result']) ? $data['result'] : null;
}
return true;
@@ -63,15 +61,23 @@ trait CQAPI
"data" => null,
"self_id" => $connection->getOption("connect_id")
];
$s = LightCache::get("sent_api_".$reply["echo"]);
if (($s["func"] ?? null) !== null)
call_user_func($s["func"], $response, $reply);
LightCache::unset("sent_api_".$reply["echo"]);
SpinLock::lock("wait_api");
$r = LightCacheInside::get("wait_api", "wait_api");
unset($r[$reply["echo"]]);
LightCacheInside::set("wait_api", "wait_api", $r);
SpinLock::unlock("wait_api");
if ($function === true) return $response;
return false;
}
}
/**
* @param $connection
* @param $reply
* @param null $function
* @return bool
* @noinspection PhpUnusedParameterInspection
*/
public function processHttpAPI($connection, $reply, $function = null) {
return false;
}