From 2190367dffc76e5389fc2b006997748eddb6eb3b Mon Sep 17 00:00:00 2001 From: wh <382379437@qq.com> Date: Sat, 13 Jul 2024 00:47:07 +0800 Subject: [PATCH] fixed --- .../api/logic/AudioRevertLogic.php | 2 +- .../api/logic/RealTimeASRClient.php | 78 +++ .../application/index/controller/Test.php | 31 +- .../application/index/logic/events/Events.php | 142 +--- digital_doctor/composer.json | 6 +- digital_doctor/config/app.php | 4 + digital_doctor/public/test.php | 90 +-- .../vendor/composer/autoload_files.php | 1 + .../vendor/composer/autoload_psr4.php | 11 +- .../vendor/composer/autoload_static.php | 59 +- digital_doctor/vendor/composer/installed.json | 627 ++++++++++++++++++ digital_doctor/vendor/composer/installed.php | 85 ++- 12 files changed, 889 insertions(+), 247 deletions(-) create mode 100644 digital_doctor/application/api/logic/RealTimeASRClient.php diff --git a/digital_doctor/application/api/logic/AudioRevertLogic.php b/digital_doctor/application/api/logic/AudioRevertLogic.php index d289f13..5cf4b4c 100644 --- a/digital_doctor/application/api/logic/AudioRevertLogic.php +++ b/digital_doctor/application/api/logic/AudioRevertLogic.php @@ -102,7 +102,7 @@ class AudioRevertLogic extends BaseLogic function revert_test($client_id,$audioData){ $xunfei_record_config = config('xunfei_record_config'); $appId = $xunfei_record_config['appid']; - $secretKey = $xunfei_record_config['secretKey']; + $secretKey = $xunfei_record_config['APIKey']; dump($xunfei_record_config); $client = new LfasrClient($appId, $secretKey); diff --git a/digital_doctor/application/api/logic/RealTimeASRClient.php b/digital_doctor/application/api/logic/RealTimeASRClient.php new file mode 100644 index 0000000..a11934b --- /dev/null +++ b/digital_doctor/application/api/logic/RealTimeASRClient.php @@ -0,0 +1,78 @@ +request('GET', $url) + ->then(function ($request) use ($loop) { + $request->on('response', function ($response) use ($loop) { + $response->on('data', function ($chunk) { + echo "Received: " . $chunk . PHP_EOL; + }); + + $response->on('close', function () { + echo "Connection closed." . PHP_EOL; + }); + + // 创建一个通过流,用于发送音频数据 + $stream = new ThroughStream(); + $stream->pipe($response); + + // 这里可以发送音频数据,假设你有一个音频文件 + // 注意:这只是一个示例,你需要根据实际情况发送数据 + // $audioData = file_get_contents('/path/to/audio.pcm'); + // $stream->write($audioData); + + // 发送结束标志 + $stream->end(json_encode(["end" => true])); + }); + }) + ->then(null, function ($e) { + echo "Error: " . $e->getMessage() . PHP_EOL; + }); + + $loop->run(); + } +} + diff --git a/digital_doctor/application/index/controller/Test.php b/digital_doctor/application/index/controller/Test.php index 888ec17..6e61b0d 100644 --- a/digital_doctor/application/index/controller/Test.php +++ b/digital_doctor/application/index/controller/Test.php @@ -11,6 +11,7 @@ namespace app\index\controller; use app\api\controller\BaseCommonController; use app\api\logic\AudioRevertLogic; +use app\api\logic\RealTimeASRClient; use app\api\logic\UserLogic; use IFlytek\Xfyun\Speech\LfasrClient; use think\Controller; @@ -22,39 +23,17 @@ use wanghua\general_utility_tools_php\tool\Bank; use wanghua\general_utility_tools_php\tool\Tools; /** - * + * @deprecated */ class Test extends BasePublicController { function test() { + //ws://rtasr.xfyun.cn/v1/ws?appid=595f23df&ts=1512041814&signa=IrrzsJeOFk1NGfJHW6SkHUoN9CU=&pd=edu + $obj = new AudioRevertLogic(); + $obj->revert_test(1,1); - - - //(new AudioRevertLogic())->revert('asdsssssssssss',''); - //(new AudioRevertLogic())->revert_test('asdsssssssssss',''); - - //revert_test - // 使用mt_rand()生成随机数 - //$randomNumber = mt_rand(0, 2); - // - //echo $randomNumber; - - //(new UserLogic())->offline(input('client_id','asdsssssssssss')); - //$res = Db::table('fa_users')->find(); - //dump($res); - - //$res = Db::connect('mysql://cup_defense:z8PMXE3PGsy7WiFP@127.0.0.1:3306/cup_defense#utf8')->table('fa_users')->find(); - //dump($res); - - - //$res = Curl::curl_get('https://qifu.baidu.com/ip/geo/v1/district?ip=183.227.88.8'); - //dump($res);die; - //$res = (new Bank())->getBankSimpleInfoByBankNo('6217003760019611401'); - // - //dump($res); - //dump(Request::host()); } function testwss(){ diff --git a/digital_doctor/application/index/logic/events/Events.php b/digital_doctor/application/index/logic/events/Events.php index 334c980..4d34b3f 100644 --- a/digital_doctor/application/index/logic/events/Events.php +++ b/digital_doctor/application/index/logic/events/Events.php @@ -60,43 +60,10 @@ class Events extends \think\worker\Events public static function onWorkerStart(Worker $businessWorker) { $app = new Application; - //config([ - // 'database' => [ - // // 数据库类型 - // 'type' => 'mysql', - // // 服务器地址 - // 'hostname' => '127.0.0.1',//, - // // 数据库名 - // 'database' => 'cup_defense', - // // 数据库用户名 - // 'username' => 'cup_defense', - // // 数据库密码 - // 'password' => 'z8PMXE3PGsy7WiFP', - // // 数据库连接端口 - // 'hostport' => 3306, - // // 数据库编码默认采用utf8 - // 'charset' => 'utf8', - // // 连接dsn - // 'dsn' => '', - // // 数据库连接参数 - // 'params' => [], - // // 数据库表前缀 - // 'prefix' => '', - // ], - //]); $app->initialize(); - // 输出数据库配置 - //Tools::log_to_write_txt(['onWorkerStart_database'=>config('database.')]); - //// 加载数据库配置 - // 输出数据库配置 - //Tools::log_to_write_txt(['onWorkerStart_database'=>config('database.')]); - // 初始化数据库连接 - //Db::init(); - //Db::connect(); - // 在工作进程开始时,可以在这里执行一次数据库查询 - //Db::table('fa_users')->find(); + } /** @@ -116,44 +83,6 @@ class Events extends \think\worker\Events Gateway::sendToCurrentClient($json); } - /** - * onWebSocketConnect 事件回调 - * 当客户端连接上gateway完成websocket握手时触发 - * - * @param integer $client_id 断开连接的客户端client_id - * @param mixed $data { - "get":[ - - ], - "server":{ - "REQUEST_METHOD":"GET", - "REQUEST_URI":"/wss", - "SERVER_PROTOCOL":"HTTP/1.1", - "HTTP_UPGRADE":"websocket", - "HTTP_CONNECTION":"Upgrade", - "HTTP_X_REAL_IP":"183.227.89.107", - "HTTP_HOST":"127.0.0.1:2000", - "SERVER_NAME":"127.0.0.1", - "SERVER_PORT":"2000", - "HTTP_PRAGMA":"no-cache", - "HTTP_CACHE_CONTROL":"no-cache", - "HTTP_USER_AGENT":"wechatdevtools desktopapp appservice port/62717 token/589065e467011760c777411fca2cd0aa runtime/2 MicroMessenger", - "HTTP_ORIGIN":"https://boomim.playone.cn", - "HTTP_SEC_WEBSOCKET_VERSION":"13", - "HTTP_ACCEPT_ENCODING":"gzip, deflate, br", - "HTTP_ACCEPT_LANGUAGE":"zh-CN,zh;q=0.9", - "HTTP_CONTENT_TYPE":"application/json", - "HTTP_REFERER":"https://servicewechat.com/wx55e10fb2834803d5/devtools/page-frame.html", - "HTTP_SEC_WEBSOCKET_KEY":"uWOWC1AZahJOpS18hN3ZHA==", - "HTTP_SEC_WEBSOCKET_EXTENSIONS":"permessage-deflate; client_max_window_bits", - "QUERY_STRING":"" - }, - "cookie":[ - - ] - } - * @return void - */ public static function onWebSocketConnect($client_id, $data) { @@ -191,65 +120,20 @@ class Events extends \think\worker\Events return ; } //解析消息 + $xunfei_record_config = config('xunfei_record_config'); + $appId = $xunfei_record_config['appid']; + $secretKey = $xunfei_record_config['secretKey']; //解析action - - //调用业务逻辑&响应处理结果 - //(new WssMessageLogic())->domsg($client_id,$data); - - //$client = new VmsClient('YOUR_APPID', 'YOUR_SECRET_KEY'); - - // 音频数据接收处理 - //$audioData = $data; - - //// 将音频数据转换为文件,以便传递给iFLYTEK SDK - //$tempFile = tempnam(sys_get_temp_dir(), 'audio'); - //Tools::log_to_write_txt(['tempFile:',$tempFile]); - //file_put_contents($tempFile, $audioData); - // - //// 设置转写参数 - //$lfasrConfig = [ - // 'hasParticiple' => 'true', - // //'sample_rate' => 16000, // 采样率 - // 'language' => 'zh_cn', // 语言 - // //... - //]; - //$xunfei_record_config = config('xunfei_record_config'); - //$appId = $xunfei_record_config['appid']; - //$secretKey = $xunfei_record_config['secretKey']; - // - //Tools::log_to_write_txt(['app_id:',$appId]); - //Tools::log_to_write_txt(['secret_key:',$secretKey]); - // - //$filePath = $tempFile;//'/Users/wh/Desktop/test.wav'; - //// 这里的$appId、$secretKey是在开放平台控制台获得 - //$client = new LfasrClient($appId, $secretKey, $lfasrConfig); - //Tools::log_to_write_txt(['初始化$client:'=>$client]); - //if(empty($client)){ - // Tools::log_to_write_txt(['初始化client初始化失败:$client为空。'=>$client]); - // return; - //} - // - //// $filePath为待转写的本地文件路径,返回taskId作为后续查询进度、获取结果操作的参数 - //$taskId = $client->combineUpload($filePath); - //Tools::log_to_write_txt(['taskId:'=>$taskId]); - // - //// 查询进度,json格式 - //$progress = $client->getProgress($taskId)->getBody()->getContents(); - //Tools::log_to_write_txt(['查询进度,json格式:'=>$progress]); - //// 获取结果,json格式 - //$result = $client->getResult($taskId)->getBody()->getContents(); - //Tools::log_to_write_txt(['获取结果,json格式:'=>$result]); - //// 清理临时文件 - //unlink($tempFile); - - (new AudioRevertLogic())->revert($client_id,$data); - - //sleep(5); - //} while (true); - - //// 处理翻译结果,例如保存到数据库或返回给前端 - //Gateway::sendToClient($client_id, $result); + // 处理接收到的语音数据 + // 这里需要将二进制数据转换为讯飞API所需的格式 + // 以下代码仅为示例,具体实现需要根据讯飞API文档进行调整 + $lfasrClient = new LfasrClient($appId, $secretKey); + $lfasrClient->sendBinaryData($data, function ($result) use ($client_id) { + // 处理讯飞API返回的实时转写结果 + // 将结果发送回客户端 + Gateway::sendToClient($client_id, json_encode(['type' => 'transcription', 'data' => $result])); + }); } diff --git a/digital_doctor/composer.json b/digital_doctor/composer.json index 5de7cbe..26fd8c1 100644 --- a/digital_doctor/composer.json +++ b/digital_doctor/composer.json @@ -24,7 +24,9 @@ "ext-json": "*", "ext-mbstring": "*", "doing/phpqrcode": "dev-master", - "iflytekop/xfyun-sdk": "^2.0" + "iflytekop/xfyun-sdk": "^2.0", + "react/socket": "^1.15", + "react/http": "^1.10" }, "autoload": { "psr-4": { @@ -43,7 +45,7 @@ "repositories": { "packagist": { "type": "composer", - "url": "https://mirrors.aliyun.com/composer/" + "url": "https://mirrors.cloud.tencent.com/composer/" } } } diff --git a/digital_doctor/config/app.php b/digital_doctor/config/app.php index 4c2c9d5..76c92c1 100644 --- a/digital_doctor/config/app.php +++ b/digital_doctor/config/app.php @@ -198,8 +198,12 @@ return [ ], //讯飞录音接口 'xunfei_record_config'=>[ + //优一 'appid'=>'de02dasd', 'APIKey'=>'31ce3f96c062958df3c426da4903540c', + 'secretKey'=>'MjcyOGE5ODg3ODM2ZWU5MTNiODc0M2Zl', + + //测试 //'appid'=>'d482af59', //'APIKey'=>'0d20dab630904ad8676d9075375a1914', //'secretKey'=>'Yjg0YTAyNmE5OGUwNDE3YjU4NWE4NmZh', diff --git a/digital_doctor/public/test.php b/digital_doctor/public/test.php index 587a4b1..a2693b3 100644 --- a/digital_doctor/public/test.php +++ b/digital_doctor/public/test.php @@ -1,87 +1,9 @@ ws = new \WebSocket\Client($base_url . "?appid=" . $app_id . "&ts=" . $ts . "&signa=" . $signa); - } - - public function send($file_path) - { - $file_object = fopen($file_path, 'rb'); - try { - $index = 1; - while (!feof($file_object)) { - $chunk = fread($file_object, 1280); - if (!$chunk) { - break; - } - $this->ws->send($chunk); - - $index += 1; - sleep(0.04); - } - } finally { - fclose($file_object); - } - - $this->ws->send($this->end_tag); - echo "send end tag success"; - } - - public function recv() - { - while ($this->ws->isConnected()) { - $result = $this->ws->receive(); - if (strlen($result) == 0) { - echo "receive result end"; - break; - } - $result_dict = json_decode($result, true); - // 解析结果 - if ($result_dict["action"] == "started") { - echo "handshake success, result: " . $result; - } - - if ($result_dict["action"] == "result") { - $result_1 = $result_dict; - echo "rtasr result: " . $result_1["data"]; - } - - if ($result_dict["action"] == "error") { - echo "rtasr error: " . $result; - $this->ws->close(); - return; - } - } - } - - public function close() - { - $this->ws->close(); - echo "connection closed"; - } -} - - -$app_id = 'de02dasd'; -$api_key = '31ce3f96c062958df3c426da4903540c'; -$file_path = "/www/wwwroot/digital_doctor/digital_doctor/public/iseTest.mp3"; - -$client = new Client($app_id,$api_key); -$client->send($file_path); +$signa = sign_V1($appId, $apiKey, $ts); +echo $signa; // 输出: IrrzsJeOFk1NGfJHW6SkHUoN9CU= \ No newline at end of file diff --git a/digital_doctor/vendor/composer/autoload_files.php b/digital_doctor/vendor/composer/autoload_files.php index 9e44cd8..ccade4f 100644 --- a/digital_doctor/vendor/composer/autoload_files.php +++ b/digital_doctor/vendor/composer/autoload_files.php @@ -8,6 +8,7 @@ $baseDir = dirname($vendorDir); return array( '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', + 'ad155f8f1cf0d418fe49e248db8c661b' => $vendorDir . '/react/promise/src/functions_include.php', '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', 'ffc1d7141d4fcbaeb47a6929f0811ed1' => $vendorDir . '/topthink/think-worker/src/command.php', diff --git a/digital_doctor/vendor/composer/autoload_psr4.php b/digital_doctor/vendor/composer/autoload_psr4.php index efa079a..2cc99ce 100644 --- a/digital_doctor/vendor/composer/autoload_psr4.php +++ b/digital_doctor/vendor/composer/autoload_psr4.php @@ -12,8 +12,15 @@ return array( 'app\\' => array($baseDir . '/application'), 'Workerman\\' => array($vendorDir . '/workerman/workerman'), 'WebSocket\\' => array($vendorDir . '/textalk/websocket/lib'), + 'React\\Stream\\' => array($vendorDir . '/react/stream/src'), + 'React\\Socket\\' => array($vendorDir . '/react/socket/src'), + 'React\\Promise\\' => array($vendorDir . '/react/promise/src'), + 'React\\Http\\' => array($vendorDir . '/react/http/src'), + 'React\\EventLoop\\' => array($vendorDir . '/react/event-loop/src'), + 'React\\Dns\\' => array($vendorDir . '/react/dns/src'), + 'React\\Cache\\' => array($vendorDir . '/react/cache/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'), + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'), 'Phrity\\Util\\' => array($vendorDir . '/phrity/util-errorhandler/src'), 'Phrity\\Net\\' => array($vendorDir . '/phrity/net-uri/src'), @@ -25,4 +32,6 @@ return array( 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 'GatewayWorker\\' => array($vendorDir . '/workerman/gateway-worker/src'), + 'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'), + 'Evenement\\' => array($vendorDir . '/evenement/evenement/src'), ); diff --git a/digital_doctor/vendor/composer/autoload_static.php b/digital_doctor/vendor/composer/autoload_static.php index 04058c5..52e872b 100644 --- a/digital_doctor/vendor/composer/autoload_static.php +++ b/digital_doctor/vendor/composer/autoload_static.php @@ -9,6 +9,7 @@ class ComposerStaticInit296bd8a1d28e39d56dcd80ce7be249f3 public static $files = array ( '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', + 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', 'ffc1d7141d4fcbaeb47a6929f0811ed1' => __DIR__ . '/..' . '/topthink/think-worker/src/command.php', @@ -33,6 +34,16 @@ class ComposerStaticInit296bd8a1d28e39d56dcd80ce7be249f3 'Workerman\\' => 10, 'WebSocket\\' => 10, ), + 'R' => + array ( + 'React\\Stream\\' => 13, + 'React\\Socket\\' => 13, + 'React\\Promise\\' => 14, + 'React\\Http\\' => 11, + 'React\\EventLoop\\' => 16, + 'React\\Dns\\' => 10, + 'React\\Cache\\' => 12, + ), 'P' => array ( 'Psr\\Log\\' => 8, @@ -58,6 +69,14 @@ class ComposerStaticInit296bd8a1d28e39d56dcd80ce7be249f3 'GuzzleHttp\\' => 11, 'GatewayWorker\\' => 14, ), + 'F' => + array ( + 'Fig\\Http\\Message\\' => 17, + ), + 'E' => + array ( + 'Evenement\\' => 10, + ), ); public static $prefixDirsPsr4 = array ( @@ -85,14 +104,42 @@ class ComposerStaticInit296bd8a1d28e39d56dcd80ce7be249f3 array ( 0 => __DIR__ . '/..' . '/textalk/websocket/lib', ), + 'React\\Stream\\' => + array ( + 0 => __DIR__ . '/..' . '/react/stream/src', + ), + 'React\\Socket\\' => + array ( + 0 => __DIR__ . '/..' . '/react/socket/src', + ), + 'React\\Promise\\' => + array ( + 0 => __DIR__ . '/..' . '/react/promise/src', + ), + 'React\\Http\\' => + array ( + 0 => __DIR__ . '/..' . '/react/http/src', + ), + 'React\\EventLoop\\' => + array ( + 0 => __DIR__ . '/..' . '/react/event-loop/src', + ), + 'React\\Dns\\' => + array ( + 0 => __DIR__ . '/..' . '/react/dns/src', + ), + 'React\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/react/cache/src', + ), 'Psr\\Log\\' => array ( 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', ), 'Psr\\Http\\Message\\' => array ( - 0 => __DIR__ . '/..' . '/psr/http-message/src', - 1 => __DIR__ . '/..' . '/psr/http-factory/src', + 0 => __DIR__ . '/..' . '/psr/http-factory/src', + 1 => __DIR__ . '/..' . '/psr/http-message/src', ), 'Psr\\Http\\Client\\' => array ( @@ -138,6 +185,14 @@ class ComposerStaticInit296bd8a1d28e39d56dcd80ce7be249f3 array ( 0 => __DIR__ . '/..' . '/workerman/gateway-worker/src', ), + 'Fig\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/fig/http-message-util/src', + ), + 'Evenement\\' => + array ( + 0 => __DIR__ . '/..' . '/evenement/evenement/src', + ), ); public static $classMap = array ( diff --git a/digital_doctor/vendor/composer/installed.json b/digital_doctor/vendor/composer/installed.json index c76e50f..fe37818 100644 --- a/digital_doctor/vendor/composer/installed.json +++ b/digital_doctor/vendor/composer/installed.json @@ -54,6 +54,105 @@ }, "install-path": "../doing/phpqrcode" }, + { + "name": "evenement/evenement", + "version": "v3.0.2", + "version_normalized": "3.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/evenement/evenement/v3.0.2/evenement-evenement-v3.0.2.zip", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9 || ^6" + }, + "time": "2023-08-08T05:53:35+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Evenement\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "install-path": "../evenement/evenement" + }, + { + "name": "fig/http-message-util", + "version": "1.1.5", + "version_normalized": "1.1.5.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message-util.git", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/fig/http-message-util/1.1.5/fig-http-message-util-1.1.5.zip", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" + }, + "time": "2020-11-24T22:02:12+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Fig\\Http\\Message\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "install-path": "../fig/http-message-util" + }, { "name": "guzzlehttp/guzzle", "version": "7.8.1", @@ -897,6 +996,534 @@ "description": "A polyfill for getallheaders.", "install-path": "../ralouphie/getallheaders" }, + { + "name": "react/cache", + "version": "v1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/react/cache/v1.2.0/react-cache-v1.2.0.zip", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "time": "2022-11-30T15:59:55+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "install-path": "../react/cache" + }, + { + "name": "react/dns", + "version": "v1.13.0", + "version_normalized": "1.13.0.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/react/dns/v1.13.0/react-dns-v1.13.0.zip", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "time": "2024-06-13T14:18:03+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "install-path": "../react/dns" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "version_normalized": "1.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/react/event-loop/v1.5.0/react-event-loop-v1.5.0.zip", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "time": "2023-11-13T13:48:05+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "install-path": "../react/event-loop" + }, + { + "name": "react/http", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/http.git", + "reference": "8111281ee57f22b7194f5dba225e609ba7ce4d20" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/react/http/v1.10.0/react-http-v1.10.0.zip", + "reference": "8111281ee57f22b7194f5dba225e609ba7ce4d20", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "fig/http-message-util": "^1.1", + "php": ">=5.3.0", + "psr/http-message": "^1.0", + "react/event-loop": "^1.2", + "react/promise": "^3 || ^2.3 || ^1.2.1", + "react/socket": "^1.12", + "react/stream": "^1.2" + }, + "require-dev": { + "clue/http-proxy-react": "^1.8", + "clue/reactphp-ssh-proxy": "^1.4", + "clue/socks-react": "^1.4", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4 || ^3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.9" + }, + "time": "2024-03-27T17:20:46+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "React\\Http\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven, streaming HTTP client and server implementation for ReactPHP", + "keywords": [ + "async", + "client", + "event-driven", + "http", + "http client", + "http server", + "https", + "psr-7", + "reactphp", + "server", + "streaming" + ], + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "install-path": "../react/http" + }, + { + "name": "react/promise", + "version": "v3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/react/promise/v3.2.0/react-promise-v3.2.0.zip", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "time": "2024-05-24T10:39:05+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "install-path": "../react/promise" + }, + { + "name": "react/socket", + "version": "v1.15.0", + "version_normalized": "1.15.0.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/react/socket/v1.15.0/react-socket-v1.15.0.zip", + "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.11", + "react/event-loop": "^1.2", + "react/promise": "^3 || ^2.6 || ^1.2.1", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4 || ^3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.10" + }, + "time": "2023-12-15T11:02:10+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "React\\Socket\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "install-path": "../react/socket" + }, + { + "name": "react/stream", + "version": "v1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://mirrors.huaweicloud.com/repository/php/react/stream/v1.4.0/react-stream-v1.4.0.zip", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "time": "2024-06-11T12:45:25+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "install-path": "../react/stream" + }, { "name": "symfony/deprecation-contracts", "version": "v2.5.3", diff --git a/digital_doctor/vendor/composer/installed.php b/digital_doctor/vendor/composer/installed.php index a4b9d93..69dfe4c 100644 --- a/digital_doctor/vendor/composer/installed.php +++ b/digital_doctor/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '0f25829d6a3abf7353ffa5d5bf4e01aa18dbbeaa', + 'reference' => '44d6a1df3c31fcf14c6c0dffd72b11b14c6d40bf', 'name' => 'topthink/think', 'dev' => true, ), @@ -21,6 +21,24 @@ 'reference' => '600baab04cd4dfe2b307a321775ec5a66e330560', 'dev_requirement' => false, ), + 'evenement/evenement' => array( + 'pretty_version' => 'v3.0.2', + 'version' => '3.0.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../evenement/evenement', + 'aliases' => array(), + 'reference' => '0a16b0d71ab13284339abb99d9d2bd813640efbc', + 'dev_requirement' => false, + ), + 'fig/http-message-util' => array( + 'pretty_version' => '1.1.5', + 'version' => '1.1.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../fig/http-message-util', + 'aliases' => array(), + 'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765', + 'dev_requirement' => false, + ), 'guzzlehttp/guzzle' => array( 'pretty_version' => '7.8.1', 'version' => '7.8.1.0', @@ -156,6 +174,69 @@ 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'dev_requirement' => false, ), + 'react/cache' => array( + 'pretty_version' => 'v1.2.0', + 'version' => '1.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../react/cache', + 'aliases' => array(), + 'reference' => 'd47c472b64aa5608225f47965a484b75c7817d5b', + 'dev_requirement' => false, + ), + 'react/dns' => array( + 'pretty_version' => 'v1.13.0', + 'version' => '1.13.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../react/dns', + 'aliases' => array(), + 'reference' => 'eb8ae001b5a455665c89c1df97f6fb682f8fb0f5', + 'dev_requirement' => false, + ), + 'react/event-loop' => array( + 'pretty_version' => 'v1.5.0', + 'version' => '1.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../react/event-loop', + 'aliases' => array(), + 'reference' => 'bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354', + 'dev_requirement' => false, + ), + 'react/http' => array( + 'pretty_version' => 'v1.10.0', + 'version' => '1.10.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../react/http', + 'aliases' => array(), + 'reference' => '8111281ee57f22b7194f5dba225e609ba7ce4d20', + 'dev_requirement' => false, + ), + 'react/promise' => array( + 'pretty_version' => 'v3.2.0', + 'version' => '3.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../react/promise', + 'aliases' => array(), + 'reference' => '8a164643313c71354582dc850b42b33fa12a4b63', + 'dev_requirement' => false, + ), + 'react/socket' => array( + 'pretty_version' => 'v1.15.0', + 'version' => '1.15.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../react/socket', + 'aliases' => array(), + 'reference' => '216d3aec0b87f04a40ca04f481e6af01bdd1d038', + 'dev_requirement' => false, + ), + 'react/stream' => array( + 'pretty_version' => 'v1.4.0', + 'version' => '1.4.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../react/stream', + 'aliases' => array(), + 'reference' => '1e5b0acb8fe55143b5b426817155190eb6f5b18d', + 'dev_requirement' => false, + ), 'symfony/deprecation-contracts' => array( 'pretty_version' => 'v2.5.3', 'version' => '2.5.3.0', @@ -189,7 +270,7 @@ 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '0f25829d6a3abf7353ffa5d5bf4e01aa18dbbeaa', + 'reference' => '44d6a1df3c31fcf14c6c0dffd72b11b14c6d40bf', 'dev_requirement' => false, ), 'topthink/think-installer' => array(