From f3d360e022fce829370c7d916abe98083b14818c Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Mon, 7 Apr 2025 11:45:05 +0200 Subject: next commit --- network/server.gd | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'network/server.gd') 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 -- cgit v1.2.3