diff --git a/ruf-der-pilze/scripts/network_manager.gd b/ruf-der-pilze/scripts/network_manager.gd new file mode 100644 index 0000000..e235ba1 --- /dev/null +++ b/ruf-der-pilze/scripts/network_manager.gd @@ -0,0 +1,62 @@ +extends Node + +signal peer_connected(id: int) +signal peer_disconnected(id: int) +signal connected_to_server() +signal connection_failed() + +var peers: Dictionary = {} +var my_id: int = 0 + + +func start_server(port: int, max_clients: int) -> void: + var peer := ENetMultiplayerPeer.new() + var err := peer.create_server(port, max_clients) + if err != OK: + push_error("[Server] Port %d konnte nicht gebunden werden: %s" % [port, error_string(err)]) + return + multiplayer.multiplayer_peer = peer + multiplayer.peer_connected.connect(_on_peer_connected) + multiplayer.peer_disconnected.connect(_on_peer_disconnected) + print("[Server] Gestartet auf Port %d" % port) + + +func join_server(ip: String, port: int) -> void: + var peer := ENetMultiplayerPeer.new() + var err := peer.create_client(ip, port) + if err != OK: + push_error("[Client] Verbindung zu %s:%d fehlgeschlagen: %s" % [ip, port, error_string(err)]) + return + multiplayer.multiplayer_peer = peer + multiplayer.connected_to_server.connect(_on_connected_to_server) + multiplayer.connection_failed.connect(_on_connection_failed) + + +func _on_peer_connected(id: int) -> void: + peers[id] = {} + peer_connected.emit(id) + print("[Server] Peer verbunden: %d" % id) + welcome.rpc_id(id, id) + + +func _on_peer_disconnected(id: int) -> void: + peers.erase(id) + peer_disconnected.emit(id) + print("[Server] Peer getrennt: %d" % id) + + +func _on_connected_to_server() -> void: + my_id = multiplayer.get_unique_id() + connected_to_server.emit() + print("[Client] Verbunden. Meine peer_id: %d" % my_id) + + +func _on_connection_failed() -> void: + connection_failed.emit() + push_error("[Client] Verbindung fehlgeschlagen") + + +@rpc("authority", "call_remote", "reliable") +func welcome(peer_id: int) -> void: + # call_remote: wird NUR auf dem Ziel-Client ausgeführt, nicht auf dem Server. + print("[Client] Willkommen, meine peer_id ist: %d" % peer_id)