Skip to content

Commit

Permalink
Merge pull request #130 from shiguredo/feature/add-on-ws-close
Browse files Browse the repository at this point in the history
OnWsClose を SoraSignalingObserver に追加する
  • Loading branch information
tnoho authored Sep 27, 2024
2 parents ab479a2 + 081cece commit fa80769
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
2 changes: 2 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
- @melpon
- [ADD] VERSION と examples/VERSION のバージョンをチェックする仕組みを追加
- @melpon
- [ADD] WebSocket の Close を取得できるよう SendOnWsClose を SoraSignalingObserver に追加する
- @tnoho
- [FIX] HTTP Proxy 利用時の Websocket 初期化で insecure_ メンバ変数が初期化されていなかったのを修正
- @melpon
- [FIX] SoraSignalingConfig の client_cert と client_key に渡す必要がある値を、ファイルパスからファイルの内容に修正
Expand Down
2 changes: 2 additions & 0 deletions include/sora/sora_signaling.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class SoraSignalingObserver {
virtual void OnSignalingMessage(SoraSignalingType type,
SoraSignalingDirection direction,
std::string message) {}
virtual void OnWsClose(uint16_t code, std::string message) {}

virtual void OnTrack(
rtc::scoped_refptr<webrtc::RtpTransceiverInterface> transceiver) = 0;
Expand Down Expand Up @@ -226,6 +227,7 @@ class SoraSignaling : public std::enable_shared_from_this<SoraSignaling>,
void SendOnSignalingMessage(SoraSignalingType type,
SoraSignalingDirection direction,
std::string message);
void SendOnWsClose(const boost::beast::websocket::close_reason& reason);

webrtc::DataBuffer ConvertToDataBuffer(const std::string& label,
const std::string& input);
Expand Down
13 changes: 12 additions & 1 deletion src/sora_signaling.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,7 @@ void SoraSignaling::DoInternalDisconnect(
boost::system::error_code tec;
self->closing_timeout_timer_.cancel(tec);
auto ws_reason = self->ws_->reason();
self->SendOnWsClose(ws_reason);
std::string message =
"Unintended disconnect WebSocket during Disconnect process: ec=" +
ec.message() + " wscode=" + std::to_string(ws_reason.code) +
Expand Down Expand Up @@ -624,6 +625,7 @@ void SoraSignaling::DoInternalDisconnect(
boost::system::error_code tec;
self->closing_timeout_timer_.cancel(tec);
auto ws_reason = self->ws_->reason();
self->SendOnWsClose(ws_reason);
std::string ws_reason_str =
" wscode=" + std::to_string(ws_reason.code) +
" wsreason=" + ws_reason.reason.c_str();
Expand Down Expand Up @@ -702,9 +704,10 @@ void SoraSignaling::DoInternalDisconnect(
self->on_ws_close_ = [self, on_close](boost::system::error_code ec) {
boost::system::error_code tec;
self->closing_timeout_timer_.cancel(tec);
auto reason = self->ws_->reason();
self->SendOnWsClose(reason);
bool ec_error = ec != boost::beast::websocket::error::closed;
if (ec_error) {
auto reason = self->ws_->reason();
on_close(false, SoraSignalingErrorCode::CLOSE_FAILED,
"Failed to close WebSocket: ec=" + ec.message() +
" wscode=" + std::to_string(reason.code) +
Expand Down Expand Up @@ -816,6 +819,7 @@ void SoraSignaling::OnRead(boost::system::error_code ec,
? SoraSignalingErrorCode::WEBSOCKET_ONCLOSE
: SoraSignalingErrorCode::WEBSOCKET_ONERROR;
auto reason = ws_->reason();
SendOnWsClose(reason);
std::string reason_str = " wscode=" + std::to_string(reason.code) +
" wsreason=" + reason.reason.c_str();
SendOnDisconnect(error_code, "Failed to read WebSocket: ec=" +
Expand Down Expand Up @@ -1355,6 +1359,13 @@ void SoraSignaling::SendOnSignalingMessage(SoraSignalingType type,
}
}

void SoraSignaling::SendOnWsClose(
const boost::beast::websocket::close_reason& reason) {
if (auto ob = config_.observer.lock(); ob) {
ob->OnWsClose(reason.code, reason.reason.c_str());
}
}

webrtc::DataBuffer SoraSignaling::ConvertToDataBuffer(
const std::string& label,
const std::string& input) {
Expand Down

0 comments on commit fa80769

Please sign in to comment.