Godot: Difference between revisions
From Virtujoy Documentation
No edit summary |
No edit summary |
||
| Line 7: | Line 7: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
await get_tree().create_timer(2.0).timeout | await get_tree().create_timer(2.0).timeout | ||
</syntaxhighlight> | |||
== socket_manager.gd == | |||
<syntaxhighlight> | |||
extends Node | |||
const MAX_PEERS := 4 | |||
const PORT := 9080 | |||
var ws_server := WebSocketMultiplayerPeer.new() | |||
var connected_peers := [] | |||
func _ready() -> void: | |||
var err = ws_server.create_server(PORT) | |||
if err != OK: | |||
print("[SOCKET] Failed to start WebSocket server: %s" % err) | |||
return | |||
# Hook into peer connect/disconnect | |||
ws_server.peer_connected.connect(_on_peer_connected) | |||
ws_server.peer_disconnected.connect(_on_peer_disconnected) | |||
print("[SOCKET] WebSocket server listening on port %d" % PORT) | |||
print("[SOCKET] Local IP address: ", IpAddress.ip) | |||
func _on_peer_connected(id: int): | |||
print("[SOCKET] Peer connected: ", id) | |||
connected_peers.append(id) | |||
func _on_peer_disconnected(id: int): | |||
print("[SOCKET] Peer disconnected: ", id) | |||
connected_peers.erase(id) | |||
func _process(_delta): | |||
ws_server.poll() | |||
if connected_peers.size() > 0: | |||
while ws_server.get_available_packet_count() > 0: | |||
var _id = ws_server.get_packet_peer() | |||
var pkt = ws_server.get_packet() | |||
var msg = pkt.get_string_from_utf8() | |||
print("[SOCKET] Got from %d: %s" % [_id, msg]) | |||
_parse_message(msg) | |||
# Broadcast to all other clients | |||
#for peer_id in connected_peers: | |||
#if peer_id != id and ws_server.is_peer_connected(peer_id): | |||
#ws_server.set_target_peer(peer_id) | |||
#ws_server.put_packet(msg.to_utf8_buffer()) | |||
func _parse_message(msg: String): | |||
var parsed = JSON.parse_string(msg) | |||
if parsed != null: | |||
SignalBus.client_sensor_batch_received.emit(parsed) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 08:48, 7 May 2026
RichTextLabel
[img width=32 height=32]res://icon.svg[/img]Timer
await get_tree().create_timer(2.0).timeoutsocket_manager.gd
extends Node
const MAX_PEERS := 4
const PORT := 9080
var ws_server := WebSocketMultiplayerPeer.new()
var connected_peers := []
func _ready() -> void:
var err = ws_server.create_server(PORT)
if err != OK:
print("[SOCKET] Failed to start WebSocket server: %s" % err)
return
# Hook into peer connect/disconnect
ws_server.peer_connected.connect(_on_peer_connected)
ws_server.peer_disconnected.connect(_on_peer_disconnected)
print("[SOCKET] WebSocket server listening on port %d" % PORT)
print("[SOCKET] Local IP address: ", IpAddress.ip)
func _on_peer_connected(id: int):
print("[SOCKET] Peer connected: ", id)
connected_peers.append(id)
func _on_peer_disconnected(id: int):
print("[SOCKET] Peer disconnected: ", id)
connected_peers.erase(id)
func _process(_delta):
ws_server.poll()
if connected_peers.size() > 0:
while ws_server.get_available_packet_count() > 0:
var _id = ws_server.get_packet_peer()
var pkt = ws_server.get_packet()
var msg = pkt.get_string_from_utf8()
print("[SOCKET] Got from %d: %s" % [_id, msg])
_parse_message(msg)
# Broadcast to all other clients
#for peer_id in connected_peers:
#if peer_id != id and ws_server.is_peer_connected(peer_id):
#ws_server.set_target_peer(peer_id)
#ws_server.put_packet(msg.to_utf8_buffer())
func _parse_message(msg: String):
var parsed = JSON.parse_string(msg)
if parsed != null:
SignalBus.client_sensor_batch_received.emit(parsed)