summaryrefslogtreecommitdiff
path: root/network/server.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-04-07 11:45:05 +0200
committerDaniel Weipert <git@mail.dweipert.de>2025-04-07 11:45:05 +0200
commitf3d360e022fce829370c7d916abe98083b14818c (patch)
tree4ac9f886b45a9482dcd42e991e85ab2e4bea3dbc /network/server.gd
parentbd77c88efc9327805b6f6fd83fa0492ed59d0f9a (diff)
next commitHEADmain
Diffstat (limited to 'network/server.gd')
-rw-r--r--network/server.gd39
1 files changed, 39 insertions, 0 deletions
diff --git a/network/server.gd b/network/server.gd
index 56e9861..b8f8319 100644
--- a/network/server.gd
+++ b/network/server.gd
@@ -84,3 +84,42 @@ func send(packet: Packet) -> Error:
func send_raw(bytes: PackedByteArray) -> Error:
return peer.put_data(bytes)
+
+
+func wait_for_packets(packet_types: Array) -> Packet:
+ var packet: Packet
+ while true:
+ packet = await received_packet
+ for type in packet_types:
+ if is_instance_of(packet, type):
+ return packet
+
+ # code path return satisfaction
+ return packet
+
+
+func wait_for_all_packets(packet_types: Array, error_packet_types: Array = []) -> Dictionary[int, Packet]:
+ var packets: Dictionary[int, Packet] = {}
+ var packet: Packet
+ var has_error := false
+ while true:
+ packet = await received_packet
+
+ # check packets
+ for type in packet_types:
+ if is_instance_of(packet, type):
+ packets.set(type.get("HEADER"), packet)
+ break
+
+ # check for errors
+ for type in error_packet_types:
+ if is_instance_of(packet, type):
+ packets.set(type.get("HEADER"), packet)
+ has_error = true
+ break
+
+ # finish if all packages received or one package errors
+ if packets.size() == packet_types.size() or has_error:
+ break
+
+ return packets