gates-multiplayer/main/connection.gd
2024-03-31 19:58:08 +04:00

87 lines
2.2 KiB
GDScript

extends Node
class_name Connection
signal connected
signal disconnected
static var is_peer_connected: bool
@export var port: int
@export var max_clients: int
@export var host: String
@export var use_localhost_in_editor: bool
func _ready() -> void:
if Connection.is_server(): start_server()
connected.connect(func(): Connection.is_peer_connected = true)
disconnected.connect(func(): Connection.is_peer_connected = false)
disconnected.connect(disconnect_all)
static func is_server() -> bool:
return "--server" in OS.get_cmdline_args()
func start_server() -> void:
if max_clients == 0:
max_clients = 32
var peer = ENetMultiplayerPeer.new()
var err = peer.create_server(port, max_clients)
if err != OK:
print("Cannot start server. Err: " + str(err))
disconnected.emit()
return
else:
print("Server started")
connected.emit()
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(peer_connected)
multiplayer.peer_disconnected.connect(peer_disconnected)
func start_client() -> void:
var address = host
if OS.has_feature("editor") and use_localhost_in_editor:
address = "localhost"
var peer = ENetMultiplayerPeer.new()
var err = peer.create_client(address, port)
if err != OK:
print("Cannot start client. Err: " + str(err))
disconnected.emit()
return
else: print("Connecting to server...")
multiplayer.multiplayer_peer = peer
multiplayer.connected_to_server.connect(connected_to_server)
multiplayer.server_disconnected.connect(server_connection_failure)
multiplayer.connection_failed.connect(server_connection_failure)
func connected_to_server() -> void:
print("Connected to server")
connected.emit()
func server_connection_failure() -> void:
print("Disconnected")
disconnected.emit()
func peer_connected(id: int) -> void:
print("Peer connected: " + str(id))
func peer_disconnected(id: int) -> void:
print("Peer disconnected: " + str(id))
func disconnect_all() -> void:
multiplayer.peer_connected.disconnect(peer_connected)
multiplayer.peer_disconnected.disconnect(peer_disconnected)
multiplayer.connected_to_server.disconnect(connected_to_server)
multiplayer.server_disconnected.disconnect(server_connection_failure)
multiplayer.connection_failed.disconnect(server_connection_failure)