61 lines
1.6 KiB
GDScript
61 lines
1.6 KiB
GDScript
class_name DirectEnetTransport
|
|
extends NetworkTransport
|
|
|
|
|
|
func start_host(
|
|
port: int,
|
|
max_clients: int,
|
|
bind_address: String = "*",
|
|
) -> Error:
|
|
disconnect_transport()
|
|
var enet_peer := ENetMultiplayerPeer.new()
|
|
if not bind_address.is_empty() and bind_address != "*":
|
|
enet_peer.set_bind_ip(bind_address)
|
|
var error: Error = enet_peer.create_server(
|
|
port, max_clients, NetworkProtocol.ENET_CHANNEL_COUNT
|
|
)
|
|
if error != OK:
|
|
transport_error.emit("Unable to host UDP port %d." % port)
|
|
return error
|
|
_peer = enet_peer
|
|
_route_description = "UDP *:%d" % port
|
|
return OK
|
|
|
|
|
|
func connect_to_route(route: ConnectionRoute) -> Error:
|
|
disconnect_transport()
|
|
if route == null or not route.is_valid():
|
|
transport_error.emit("The direct connection route is invalid.")
|
|
return ERR_INVALID_PARAMETER
|
|
var endpoint: ConnectionEndpoint = route.direct_endpoint
|
|
var enet_peer := ENetMultiplayerPeer.new()
|
|
var error: Error = enet_peer.create_client(
|
|
endpoint.host, endpoint.port, NetworkProtocol.ENET_CHANNEL_COUNT
|
|
)
|
|
if error != OK:
|
|
transport_error.emit(
|
|
"Unable to connect to %s." % endpoint.normalized_display
|
|
)
|
|
return error
|
|
_peer = enet_peer
|
|
_route_description = endpoint.normalized_display
|
|
return OK
|
|
|
|
|
|
func send_raw_packet(
|
|
destination_address: String,
|
|
destination_port: int,
|
|
packet: PackedByteArray,
|
|
) -> bool:
|
|
var enet_peer := _peer as ENetMultiplayerPeer
|
|
if (
|
|
enet_peer == null
|
|
or enet_peer.host == null
|
|
or destination_address.is_empty()
|
|
or destination_port < 1
|
|
or destination_port > 65535
|
|
or packet.is_empty()
|
|
):
|
|
return false
|
|
enet_peer.host.socket_send(destination_address, destination_port, packet)
|
|
return true
|