-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNetworkManager.gd
99 lines (83 loc) · 2.25 KB
/
NetworkManager.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
extends Node
var _client = WebSocketClient.new()
var id
var opponent_id = null
var players = []
export var websocket_url = "wss://assorted-glass-behavior.glitch.me/"
var connected = false
var sync_timer = 0
var last_data = {}
signal split(split)
signal start
#signal synced
signal closed
func _init():
_client.connect("connection_closed", self, "_closed")
_client.connect("connection_error", self, "_on_error")
_client.connect("connection_established", self, "_connected")
_client.connect("data_received", self, "_on_data")
func start_connecting():
print("Connecting...")
#glitch.com requires these headers to be sent to connect through websockets.
var custom_headers = []
if not OS.has_feature("HTML5"):
custom_headers = PoolStringArray([
"Connection: keep-alive",
"User-Agent: Websocket Demo",
])
var err = _client.connect_to_url(websocket_url, PoolStringArray([]), false, custom_headers)
if err != OK:
print("Unable to connect")
set_process(false)
func _closed(was_clean = false):
print("Disconnected!")
connected = false
emit_signal("closed")
func _connected(_proto):
print("Connected!")
connected = true
send_msg({"game": "Pro Racer 2D " + Global.sec_playing + " " + Global.track_playing as String, "ready": false})
func _on_error():
print("Connection error!")
var data
var data_was_split = false
func _on_data():
var msg = _client.get_peer(1).get_packet().get_string_from_utf8()
data = JSON.parse(msg).result
if "ids" in data:
opponent_id = data["ids"][0]
emit_signal("start")
Global.can_start = false
return
if "start" in data:
Global.can_start = true
print("starting")
if data.hash() == last_data.hash():
return
last_data = data
if "split" in data:
print(data)
print("yay")
Global.live_splits["split_on"] += 1
Global.live_splits["splits"].append(data["split"])
if "time" in data:
Global.live_splits["time"] = data["time"]
#print(Global.live_splits)
#
#func get_data():
# return data
func send_msg(dict):
if connected:
var parsed = JSON.print(dict)
_client.get_peer(1).put_packet(parsed.to_utf8())
func send_direct_msg(msg):
if "split" in msg:
print("sending split")
if opponent_id:
send_msg({
"id": opponent_id,
"message": msg,
"is_direct_msg": true
})
func _process(delta):
_client.poll()