Explorar o código

Merge pull request #86260 from Faless/mp/fix_2way_auth

[MP] Fix auth not waiting for confirmation in some cases
Rémi Verschelde hai 1 ano
pai
achega
48a1a78390
Modificáronse 1 ficheiros con 20 adicións e 26 borrados
  1. 20 26
      modules/multiplayer/scene_multiplayer.cpp

+ 20 - 26
modules/multiplayer/scene_multiplayer.cpp

@@ -96,35 +96,29 @@ Error SceneMultiplayer::poll() {
 #endif
 
 		if (pending_peers.has(sender)) {
-			if (pending_peers[sender].local) {
-				// If the auth is over, admit the peer at the first packet.
-				pending_peers.erase(sender);
-				_admit_peer(sender);
+			ERR_CONTINUE(len < 2 || (packet[0] & CMD_MASK) != NETWORK_COMMAND_SYS || packet[1] != SYS_COMMAND_AUTH);
+			// Auth message.
+			PackedByteArray pba;
+			pba.resize(len - 2);
+			if (pba.size()) {
+				memcpy(pba.ptrw(), &packet[2], len - 2);
+				// User callback
+				const Variant sv = sender;
+				const Variant pbav = pba;
+				const Variant *argv[2] = { &sv, &pbav };
+				Variant ret;
+				Callable::CallError ce;
+				auth_callback.callp(argv, 2, ret, ce);
+				ERR_CONTINUE_MSG(ce.error != Callable::CallError::CALL_OK, "Failed to call authentication callback");
 			} else {
-				ERR_CONTINUE(len < 2 || (packet[0] & CMD_MASK) != NETWORK_COMMAND_SYS || packet[1] != SYS_COMMAND_AUTH);
-				// Auth message.
-				PackedByteArray pba;
-				pba.resize(len - 2);
-				if (pba.size()) {
-					memcpy(pba.ptrw(), &packet[2], len - 2);
-					// User callback
-					const Variant sv = sender;
-					const Variant pbav = pba;
-					const Variant *argv[2] = { &sv, &pbav };
-					Variant ret;
-					Callable::CallError ce;
-					auth_callback.callp(argv, 2, ret, ce);
-					ERR_CONTINUE_MSG(ce.error != Callable::CallError::CALL_OK, "Failed to call authentication callback");
-				} else {
-					// Remote complete notification.
-					pending_peers[sender].remote = true;
-					if (pending_peers[sender].local) {
-						pending_peers.erase(sender);
-						_admit_peer(sender);
-					}
+				// Remote complete notification.
+				pending_peers[sender].remote = true;
+				if (pending_peers[sender].local) {
+					pending_peers.erase(sender);
+					_admit_peer(sender);
 				}
-				continue; // Auth in progress.
 			}
+			continue; // Auth in progress.
 		}
 
 		ERR_CONTINUE(!connected_peers.has(sender));