diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-04-07 11:45:05 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-04-07 11:45:05 +0200 |
commit | f3d360e022fce829370c7d916abe98083b14818c (patch) | |
tree | 4ac9f886b45a9482dcd42e991e85ab2e4bea3dbc /network/server.gd | |
parent | bd77c88efc9327805b6f6fd83fa0492ed59d0f9a (diff) |
Diffstat (limited to 'network/server.gd')
-rw-r--r-- | network/server.gd | 39 |
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 |