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