You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.7 KiB
GDScript

extends Node
export var websocket_url = "ws://127.0.0.1:8080"
var _client = WebSocketClient.new()
onready var UI = $UI
var chat_name
func join_chat(username):
chat_name = username
_client.get_peer(1).put_packet(JSON.print(
{'type': "user_joined", 'name': username}
).to_utf8()
)
func send_message(message):
_client.get_peer(1).put_packet(JSON.print(
{'type': 'chat_message', 'name': chat_name, 'message': message}
).to_utf8()
)
func receive_message(packet):
UI.display_message(packet)
func _ready():
_client.connect("connection_closed", self, "_closed")
_client.connect("connection_error", self, "_error")
_client.connect("connection_established", self, "_connected")
_client.connect("data_received", self, "_on_data_received")
var err = _client.connect_to_url(websocket_url)
if err != OK:
print_debug("Unable to connect")
set_process(false)
func _error(was_clean = false):
print_debug("Error. Clean break? ", was_clean)
set_process(false)
func _closed(was_clean = false):
print_debug("Closed. Clean break? ", was_clean)
set_process(false)
func _connected(protocol = ""):
print_debug("Connected with protocol: ", protocol)
_client.get_peer(1).put_packet(JSON.print(
{'type': 'test', 'message': "test packet from client"}
).to_utf8())
UI.join_button.show()
UI.username.show()
func _on_data_received():
var json = JSON.parse(
_client.get_peer(1).get_packet().get_string_from_utf8()
)
var packet = json.result
if typeof(packet) != 18:
push_error("%s is not a dictionary" % [packet])
get_tree().quit()
print_debug("Got data from server: ", packet)
if packet['type'] == "chat_message" or packet['type'] == "server_message":
receive_message(packet)
func _process(_delta):
_client.poll()