net: add NetworkManager autoload with ENet server/client and welcome RPC
This commit is contained in:
62
ruf-der-pilze/scripts/network_manager.gd
Normal file
62
ruf-der-pilze/scripts/network_manager.gd
Normal 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)
|
||||
Reference in New Issue
Block a user