[*] 优化

This commit is contained in:
acgist
2024-05-12 15:42:23 +08:00
parent 3d2f8e08f9
commit 90e32fa2e3
8 changed files with 160 additions and 79 deletions

View File

@@ -17,6 +17,7 @@
#include <future> #include <future>
#include <thread> #include <thread>
#include <chrono> #include <chrono>
#include <functional>
#include <uv.h> #include <uv.h>
@@ -42,21 +43,23 @@ static std::recursive_mutex taoyaoMutex;
// 读取JSON // 读取JSON
#ifndef TAOYAO_JSON_BODY #ifndef TAOYAO_JSON_BODY
#define TAOYAO_JSON_BODY(size) \ #define TAOYAO_JSON_BODY(size) \
napi_value ret; \ napi_value ret; \
size_t argc = size; \ size_t argc = size; \
napi_value args[size] = { nullptr }; \ napi_value args[size] = { nullptr }; \
napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); \ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); \
size_t length; \ size_t length; \
char chars[2048] = { 0 }; \ char* chars = new char[16 * 1024] { 0 }; \
napi_get_value_string_utf8(env, args[0], chars, sizeof(chars), &length); \ napi_get_value_string_utf8(env, args[0], chars, 16 * 1024, &length); \
if(length <= 0) { \ if(length <= 0) { \
OH_LOG_WARN(LOG_APP, "TAOYAO ERROR JSON: %{public}s", chars); \ OH_LOG_WARN(LOG_APP, "TAOYAO ERROR JSON: %{public}d %{public}s", length, chars); \
napi_create_int32(env, -1, &ret); \ napi_create_int32(env, -1, &ret); \
return ret; \ delete[] chars; \
} \ return ret; \
OH_LOG_DEBUG(LOG_APP, "TAOYAO JSON: %{public}s", chars); \ } \
nlohmann::json json = nlohmann::json::parse(chars, chars + length); \ OH_LOG_DEBUG(LOG_APP, "TAOYAO JSON: %{public}d %{public}s", length, chars); \
nlohmann::json json = nlohmann::json::parse(chars, chars + length); \
delete[] chars; \
nlohmann::json body = json["body"]; nlohmann::json body = json["body"];
#endif #endif
@@ -108,7 +111,7 @@ static acgist::MediaManager* mediaManager = nullptr;
// 房间管理 // 房间管理
static std::map<std::string, acgist::Room*> roomMap; static std::map<std::string, acgist::Room*> roomMap;
// 异步回调 // 异步回调
static std::map<uint64_t, std::promise<std::string>*> promiseMap; static std::map<uint64_t, std::promise<nlohmann::json>*> promiseMap;
/** /**
* 支持的编解码 * 支持的编解码
@@ -141,7 +144,6 @@ struct Message {
}; };
static void pushCallback(uv_work_t* work) { static void pushCallback(uv_work_t* work) {
// 不能调用ETS函数
} }
static void afterPushCallback(uv_work_t* work, int status) { static void afterPushCallback(uv_work_t* work, int status) {
@@ -181,7 +183,6 @@ void push(const std::string& signal, const std::string& body, uint64_t id) {
} }
static void requestCallback(uv_work_t* work) { static void requestCallback(uv_work_t* work) {
// 不能调用ETS函数
} }
static void afterRequestCallback(uv_work_t* work, int status) { static void afterRequestCallback(uv_work_t* work, int status) {
@@ -212,7 +213,7 @@ static void afterRequestCallback(uv_work_t* work, int status) {
/** /**
* 发送请求 * 发送请求
*/ */
std::string request(const std::string& signal, const std::string& body, uint64_t id) { nlohmann::json request(const std::string& signal, const std::string& body, uint64_t id) {
uv_loop_s* loop = nullptr; uv_loop_s* loop = nullptr;
napi_get_uv_event_loop(acgist::env, &loop); napi_get_uv_event_loop(acgist::env, &loop);
uv_work_t* work = new uv_work_t{}; uv_work_t* work = new uv_work_t{};
@@ -231,23 +232,56 @@ std::string request(const std::string& signal, const std::string& body, uint64_t
1000 * acgist::clientIndex + 1000 * acgist::clientIndex +
acgist::index; acgist::index;
} }
std::promise<std::string>* promise = new std::promise<std::string>{}; std::promise<nlohmann::json>* promise = new std::promise<nlohmann::json>{};
acgist::promiseMap.insert({ id, promise }); acgist::promiseMap.insert({ id, promise });
work->data = new Message{ id, signal, body }; work->data = new Message{ id, signal, body };
uv_queue_work(loop, work, requestCallback, afterRequestCallback); uv_queue_work(loop, work, requestCallback, afterRequestCallback);
std::future<std::string> future = promise->get_future(); std::future<nlohmann::json> future = promise->get_future();
if(future.wait_for(std::chrono::seconds(5)) == std::future_status::timeout) { if(future.wait_for(std::chrono::seconds(5)) == std::future_status::timeout) {
OH_LOG_WARN(LOG_APP, "请求超时:%{public}s %{public}s", signal.data(), body.data()); OH_LOG_WARN(LOG_APP, "请求超时:%{public}s %{public}s", signal.data(), body.data());
acgist::promiseMap.erase(id); acgist::promiseMap.erase(id);
delete promise; delete promise;
return "{}"; return nlohmann::json{};
} else { } else {
acgist::promiseMap.erase(id); acgist::promiseMap.erase(id);
delete promise; delete promise;
return future.get(); return std::move(future.get());
} }
} }
struct Adync {
std::function<void()>* function;
};
static void asyncCallback(uv_work_t* work) {
Adync* async = (Adync*) work->data;
(*async->function)();
delete async;
}
static void afterAsyncCallback(uv_work_t* work, int status) {
delete work;
}
/**
* 异步执行
* 注意此处不能使用promise-future等待
*
* @param function 方法
*
* @return 结果
*/
static int asyncExecute(std::function<void()> function) {
// uv_loop_s* loop = nullptr;
// napi_get_uv_event_loop(acgist::env, &loop);
// uv_work_t* work = new uv_work_t{};
// work->data = new Adync { &function };
// uv_queue_work(loop, work, asyncCallback, afterAsyncCallback);
std::thread thread(function);
thread.detach();
return 0;
}
/** /**
* 加载系统 * 加载系统
*/ */
@@ -326,9 +360,11 @@ static napi_value callback(napi_env env, napi_callback_info info) {
auto promise = acgist::promiseMap.find(id); auto promise = acgist::promiseMap.find(id);
if(promise == acgist::promiseMap.end()) { if(promise == acgist::promiseMap.end()) {
napi_create_int32(env, -1, &ret); napi_create_int32(env, -1, &ret);
OH_LOG_DEBUG(LOG_APP, "Promise回调无效%{public}lld", id);
} else { } else {
napi_create_int32(env, 0, &ret); napi_create_int32(env, 0, &ret);
promise->second->set_value(chars); promise->second->set_value(std::move(json));
OH_LOG_DEBUG(LOG_APP, "Promise回调成功%{public}lld", id);
} }
return ret; return ret;
} }
@@ -404,20 +440,29 @@ static napi_value roomInvite(napi_env env, napi_callback_info info) {
TAOYAO_JSON_BODY(1); TAOYAO_JSON_BODY(1);
{ {
std::lock_guard<std::recursive_mutex> roomLock(roomMutex); std::lock_guard<std::recursive_mutex> roomLock(roomMutex);
// TODO: 试试引用 std::string roomId = body["roomId"];
std::string roomId = body["roomId"]; std::string password;
std::string password = body["password"]; if(body.find("password") != body.end()) {
password = body["password"];
}
auto oldRoom = acgist::roomMap.find(roomId); auto oldRoom = acgist::roomMap.find(roomId);
if(oldRoom == acgist::roomMap.end()) { if(oldRoom == acgist::roomMap.end()) {
OH_LOG_INFO(LOG_APP, "进入房间:%s", roomId.data()); OH_LOG_INFO(LOG_APP, "进入房间:%{public}s", roomId.data());
auto room = new acgist::Room(roomId, mediaManager); auto room = new acgist::Room(roomId, mediaManager);
int result = room->enter(password); acgist::roomMap.insert({ roomId, room });
if(result == acgist::SUCCESS_CODE) { int result = asyncExecute([room, roomId, password]() {
acgist::roomMap.insert({ roomId, room }); int code = room->enter(password);
room->produceMedia(); if(code == acgist::SUCCESS_CODE) {
} else { try {
delete room; room->produceMedia();
} } catch(const std::exception& e) {
OH_LOG_ERROR(LOG_APP, "进入房间异常:%{public}s %{public}s", roomId.data(), e.what());
}
} else {
acgist::roomMap.erase(roomId);
delete room;
}
});
napi_create_int32(env, result, &ret); napi_create_int32(env, result, &ret);
} else { } else {
OH_LOG_INFO(LOG_APP, "已经进入房间:%s", roomId.data()); OH_LOG_INFO(LOG_APP, "已经进入房间:%s", roomId.data());

View File

@@ -54,7 +54,7 @@ extern void push(const std::string& signal, const std::string& body, uint64_t id
* *
* @return 响应 * @return 响应
*/ */
extern std::string request(const std::string& signal, const std::string& body, uint64_t id = 0L); extern nlohmann::json request(const std::string& signal, const std::string& body, uint64_t id = 0L);
} }

View File

@@ -13,7 +13,7 @@ static int32_t OnStreamEvent(OH_AudioCapturer* capturer, void* userData, OH_Audi
static int32_t OnInterruptEvent(OH_AudioCapturer* capturer, void* userData, OH_AudioInterrupt_ForceType type, OH_AudioInterrupt_Hint hint); static int32_t OnInterruptEvent(OH_AudioCapturer* capturer, void* userData, OH_AudioInterrupt_ForceType type, OH_AudioInterrupt_Hint hint);
acgist::AudioCapturer::AudioCapturer() { acgist::AudioCapturer::AudioCapturer() {
OH_AudioStream_Result ret = OH_AudioStreamBuilder_Create(&this->builder, AUDIOSTREAM_TYPE_RENDERER); OH_AudioStream_Result ret = OH_AudioStreamBuilder_Create(&this->builder, AUDIOSTREAM_TYPE_CAPTURER);
OH_LOG_INFO(LOG_APP, "配置音频构造器:%o", ret); OH_LOG_INFO(LOG_APP, "配置音频构造器:%o", ret);
// 配置音频采集参数 // 配置音频采集参数
OH_AudioStreamBuilder_SetSamplingRate(this->builder, acgist::samplingRate); OH_AudioStreamBuilder_SetSamplingRate(this->builder, acgist::samplingRate);

View File

@@ -3,7 +3,7 @@
acgist::LocalClient::LocalClient(acgist::MediaManager* mediaManager) : acgist::RoomClient(mediaManager) { acgist::LocalClient::LocalClient(acgist::MediaManager* mediaManager) : acgist::RoomClient(mediaManager) {
this->mediaManager->newLocalClient(); this->mediaManager->newLocalClient();
this->audioTrack = this->mediaManager->getAudioTrack(); this->audioTrack = this->mediaManager->getAudioTrack();
this->videoTrack = this->mediaManager->getVideoTrack(); // this->videoTrack = this->mediaManager->getVideoTrack();
} }
acgist::LocalClient::~LocalClient() { acgist::LocalClient::~LocalClient() {

View File

@@ -110,7 +110,7 @@ int acgist::MediaManager::releaseLocalClient() {
bool acgist::MediaManager::startCapture() { bool acgist::MediaManager::startCapture() {
this->startAudioCapture(); this->startAudioCapture();
this->startVideoCapture(); // this->startVideoCapture();
return true; return true;
} }

View File

@@ -1,6 +1,7 @@
#include "../include/Room.hpp" #include "../include/Room.hpp"
#include <mutex> #include <mutex>
#include <thread>
#include "hilog/log.h" #include "hilog/log.h"
@@ -65,7 +66,7 @@ int acgist::Room::enter(const std::string& password) {
} }
this->enterd = true; this->enterd = true;
if (this->device->IsLoaded()) { if (this->device->IsLoaded()) {
OH_LOG_WARN(LOG_APP, "Device配置已经加载%s", this->roomId.data()); OH_LOG_WARN(LOG_APP, "Device配置已经加载%{public}s", this->roomId.data());
return -1; return -1;
} }
// 本地终端 // 本地终端
@@ -80,30 +81,34 @@ int acgist::Room::enter(const std::string& password) {
nlohmann::json requestBody = { nlohmann::json requestBody = {
{ "roomId", this->roomId } { "roomId", this->roomId }
}; };
std::string response = acgist::request("media::router::rtp::capabilities", requestBody.dump()); nlohmann::json json = acgist::request("media::router::rtp::capabilities", requestBody.dump());
nlohmann::json json = nlohmann::json::parse(response); if(json.find("body") == json.end()) {
OH_LOG_WARN(LOG_APP, "进入房间失败:%{public}s", this->roomId.data());
return -1;
}
nlohmann::json responseBody = json["body"]; nlohmann::json responseBody = json["body"];
nlohmann::json rtpCapabilities = responseBody["rtpCapabilities"]; nlohmann::json rtpCapabilities = responseBody["rtpCapabilities"];
// 加载设备 // 加载设备
OH_LOG_INFO(LOG_APP, "加载设备:%{public}s", this->roomId.data());
mediasoupclient::PeerConnection::Options options; mediasoupclient::PeerConnection::Options options;
options.config = *this->rtcConfiguration; options.config = *this->rtcConfiguration;
options.factory = this->mediaManager->peerConnectionFactory.get(); options.factory = this->mediaManager->peerConnectionFactory.get();
this->device->Load(rtpCapabilities, &options); this->device->Load(rtpCapabilities, &options);
// 进入房间 // 进入房间
OH_LOG_INFO(LOG_APP, "进入房间:%{public}s", this->roomId.data());
requestBody = { requestBody = {
{ "roomId", this->roomId }, { "roomId", this->roomId },
{ "password", password }, { "password", password },
{ "rtpCapabilities", this->device->GetRtpCapabilities() }, { "rtpCapabilities", this->device->GetRtpCapabilities() },
{ "sctpCapabilities", this->device->GetSctpCapabilities() } { "sctpCapabilities", this->device->GetSctpCapabilities() }
}; };
response = acgist::request("room::enter", requestBody.dump()); acgist::request("room::enter", requestBody.dump());
OH_LOG_INFO(LOG_APP, "进入房间:%s", this->roomId.data());
return 0; return 0;
} }
int acgist::Room::produceMedia() { int acgist::Room::produceMedia() {
std::lock_guard<std::recursive_mutex> lockRoom(roomMutex); std::lock_guard<std::recursive_mutex> lockRoom(roomMutex);
OH_LOG_INFO(LOG_APP, "生成媒体:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "生成媒体:%{public}s", this->roomId.data());
if(this->audioProduce || this->videoProduce) { if(this->audioProduce || this->videoProduce) {
this->createSendTransport(); this->createSendTransport();
} }
@@ -114,17 +119,16 @@ int acgist::Room::produceMedia() {
this->produceAudio(); this->produceAudio();
} }
if(this->videoProduce) { if(this->videoProduce) {
this->produceVideo(); // this->produceVideo();
} }
} }
int acgist::Room::createSendTransport() { int acgist::Room::createSendTransport() {
std::lock_guard<std::recursive_mutex> lockRoom(roomMutex); std::lock_guard<std::recursive_mutex> lockRoom(roomMutex);
if(this->sendTransport != nullptr) { if(this->sendTransport != nullptr) {
OH_LOG_INFO(LOG_APP, "发送通道已经存在:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "发送通道已经存在:%{public}s", this->roomId.data());
return -1; return -1;
} }
OH_LOG_INFO(LOG_APP, "创建发送通道:%s", this->roomId.data());
nlohmann::json requestBody = { nlohmann::json requestBody = {
{ "roomId", this->roomId }, { "roomId", this->roomId },
{ "forceTcp", false }, { "forceTcp", false },
@@ -132,8 +136,12 @@ int acgist::Room::createSendTransport() {
{ "consuming", false }, { "consuming", false },
// { "sctpCapabilities", sctpCapabilities }, // { "sctpCapabilities", sctpCapabilities },
}; };
std::string response = acgist::request("media::transport::webrtc::create", requestBody.dump()); nlohmann::json json = acgist::request("media::transport::webrtc::create", requestBody.dump());
nlohmann::json json = nlohmann::json::parse(response); if(json.find("body") == json.end()) {
OH_LOG_WARN(LOG_APP, "创建发送通道失败:%{public}s", this->roomId.data());
return -1;
}
OH_LOG_INFO(LOG_APP, "创建发送通道:%{public}s", this->roomId.data());
nlohmann::json responseBody = json["body"]; nlohmann::json responseBody = json["body"];
mediasoupclient::PeerConnection::Options options; mediasoupclient::PeerConnection::Options options;
options.config = *this->rtcConfiguration; options.config = *this->rtcConfiguration;
@@ -153,10 +161,9 @@ int acgist::Room::createSendTransport() {
int acgist::Room::createRecvTransport() { int acgist::Room::createRecvTransport() {
std::lock_guard<std::recursive_mutex> lockRoom(roomMutex); std::lock_guard<std::recursive_mutex> lockRoom(roomMutex);
if(this->recvTransport != nullptr) { if(this->recvTransport != nullptr) {
OH_LOG_INFO(LOG_APP, "接收通道已经存在:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "接收通道已经存在:%{public}s", this->roomId.data());
return -1; return -1;
} }
OH_LOG_INFO(LOG_APP, "创建接收通道:%s", this->roomId.data());
nlohmann::json requestBody = { nlohmann::json requestBody = {
{ "roomId", this->roomId }, { "roomId", this->roomId },
{ "forceTcp", false }, { "forceTcp", false },
@@ -164,19 +171,23 @@ int acgist::Room::createRecvTransport() {
{ "consuming", true }, { "consuming", true },
// { "sctpCapabilities", sctpCapabilities }, // { "sctpCapabilities", sctpCapabilities },
}; };
std::string response = acgist::request("media::transport::webrtc::create", requestBody.dump()); nlohmann::json json = acgist::request("media::transport::webrtc::create", requestBody.dump());
nlohmann::json json = nlohmann::json::parse(response); if(json.find("body") == json.end()) {
OH_LOG_WARN(LOG_APP, "创建接收通道失败:%{public}s", this->roomId.data());
return -1;
}
OH_LOG_INFO(LOG_APP, "创建接收通道:%{public}s", this->roomId.data());
nlohmann::json responseBody = json["body"]; nlohmann::json responseBody = json["body"];
mediasoupclient::PeerConnection::Options options; mediasoupclient::PeerConnection::Options options;
options.config = *this->rtcConfiguration; options.config = *this->rtcConfiguration;
options.factory = this->mediaManager->peerConnectionFactory.get(); options.factory = this->mediaManager->peerConnectionFactory.get();
this->recvTransport = this->device->CreateRecvTransport( this->recvTransport = this->device->CreateRecvTransport(
this->recvListener, this->recvListener,
json["transportId"], responseBody["transportId"],
json["iceParameters"], responseBody["iceParameters"],
json["iceCandidates"], responseBody["iceCandidates"],
json["dtlsParameters"], responseBody["dtlsParameters"],
json["sctpParameters"], responseBody["sctpParameters"],
&options &options
); );
return 0; return 0;
@@ -185,15 +196,15 @@ int acgist::Room::createRecvTransport() {
int acgist::Room::produceAudio() { int acgist::Room::produceAudio() {
std::lock_guard<std::recursive_mutex> lockRoom(roomMutex); std::lock_guard<std::recursive_mutex> lockRoom(roomMutex);
if(this->audioProducer != nullptr) { if(this->audioProducer != nullptr) {
OH_LOG_INFO(LOG_APP, "音频媒体已经生产:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "音频媒体已经生产:%{public}s", this->roomId.data());
return -1; return -1;
} }
if(!this->device->CanProduce("audio") || this->audioProducer == nullptr) { if(!this->device->CanProduce("audio")) {
OH_LOG_INFO(LOG_APP, "不能生产音频媒体:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "不能生产音频媒体:%{public}s", this->roomId.data());
return -1; return -1;
} }
if(this->client->audioTrack->state() == webrtc::MediaStreamTrackInterface::TrackState::kEnded) { if(this->client->audioTrack->state() == webrtc::MediaStreamTrackInterface::TrackState::kEnded) {
OH_LOG_INFO(LOG_APP, "音频媒体状态错误:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "音频媒体状态错误:%{public}s", this->roomId.data());
return -2; return -2;
} }
OH_LOG_INFO(LOG_APP, "生产音频媒体:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "生产音频媒体:%s", this->roomId.data());
@@ -217,7 +228,7 @@ int acgist::Room::produceVideo() {
OH_LOG_INFO(LOG_APP, "视频媒体已经生产:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "视频媒体已经生产:%s", this->roomId.data());
return -1; return -1;
} }
if(!this->device->CanProduce("video") || this->videoProducer == nullptr) { if(!this->device->CanProduce("video")) {
OH_LOG_INFO(LOG_APP, "不能生产视频媒体:%s", this->roomId.data()); OH_LOG_INFO(LOG_APP, "不能生产视频媒体:%s", this->roomId.data());
return -1; return -1;
} }
@@ -543,12 +554,16 @@ std::future<std::string> acgist::SendListener::OnProduce(mediasoupclient::SendTr
{ "transportId", transport->GetId() }, { "transportId", transport->GetId() },
{ "rtpParameters", rtpParameters }, { "rtpParameters", rtpParameters },
}; };
std::string response = acgist::request("media::produce", requestBody.dump());
nlohmann::json json = nlohmann::json::parse(response);
nlohmann::json responseBody = json["body"];
std::string producerId = responseBody["producerId"];
std::promise<std::string> promise; std::promise<std::string> promise;
promise.set_value(producerId); nlohmann::json json = acgist::request("media::produce", requestBody.dump());
if(json.find("body") == json.end()) {
OH_LOG_WARN(LOG_APP, "生产媒体失败:%{public}s", this->room->roomId.data());
promise.set_value("");
} else {
nlohmann::json responseBody = json["body"];
std::string producerId = responseBody["producerId"];
promise.set_value(producerId);
}
return promise.get_future(); return promise.get_future();
} }

View File

@@ -1,10 +1,13 @@
/** /**
* 信令 * 信令
* *
* 线程模型设计真的是个小丑🤡🤡🤡🤡
*
* @author acgist * @author acgist
*/ */
import hilog from "@ohos.hilog"; import hilog from "@ohos.hilog";
import List from '@ohos.util.List';
import { BusinessError } from '@ohos.base'; import { BusinessError } from '@ohos.base';
import webSocket from "@ohos.net.webSocket"; import webSocket from "@ohos.net.webSocket";
@@ -22,6 +25,8 @@ class TaoyaoSignal {
connected: boolean = false; connected: boolean = false;
// 心跳定时 // 心跳定时
heartbeatTimer: number = 0; heartbeatTimer: number = 0;
// 本地回调
nativeCallback = new List<number>();
// 同步请求 // 同步请求
callbackMapping = new Map<number, Function>(); callbackMapping = new Map<number, Function>();
// 当前消息索引0-666 // 当前消息索引0-666
@@ -265,8 +270,17 @@ class TaoyaoSignal {
const header: Record<string, Object> = json.header as Record<string, Object>; const header: Record<string, Object> = json.header as Record<string, Object>;
const id : number = header.id as number; const id : number = header.id as number;
const signal: string = header.signal as string; const signal: string = header.signal as string;
if(this.nativeCallback.has(id)) {
hilog.debug(0x0000, "TaoyaoSignal", "处理同步消息(NAPI)%{public}s", message);
try {
taoyaoModule.callback(message);
} finally {
this.nativeCallback.remove(id);
}
return;
}
if (this.callbackMapping.has(id)) { if (this.callbackMapping.has(id)) {
hilog.debug(0x0000, "TaoyaoSignal", "处理同步消息:%{public}s", message); hilog.debug(0x0000, "TaoyaoSignal", "处理同步消息(ETS)%{public}s", message);
try { try {
const callback = this.callbackMapping.get(id) as Function; const callback = this.callbackMapping.get(id) as Function;
if(callback(json)) { if(callback(json)) {
@@ -294,10 +308,10 @@ class TaoyaoSignal {
ret = taoyaoModule.roomLeave(message); ret = taoyaoModule.roomLeave(message);
break; break;
case "room::client::list": case "room::client::list":
ret = taoyaoModule.roomClientList(message); // ret = taoyaoModule.roomClientList(message);
break; break;
case "media::consume": case "media::consume":
ret = taoyaoModule.mediaConsume(message); // ret = taoyaoModule.mediaConsume(message);
break; break;
case "media::consumer::close": case "media::consumer::close":
ret = taoyaoModule.mediaConsumerClose(message); ret = taoyaoModule.mediaConsumerClose(message);
@@ -344,9 +358,11 @@ class TaoyaoSignal {
* @param id ID * @param id ID
*/ */
nativeRequest(signal: string, body: string, id: number = 0) { nativeRequest(signal: string, body: string, id: number = 0) {
taoyaoSignal.request(signal, JSON.parse(body), id).then(response => { taoyaoSignal.nativeCallback.add(id);
taoyaoModule.callback(JSON.stringify(response)); taoyaoSignal.push(signal, JSON.parse(body), id);
}); setTimeout(() => {
taoyaoSignal.nativeCallback.remove(id);
}, 5000);
} }
} }

View File

@@ -36,30 +36,35 @@
"requestPermissions": [ "requestPermissions": [
{ {
"name": "ohos.permission.CAMERA", "name": "ohos.permission.CAMERA",
"reason": "$string:app_name",
"usedScene": { "usedScene": {
"when": "always" "when": "inuse"
} }
}, },
{ {
"name": "ohos.permission.INTERNET", "name": "ohos.permission.INTERNET",
"reason": "$string:app_name",
"usedScene": { "usedScene": {
"when": "always" "when": "always"
} }
}, },
{ {
"name": "ohos.permission.MICROPHONE", "name": "ohos.permission.MICROPHONE",
"reason": "$string:app_name",
"usedScene": { "usedScene": {
"when": "always" "when": "inuse"
} }
}, },
{ {
"name": "ohos.permission.READ_MEDIA", "name": "ohos.permission.READ_MEDIA",
"reason": "$string:app_name",
"usedScene": { "usedScene": {
"when": "always" "when": "always"
} }
}, },
{ {
"name": "ohos.permission.WRITE_MEDIA", "name": "ohos.permission.WRITE_MEDIA",
"reason": "$string:app_name",
"usedScene": { "usedScene": {
"when": "always" "when": "always"
} }