瀏覽代碼

Introduced rtc::WebSocket::forceClose() to trigger remote close

Paul-Louis Ageneau 3 年之前
父節點
當前提交
282465c60b
共有 3 個文件被更改,包括 5 次插入2 次删除
  1. 1 0
      include/rtc/websocket.hpp
  2. 2 2
      src/capi.cpp
  3. 2 0
      src/websocket.cpp

+ 1 - 0
include/rtc/websocket.hpp

@@ -59,6 +59,7 @@ public:
 
 	void open(const string &url);
 	void close() override;
+	void forceClose();
 	bool send(const message_variant data) override;
 	bool send(const byte *data, size_t size) override;
 

+ 2 - 2
src/capi.cpp

@@ -1266,7 +1266,8 @@ int rtcCreateWebSocketEx(const char *url, const rtcWsConfiguration *config) {
 int rtcDeleteWebSocket(int ws) {
 	return wrap([&] {
 		auto webSocket = getWebSocket(ws);
-		webSocket->close();
+		webSocket->forceClose();
+		webSocket->resetCallbacks(); // not done on close by WebSocket
 		eraseWebSocket(ws);
 		return RTC_ERR_SUCCESS;
 	});
@@ -1329,7 +1330,6 @@ RTC_EXPORT int rtcDeleteWebSocketServer(int wsserver) {
 		auto webSocketServer = getWebSocketServer(wsserver);
 		webSocketServer->onClient(nullptr);
 		webSocketServer->stop();
-
 		eraseWebSocketServer(wsserver);
 		return RTC_ERR_SUCCESS;
 	});

+ 2 - 0
src/websocket.cpp

@@ -60,6 +60,8 @@ void WebSocket::open(const string &url) {
 
 void WebSocket::close() { impl()->close(); }
 
+void WebSocket::forceClose() { impl()->remoteClose(); }
+
 bool WebSocket::send(message_variant data) {
 	return impl()->outgoing(make_message(std::move(data)));
 }