[*] 关闭房间
This commit is contained in:
@@ -8,12 +8,13 @@
|
|||||||
|
|
||||||
namespace acgist {
|
namespace acgist {
|
||||||
|
|
||||||
#ifndef TAOYAO_JAVA_VM
|
|
||||||
#define TAOYAO_JAVA_VM
|
|
||||||
/**
|
/**
|
||||||
* 全局JavaVM指针
|
* 全局JavaVM指针
|
||||||
*/
|
*/
|
||||||
extern JavaVM* taoyaoJavaVM;
|
extern JavaVM* taoyaoJavaVM;
|
||||||
#endif
|
|
||||||
|
extern void bindJavaThread(JNIEnv** env, const char* name = "C++Thread");
|
||||||
|
|
||||||
|
extern void unbindJavaThread();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,6 @@
|
|||||||
#include "sdk/android/native_api/jni/scoped_java_ref.h"
|
#include "sdk/android/native_api/jni/scoped_java_ref.h"
|
||||||
|
|
||||||
#include "Log.hpp"
|
#include "Log.hpp"
|
||||||
#include "MediaManager.hpp"
|
|
||||||
#include "RouterCallback.hpp"
|
#include "RouterCallback.hpp"
|
||||||
|
|
||||||
namespace acgist {
|
namespace acgist {
|
||||||
@@ -44,7 +43,7 @@ namespace acgist {
|
|||||||
void mediaConsumerPause(JNIEnv* env, const std::string& consumerId);
|
void mediaConsumerPause(JNIEnv* env, const std::string& consumerId);
|
||||||
void mediaConsumerResume(JNIEnv* env, const std::string& consumerId);
|
void mediaConsumerResume(JNIEnv* env, const std::string& consumerId);
|
||||||
void mediaConsumerClose(JNIEnv* env, const std::string& consumerId);
|
void mediaConsumerClose(JNIEnv* env, const std::string& consumerId);
|
||||||
void closeRoom();
|
void closeRoom(JNIEnv* env);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "jni.h"
|
#include "jni.h"
|
||||||
|
#include "MediaManager.hpp"
|
||||||
#include "mediasoupclient.hpp"
|
#include "mediasoupclient.hpp"
|
||||||
|
|
||||||
namespace acgist {
|
namespace acgist {
|
||||||
@@ -10,6 +11,9 @@ namespace acgist {
|
|||||||
class RouterCallback {
|
class RouterCallback {
|
||||||
public:
|
public:
|
||||||
jobject routerCallback;
|
jobject routerCallback;
|
||||||
|
public:
|
||||||
|
RouterCallback(jobject routerCallback);
|
||||||
|
virtual ~RouterCallback();
|
||||||
public:
|
public:
|
||||||
void enterRoomCallback(JNIEnv* env, const std::string& rtpCapabilities, const std::string& sctpCapabilities);
|
void enterRoomCallback(JNIEnv* env, const std::string& rtpCapabilities, const std::string& sctpCapabilities);
|
||||||
void closeRoomCallback(JNIEnv* env);
|
void closeRoomCallback(JNIEnv* env);
|
||||||
|
|||||||
@@ -4,11 +4,23 @@ namespace acgist {
|
|||||||
|
|
||||||
JavaVM* taoyaoJavaVM = nullptr;
|
JavaVM* taoyaoJavaVM = nullptr;
|
||||||
|
|
||||||
|
void bindJavaThread(JNIEnv** env, const char* name) {
|
||||||
|
JavaVMAttachArgs args;
|
||||||
|
args.name = name;
|
||||||
|
args.version = JNI_VERSION_1_6;
|
||||||
|
taoyaoJavaVM->AttachCurrentThreadAsDaemon(env, &args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void unbindJavaThread() {
|
||||||
|
taoyaoJavaVM->DetachCurrentThread();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 非常重要
|
* 非常重要
|
||||||
*/
|
*/
|
||||||
extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* javaVM, void* reserved) {
|
extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* javaVM, void* reserved) {
|
||||||
taoyaoJavaVM = javaVM;
|
taoyaoJavaVM = javaVM;
|
||||||
|
// JNIEnv* env = webrtc::jni::GetEnv();
|
||||||
webrtc::jni::InitGlobalJniVariables(javaVM);
|
webrtc::jni::InitGlobalJniVariables(javaVM);
|
||||||
return JNI_VERSION_1_6;
|
return JNI_VERSION_1_6;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,17 +18,14 @@ namespace acgist {
|
|||||||
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
||||||
const std::string cTransportId = transport->GetId();
|
const std::string cTransportId = transport->GetId();
|
||||||
const std::string cDtlsParameters = dtlsParameters.dump();
|
const std::string cDtlsParameters = dtlsParameters.dump();
|
||||||
JNIEnv* env = webrtc::jni::GetEnv();
|
JNIEnv* env = nullptr;
|
||||||
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
|
bindJavaThread(&env);
|
||||||
this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
// } else {
|
unbindJavaThread();
|
||||||
// JavaVMAttachArgs args;
|
} else {
|
||||||
// args.name = "C++Callback";
|
this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
// args.version = JNI_VERSION_1_6;
|
}
|
||||||
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, &args);
|
|
||||||
// this->room->sendTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
|
||||||
// taoyaoJavaVM->DetachCurrentThread();
|
|
||||||
// }
|
|
||||||
std::promise <void> promise;
|
std::promise <void> promise;
|
||||||
promise.set_value();
|
promise.set_value();
|
||||||
return promise.get_future();
|
return promise.get_future();
|
||||||
@@ -42,14 +39,14 @@ namespace acgist {
|
|||||||
std::string result;
|
std::string result;
|
||||||
const std::string cTransportId = transport->GetId();
|
const std::string cTransportId = transport->GetId();
|
||||||
const std::string cRtpParameters = rtpParameters.dump();
|
const std::string cRtpParameters = rtpParameters.dump();
|
||||||
JNIEnv* env = webrtc::jni::GetEnv();
|
JNIEnv* env = nullptr;
|
||||||
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
|
bindJavaThread(&env);
|
||||||
result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
||||||
// } else {
|
unbindJavaThread();
|
||||||
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
} else {
|
||||||
// result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
result = this->room->sendTransportProduceCallback(env, kind, cTransportId, cRtpParameters);
|
||||||
// taoyaoJavaVM->DetachCurrentThread();
|
}
|
||||||
// }
|
|
||||||
std::promise <std::string> promise;
|
std::promise <std::string> promise;
|
||||||
promise.set_value(result);
|
promise.set_value(result);
|
||||||
return promise.get_future();
|
return promise.get_future();
|
||||||
@@ -57,7 +54,7 @@ namespace acgist {
|
|||||||
|
|
||||||
std::future<std::string> OnProduceData(mediasoupclient::SendTransport* transport, const nlohmann::json& sctpStreamParameters, const std::string& label, const std::string& protocol, const nlohmann::json& appData) override {
|
std::future<std::string> OnProduceData(mediasoupclient::SendTransport* transport, const nlohmann::json& sctpStreamParameters, const std::string& label, const std::string& protocol, const nlohmann::json& appData) override {
|
||||||
std::promise <std::string> promise;
|
std::promise <std::string> promise;
|
||||||
// TODO:实现
|
// TODO:如果需要自行实现
|
||||||
return promise.get_future();
|
return promise.get_future();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,14 +75,14 @@ namespace acgist {
|
|||||||
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
std::future<void> OnConnect(mediasoupclient::Transport* transport, const nlohmann::json& dtlsParameters) override {
|
||||||
const std::string cTransportId = transport->GetId();
|
const std::string cTransportId = transport->GetId();
|
||||||
const std::string cDtlsParameters = dtlsParameters.dump();
|
const std::string cDtlsParameters = dtlsParameters.dump();
|
||||||
JNIEnv* env = webrtc::jni::GetEnv();
|
JNIEnv* env = nullptr;
|
||||||
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
|
bindJavaThread(&env);
|
||||||
this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
// } else {
|
unbindJavaThread();
|
||||||
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
} else {
|
||||||
// this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
this->room->recvTransportConnectCallback(env, cTransportId, cDtlsParameters);
|
||||||
// taoyaoJavaVM->DetachCurrentThread();
|
}
|
||||||
// }
|
|
||||||
std::promise <void> promise;
|
std::promise <void> promise;
|
||||||
promise.set_value();
|
promise.set_value();
|
||||||
return promise.get_future();
|
return promise.get_future();
|
||||||
@@ -110,14 +107,14 @@ namespace acgist {
|
|||||||
|
|
||||||
void OnTransportClose(mediasoupclient::Producer* producer) override {
|
void OnTransportClose(mediasoupclient::Producer* producer) override {
|
||||||
producer->Close();
|
producer->Close();
|
||||||
JNIEnv* env = webrtc::jni::GetEnv();
|
JNIEnv* env = nullptr;
|
||||||
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
|
bindJavaThread(&env);
|
||||||
this->room->producerCloseCallback(env, producer->GetId());
|
this->room->producerCloseCallback(env, producer->GetId());
|
||||||
// } else {
|
unbindJavaThread();
|
||||||
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
} else {
|
||||||
// this->room->producerCloseCallback(env, producer->GetId());
|
this->room->producerCloseCallback(env, producer->GetId());
|
||||||
// taoyaoJavaVM->DetachCurrentThread();
|
}
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -137,14 +134,14 @@ namespace acgist {
|
|||||||
|
|
||||||
void OnTransportClose(mediasoupclient::Consumer* consumer) override {
|
void OnTransportClose(mediasoupclient::Consumer* consumer) override {
|
||||||
consumer->Close();
|
consumer->Close();
|
||||||
JNIEnv* env = webrtc::jni::GetEnv();
|
JNIEnv* env = nullptr;
|
||||||
// if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
|
bindJavaThread(&env);
|
||||||
this->room->consumerCloseCallback(env, consumer->GetId());
|
this->room->consumerCloseCallback(env, consumer->GetId());
|
||||||
// } else {
|
unbindJavaThread();
|
||||||
// taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
} else {
|
||||||
// this->room->consumerCloseCallback(env, consumer->GetId());
|
this->room->consumerCloseCallback(env, consumer->GetId());
|
||||||
// taoyaoJavaVM->DetachCurrentThread();
|
}
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -152,8 +149,7 @@ namespace acgist {
|
|||||||
Room::Room(
|
Room::Room(
|
||||||
const std::string& roomId,
|
const std::string& roomId,
|
||||||
const jobject& routerCallback
|
const jobject& routerCallback
|
||||||
) {
|
) : RouterCallback(routerCallback) {
|
||||||
this->routerCallback = routerCallback;
|
|
||||||
this->roomId = roomId;
|
this->roomId = roomId;
|
||||||
this->factory = nullptr;
|
this->factory = nullptr;
|
||||||
this->rtcConfiguration = nullptr;
|
this->rtcConfiguration = nullptr;
|
||||||
@@ -179,14 +175,6 @@ namespace acgist {
|
|||||||
delete this->videoProducer;
|
delete this->videoProducer;
|
||||||
delete this->producerListener;
|
delete this->producerListener;
|
||||||
delete this->consumerListener;
|
delete this->consumerListener;
|
||||||
JNIEnv* env = nullptr;
|
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
|
||||||
env->DeleteGlobalRef(this->routerCallback);
|
|
||||||
} else {
|
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
|
||||||
env->DeleteGlobalRef(this->routerCallback);
|
|
||||||
taoyaoJavaVM->DetachCurrentThread();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::enterRoom(
|
void Room::enterRoom(
|
||||||
@@ -220,7 +208,6 @@ namespace acgist {
|
|||||||
json["dtlsParameters"],
|
json["dtlsParameters"],
|
||||||
json["sctpParameters"],
|
json["sctpParameters"],
|
||||||
&options
|
&options
|
||||||
// TODO:全局options
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +224,6 @@ namespace acgist {
|
|||||||
json["dtlsParameters"],
|
json["dtlsParameters"],
|
||||||
json["sctpParameters"],
|
json["sctpParameters"],
|
||||||
&options
|
&options
|
||||||
// TODO:全局options
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,38 +353,29 @@ namespace acgist {
|
|||||||
this->consumerCloseCallback(env, consumerId);
|
this->consumerCloseCallback(env, consumerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::closeRoom() {
|
void Room::closeRoom(JNIEnv* env) {
|
||||||
|
std::map<std::string, mediasoupclient::Consumer*>::iterator iterator;
|
||||||
|
for (iterator = this->consumers.begin(); iterator != this->consumers.end(); iterator++) {
|
||||||
|
if(iterator->second == nullptr) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
iterator->second->Close();
|
||||||
|
delete iterator->second;
|
||||||
|
}
|
||||||
|
this->consumers.clear();
|
||||||
if(this->audioProducer != nullptr) {
|
if(this->audioProducer != nullptr) {
|
||||||
this->audioProducer->Close();
|
this->audioProducer->Close();
|
||||||
}
|
}
|
||||||
if(this->videoProducer != nullptr) {
|
if(this->videoProducer != nullptr) {
|
||||||
this->videoProducer->Close();
|
this->videoProducer->Close();
|
||||||
}
|
}
|
||||||
std::map<std::string, mediasoupclient::Consumer*>::iterator iterator;
|
|
||||||
for (iterator = this->consumers.begin(); iterator != this->consumers.end(); iterator++) {
|
|
||||||
iterator->second->Close();
|
|
||||||
delete iterator->second;
|
|
||||||
}
|
|
||||||
// std::for_each(this->consumers.begin(), this->consumers.end(), [](std::pair<std::string, mediasoupclient::Consumer*> entry) {
|
|
||||||
// entry.second->Close();
|
|
||||||
// delete entry.second;
|
|
||||||
// });
|
|
||||||
this->consumers.clear();
|
|
||||||
if(this->sendTransport != nullptr) {
|
if(this->sendTransport != nullptr) {
|
||||||
this->sendTransport->Close();
|
this->sendTransport->Close();
|
||||||
}
|
}
|
||||||
if(this->recvTransport != nullptr) {
|
if(this->recvTransport != nullptr) {
|
||||||
this->recvTransport->Close();
|
this->recvTransport->Close();
|
||||||
}
|
}
|
||||||
JNIEnv* env = nullptr;
|
|
||||||
// JNIEnv* env = webrtc::jni::GetEnv();
|
|
||||||
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
|
||||||
this->closeRoomCallback(env);
|
this->closeRoomCallback(env);
|
||||||
} else {
|
|
||||||
taoyaoJavaVM->AttachCurrentThreadAsDaemon(&env, nullptr);
|
|
||||||
this->closeRoomCallback(env);
|
|
||||||
taoyaoJavaVM->DetachCurrentThread();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" JNIEXPORT jlong JNICALL
|
extern "C" JNIEXPORT jlong JNICALL
|
||||||
@@ -441,7 +418,7 @@ namespace acgist {
|
|||||||
extern "C" JNIEXPORT void JNICALL
|
extern "C" JNIEXPORT void JNICALL
|
||||||
Java_com_acgist_taoyao_media_client_Room_nativeCloseRoom(JNIEnv* env, jobject me, jlong nativeRoomPointer) {
|
Java_com_acgist_taoyao_media_client_Room_nativeCloseRoom(JNIEnv* env, jobject me, jlong nativeRoomPointer) {
|
||||||
Room* room = (Room*) nativeRoomPointer;
|
Room* room = (Room*) nativeRoomPointer;
|
||||||
room->closeRoom();
|
room->closeRoom(env);
|
||||||
delete room;
|
delete room;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,21 @@
|
|||||||
|
|
||||||
namespace acgist {
|
namespace acgist {
|
||||||
|
|
||||||
|
RouterCallback::RouterCallback(jobject routerCallback) {
|
||||||
|
this->routerCallback = routerCallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
RouterCallback::~RouterCallback() {
|
||||||
|
JNIEnv* env = nullptr;
|
||||||
|
if(taoyaoJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6) == JNI_EDETACHED) {
|
||||||
|
bindJavaThread(&env);
|
||||||
|
env->DeleteGlobalRef(this->routerCallback);
|
||||||
|
unbindJavaThread();
|
||||||
|
} else {
|
||||||
|
env->DeleteGlobalRef(this->routerCallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RouterCallback::enterRoomCallback(JNIEnv* env, const std::string& rtpCapabilities, const std::string& sctpCapabilities) {
|
void RouterCallback::enterRoomCallback(JNIEnv* env, const std::string& rtpCapabilities, const std::string& sctpCapabilities) {
|
||||||
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
jclass jCallbackClazz = env->GetObjectClass(this->routerCallback);
|
||||||
jmethodID recvTransportConnectCallback = env->GetMethodID(jCallbackClazz, "enterRoomCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
jmethodID recvTransportConnectCallback = env->GetMethodID(jCallbackClazz, "enterRoomCallback", "(Ljava/lang/String;Ljava/lang/String;)V");
|
||||||
@@ -115,7 +130,7 @@ namespace acgist {
|
|||||||
);
|
);
|
||||||
env->DeleteLocalRef(jKind);
|
env->DeleteLocalRef(jKind);
|
||||||
env->DeleteLocalRef(jProducerId);
|
env->DeleteLocalRef(jProducerId);
|
||||||
// env->DeleteLocalRef(jCallbackClazz);
|
env->DeleteLocalRef(jCallbackClazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterCallback::producerCloseCallback(JNIEnv* env, const std::string& producerId) {}
|
void RouterCallback::producerCloseCallback(JNIEnv* env, const std::string& producerId) {}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<url>https://gitee.com/acgist/taoyao</url>
|
<url>https://gitee.com/acgist/taoyao</url>
|
||||||
<name>taoyao</name>
|
<name>taoyao</name>
|
||||||
<description>桃夭:桃夭是套基于`Mediasoup`开发的`WebRTC`音视频信令服务</description>
|
<description>桃夭:桃夭是套基于`Mediasoup`开发的`WebRTC`音视频信令服务,可以非常方便的扩展信令接入更多智能终端。</description>
|
||||||
<inceptionYear>2022</inceptionYear>
|
<inceptionYear>2022</inceptionYear>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@@ -180,7 +180,6 @@
|
|||||||
<include>*.p12</include>
|
<include>*.p12</include>
|
||||||
<include>*.pfx</include>
|
<include>*.pfx</include>
|
||||||
<exclude>*.yml</exclude>
|
<exclude>*.yml</exclude>
|
||||||
<include>*.TTF</include>
|
|
||||||
<exclude>*.properties</exclude>
|
<exclude>*.properties</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
<archive>
|
<archive>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>taoyao-boot</name>
|
<name>taoyao-boot</name>
|
||||||
<description>启动模块:基础模块</description>
|
<description>基础模块</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>taoyao-server</name>
|
<name>taoyao-server</name>
|
||||||
<description>启动服务:启动模块</description>
|
<description>启动服务</description>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<taoyao.maven.basedir>${project.parent.basedir}</taoyao.maven.basedir>
|
<taoyao.maven.basedir>${project.parent.basedir}</taoyao.maven.basedir>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>taoyao-signal</name>
|
<name>taoyao-signal</name>
|
||||||
<description>信令:信令模块</description>
|
<description>信令模块</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
Reference in New Issue
Block a user