Skip to content

Instantly share code, notes, and snippets.

@leroy
Created November 26, 2024 09:00
Show Gist options
  • Save leroy/fe487ac1b59bcab7c89a904b3e2d1d58 to your computer and use it in GitHub Desktop.
Save leroy/fe487ac1b59bcab7c89a904b3e2d1d58 to your computer and use it in GitHub Desktop.
extends Node
signal multiplayer_ready
signal client_ready
signal server_ready
@export var port: int = 4242
@export var ip: String = "127.0.0.1"
@export var max_players: int = 3
func start_server():
var node = Node.new()
node.name = "Server"
get_tree().root.add_child.call_deferred(node)
var server = ENetMultiplayerPeer.new()
var error = server.create_server(port, max_players)
if error != OK:
Log.error("Failed to create server: %s" % error)
multiplayer.multiplayer_peer = server
DisplayServer.window_set_title("Server")
func start_client():
var node = Node.new()
node.name = "Client"
get_tree().root.add_child.call_deferred(node)
var client = ENetMultiplayerPeer.new()
var error = client.create_client(ip, port)
if error != OK:
Log.error("Failed to create client: %s" % error)
multiplayer.multiplayer_peer = client
DisplayServer.window_set_title("Client")
func is_server() -> bool:
return OS.get_cmdline_args().has("--server")
func _ready():
if (is_server()):
multiplayer.peer_connected.connect(func(peer_id: int):
Log.info("Client connected to server with id %s" % peer_id)
)
else:
multiplayer.connected_to_server.connect(func():
Log.info("Connected to server with id %s" % multiplayer.get_unique_id())
)
multiplayer.server_disconnected.connect(func():
Log.info("Disconnected from server with id %s" % multiplayer.get_unique_id())
)
if is_server():
Log.with_context("host", "server")
start_server()
Log.with_context("peer_id", multiplayer.get_unique_id())
Log.info("Server started")
emit_signal("multiplayer_ready")
emit_signal("server_ready")
else:
Log.with_context("host", "client")
Log.info("Client started")
start_client()
await multiplayer.connected_to_server
Log.with_context("peer_id", multiplayer.get_unique_id())
Log.info("Client connected to server with id %s" % multiplayer.get_unique_id())
emit_signal("multiplayer_ready")
emit_signal("client_ready")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment