client.gd 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. extends Node
  2. var _client = WebSocketClient.new()
  3. var _write_mode = WebSocketPeer.WRITE_MODE_BINARY
  4. var _use_multiplayer = true
  5. var last_connected_client = 0
  6. onready var _log_dest = get_parent().get_node("Panel/VBoxContainer/RichTextLabel")
  7. func _init():
  8. _client.connect("connection_established", self, "_client_connected")
  9. _client.connect("connection_error", self, "_client_disconnected")
  10. _client.connect("connection_closed", self, "_client_disconnected")
  11. _client.connect("server_close_request", self, "_client_close_request")
  12. _client.connect("data_received", self, "_client_received")
  13. _client.connect("peer_packet", self, "_client_received")
  14. _client.connect("peer_connected", self, "_peer_connected")
  15. _client.connect("connection_succeeded", self, "_client_connected", ["multiplayer_protocol"])
  16. _client.connect("connection_failed", self, "_client_disconnected")
  17. func _process(_delta):
  18. if _client.get_connection_status() == WebSocketClient.CONNECTION_DISCONNECTED:
  19. return
  20. _client.poll()
  21. func _client_close_request(code, reason):
  22. Utils._log(_log_dest, "Close code: %d, reason: %s" % [code, reason])
  23. func _peer_connected(id):
  24. Utils._log(_log_dest, "%s: Client just connected" % id)
  25. last_connected_client = id
  26. func _exit_tree():
  27. _client.disconnect_from_host(1001, "Bye bye!")
  28. func _client_connected(protocol):
  29. Utils._log(_log_dest, "Client just connected with protocol: %s" % protocol)
  30. _client.get_peer(1).set_write_mode(_write_mode)
  31. func _client_disconnected(clean=true):
  32. Utils._log(_log_dest, "Client just disconnected. Was clean: %s" % clean)
  33. func _client_received(_p_id = 1):
  34. if _use_multiplayer:
  35. var peer_id = _client.get_packet_peer()
  36. var packet = _client.get_packet()
  37. Utils._log(_log_dest, "MPAPI: From %s Data: %s" % [str(peer_id), Utils.decode_data(packet, false)])
  38. else:
  39. var packet = _client.get_peer(1).get_packet()
  40. var is_string = _client.get_peer(1).was_string_packet()
  41. Utils._log(_log_dest, "Received data. BINARY: %s: %s" % [not is_string, Utils.decode_data(packet, is_string)])
  42. func connect_to_url(host, protocols, multiplayer):
  43. _use_multiplayer = multiplayer
  44. if _use_multiplayer:
  45. _write_mode = WebSocketPeer.WRITE_MODE_BINARY
  46. return _client.connect_to_url(host, protocols, multiplayer)
  47. func disconnect_from_host():
  48. _client.disconnect_from_host(1000, "Bye bye!")
  49. func send_data(data, dest):
  50. _client.get_peer(1).set_write_mode(_write_mode)
  51. if _use_multiplayer:
  52. _client.set_target_peer(dest)
  53. _client.put_packet(Utils.encode_data(data, _write_mode))
  54. else:
  55. _client.get_peer(1).put_packet(Utils.encode_data(data, _write_mode))
  56. func set_write_mode(mode):
  57. _write_mode = mode