net: add NetworkManager autoload with ENet server/client and welcome RPC

This commit is contained in:
2026-04-13 04:35:32 +02:00
parent c4d29486c4
commit bcbf722b97

View File

@@ -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)