瀏覽代碼

[WebSocket] Fix WSLClient connection status.

Note, this keeps the old behaviour of reporting CONNECTION_CONNECTED
while disconnecting.
We should change this before 4.0, but needs further refactoring of the
WebSocket classes.
Fabio Alessandrelli 3 年之前
父節點
當前提交
09a48e1055
共有 2 個文件被更改,包括 7 次插入8 次删除
  1. 6 6
      modules/websocket/wsl_client.cpp
  2. 1 2
      modules/websocket/wsl_client.h

+ 6 - 6
modules/websocket/wsl_client.cpp

@@ -91,6 +91,7 @@ void WSLClient::_do_handshake() {
 				data->id = 1;
 				_peer->make_context(data, _in_buf_size, _in_pkt_size, _out_buf_size, _out_pkt_size);
 				_peer->set_no_delay(true);
+				_status = CONNECTION_CONNECTED;
 				_on_connect(protocol);
 				break;
 			}
@@ -231,6 +232,7 @@ Error WSLClient::connect_to_host(String p_host, String p_path, uint16_t p_port,
 	}
 	request += "\r\n";
 	_request = request.utf8();
+	_status = CONNECTION_CONNECTING;
 
 	return OK;
 }
@@ -337,21 +339,19 @@ Ref<WebSocketPeer> WSLClient::get_peer(int p_peer_id) const {
 }
 
 MultiplayerPeer::ConnectionStatus WSLClient::get_connection_status() const {
+	// This is surprising, but keeps the current behaviour to allow clean close requests.
+	// TODO Refactor WebSocket and split Client/Server/Multiplayer like done in other peers.
 	if (_peer->is_connected_to_host()) {
 		return CONNECTION_CONNECTED;
 	}
-
-	if (_tcp->get_status() == StreamPeerTCP::STATUS_CONNECTING || _resolver_id != IP::RESOLVER_INVALID_ID) {
-		return CONNECTION_CONNECTING;
-	}
-
-	return CONNECTION_DISCONNECTED;
+	return _status;
 }
 
 void WSLClient::disconnect_from_host(int p_code, String p_reason) {
 	_peer->close(p_code, p_reason);
 	_connection = Ref<StreamPeer>(nullptr);
 	_tcp = Ref<StreamPeerTCP>(memnew(StreamPeerTCP));
+	_status = CONNECTION_DISCONNECTED;
 
 	_key = "";
 	_host = "";

+ 1 - 2
modules/websocket/wsl_client.h

@@ -52,6 +52,7 @@ private:
 	Ref<WSLPeer> _peer;
 	Ref<StreamPeerTCP> _tcp;
 	Ref<StreamPeer> _connection;
+	ConnectionStatus _status = CONNECTION_DISCONNECTED;
 
 	CharString _request;
 	int _requested = 0;
@@ -59,8 +60,6 @@ private:
 	uint8_t _resp_buf[WSL_MAX_HEADER_SIZE];
 	int _resp_pos = 0;
 
-	String _response;
-
 	String _key;
 	String _host;
 	uint16_t _port = 0;