mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-04 15:00:09 +01:00
Also fix Viewport error in 3D scaling demo, add an icon to Multiplayer Bomber, and rename BPM sync files.
61 lines
2.2 KiB
GDScript
61 lines
2.2 KiB
GDScript
extends Node
|
|
|
|
# The port we will listen to.
|
|
const PORT = 9080
|
|
# Our WebSocketServer instance.
|
|
var _server = WebSocketServer.new()
|
|
|
|
func _ready():
|
|
# Connect base signals to get notified of new client connections,
|
|
# disconnections, and disconnect requests.
|
|
_server.connect("client_connected", self, "_connected")
|
|
_server.connect("client_disconnected", self, "_disconnected")
|
|
_server.connect("client_close_request", self, "_close_request")
|
|
# This signal is emitted when not using the Multiplayer API every time a
|
|
# full packet is received.
|
|
# Alternatively, you could check get_peer(PEER_ID).get_available_packets()
|
|
# in a loop for each connected peer.
|
|
_server.connect("data_received", self, "_on_data")
|
|
# Start listening on the given port.
|
|
var err = _server.listen(PORT)
|
|
if err != OK:
|
|
print("Unable to start server")
|
|
set_process(false)
|
|
|
|
|
|
func _connected(id, proto):
|
|
# This is called when a new peer connects, "id" will be the assigned peer id,
|
|
# "proto" will be the selected WebSocket sub-protocol (which is optional)
|
|
print("Client %d connected with protocol: %s" % [id, proto])
|
|
|
|
|
|
func _close_request(id, code, reason):
|
|
# This is called when a client notifies that it wishes to close the connection,
|
|
# providing a reason string and close code.
|
|
print("Client %d disconnecting with code: %d, reason: %s" % [id, code, reason])
|
|
|
|
|
|
func _disconnected(id, was_clean = false):
|
|
# This is called when a client disconnects, "id" will be the one of the
|
|
# disconnecting client, "was_clean" will tell you if the disconnection
|
|
# was correctly notified by the remote peer before closing the socket.
|
|
print("Client %d disconnected, clean: %s" % [id, str(was_clean)])
|
|
|
|
|
|
func _on_data(id):
|
|
# Print the received packet, you MUST always use get_peer(id).get_packet to receive data,
|
|
# and not get_packet directly when not using the MultiplayerAPI.
|
|
var pkt = _server.get_peer(id).get_packet()
|
|
print("Got data from client %d: %s ... echoing" % [id, pkt.get_string_from_utf8()])
|
|
_server.get_peer(id).put_packet(pkt)
|
|
|
|
|
|
func _process(_delta):
|
|
# Call this in _process or _physics_process.
|
|
# Data transfer, and signals emission will only happen when calling this function.
|
|
_server.poll()
|
|
|
|
|
|
func _exit_tree():
|
|
_server.stop()
|