Eable leave connection

This commit is contained in:
dijunkun
2023-10-09 14:11:29 +08:00
parent 85582f8339
commit 95d2d74979
8 changed files with 83 additions and 121 deletions

View File

@@ -33,6 +33,8 @@ int CreateConnection(PeerPtr* peer_ptr, const char* transmission_id,
int JoinConnection(PeerPtr* peer_ptr, const char* transmission_id,
const char* user_id);
int LeaveConnection(PeerPtr* peer_ptr);
int SendData(PeerPtr* peer_ptr, DATA_TYPE data_type, const char* data,
size_t size);

View File

@@ -180,7 +180,7 @@ int PeerConnection::Create(PeerConnectionParams params,
const std::string &user_id) {
int ret = 0;
ret = Init(params, transmission_id, user_id);
// ret = Init(params, transmission_id, user_id);
json message = {{"type", "create_transmission"},
{"user_id", user_id},
@@ -198,13 +198,23 @@ int PeerConnection::Join(PeerConnectionParams params,
const std::string &user_id) {
int ret = 0;
ret = Init(params, transmission_id, user_id);
// ret = Init(params, transmission_id, user_id);
transmission_id_ = transmission_id;
ret = RequestTransmissionMemberList(transmission_id_);
return ret;
}
int PeerConnection::Leave() {
for (auto &ice_transmission : ice_transmission_list_) {
ice_transmission.second->DestroyIceTransmission();
}
ice_transmission_list_.erase(ice_transmission_list_.begin(),
ice_transmission_list_.end());
return 0;
}
void PeerConnection::ProcessSignal(const std::string &signal) {
auto j = json::parse(signal);
std::string type = j["type"];

View File

@@ -31,6 +31,9 @@ class PeerConnection {
~PeerConnection();
public:
int Init(PeerConnectionParams params, const std::string &transmission_id,
const std::string &user_id);
int Create(PeerConnectionParams params,
const std::string &transmission_id = "",
const std::string &user_id = "");
@@ -38,6 +41,8 @@ class PeerConnection {
int Join(PeerConnectionParams params, const std::string &transmission_id,
const std::string &user_id = "");
int Leave();
int Destroy();
SignalStatus GetSignalStatus();
@@ -47,9 +52,6 @@ class PeerConnection {
int SendUserData(const char *data, size_t size);
private:
int Init(PeerConnectionParams params, const std::string &transmission_id,
const std::string &user_id);
int CreateVideoCodec(bool hardware_acceleration);
void ProcessSignal(const std::string &signal);

View File

@@ -62,6 +62,9 @@ class RingBuffer {
if (isFull()) {
return false;
}
if (!m_data) {
return false;
}
m_data[m_rear] = value;
m_rear = (m_rear + 1) % m_size;
return true;
@@ -71,6 +74,9 @@ class RingBuffer {
if (isFull()) {
return false;
}
if (!m_data) {
return false;
}
m_data[m_rear] = *value;
m_rear = (m_rear + 1) % m_size;
return true;

View File

@@ -31,6 +31,9 @@ PeerPtr *CreatePeer(const Params *params) {
int CreateConnection(PeerPtr *peer_ptr, const char *transmission_id,
const char *user_id) {
peer_ptr->peer_connection->Init(peer_ptr->pc_params, transmission_id,
user_id);
peer_ptr->peer_connection->Create(peer_ptr->pc_params, transmission_id,
user_id);
return 0;
@@ -38,11 +41,19 @@ int CreateConnection(PeerPtr *peer_ptr, const char *transmission_id,
int JoinConnection(PeerPtr *peer_ptr, const char *transmission_id,
const char *user_id) {
peer_ptr->peer_connection->Init(peer_ptr->pc_params, transmission_id,
user_id);
peer_ptr->peer_connection->Join(peer_ptr->pc_params, transmission_id,
user_id);
return 0;
}
int LeaveConnection(PeerPtr *peer_ptr) {
peer_ptr->peer_connection->Leave();
return 0;
}
int SendData(PeerPtr *peer_ptr, DATA_TYPE data_type, const char *data,
size_t size) {
if (DATA_TYPE::VIDEO == data_type) {

View File

@@ -32,7 +32,9 @@ WsCore::~WsCore() {
LOG_INFO("> Error closing connection {}", ec.message());
}
m_thread_->join();
if (m_thread_->joinable()) {
m_thread_->join();
}
}
int WsCore::Connect(std::string const &uri) {