@@ -20,42 +20,42 @@ defmodule Nostrum.Shard.Event do
20
20
21
21
if payload . t == :READY do
22
22
Logger . info ( "READY" )
23
- % { state | session: payload . d . session_id }
23
+
24
+ { % { state | session: payload . d . session_id , resume_gateway: payload . d . resume_gateway_url } , [ ] }
24
25
else
25
- state
26
+ { state , [ ] }
26
27
end
27
28
end
28
29
29
30
def handle ( :heartbeat , _payload , state ) do
30
31
Logger . debug ( "HEARTBEAT PING" )
31
- { state , Payload . heartbeat_payload ( state . seq ) }
32
+ { { state , Payload . heartbeat_payload ( state . seq ) } , [ ] }
32
33
end
33
34
34
35
def handle ( :heartbeat_ack , _payload , state ) do
35
36
Logger . debug ( "HEARTBEAT_ACK" )
36
- % { state | last_heartbeat_ack: DateTime . utc_now ( ) , heartbeat_ack: true }
37
+ { % { state | last_heartbeat_ack: DateTime . utc_now ( ) , heartbeat_ack: true } , [ ] }
37
38
end
38
39
39
- def handle ( :hello , payload , state ) do
40
- state = % {
41
- state
42
- | heartbeat_interval: payload . d . heartbeat_interval
43
- }
44
-
45
- GenServer . cast ( state . conn_pid , :heartbeat )
40
+ def handle ( :hello , payload , old_state ) do
41
+ state = Map . put ( old_state , :heartbeat_interval , payload . d . heartbeat_interval )
42
+ # Jitter it as documented. But only for Hello - the subsequent timeouts
43
+ # must not jitter it anymore, but send out at this interval.
44
+ heartbeat_next = :rand . uniform ( state . heartbeat_interval )
45
+ heartbeat_action = { :state_timeout , heartbeat_next , :send_heartbeat }
46
46
47
47
if session_exists? ( state ) do
48
48
Logger . info ( "RESUMING" )
49
- { state , Payload . resume_payload ( state ) }
49
+ { { state , Payload . resume_payload ( state ) } , heartbeat_action }
50
50
else
51
51
Logger . info ( "IDENTIFYING" )
52
- { state , Payload . identity_payload ( state ) }
52
+ { { state , Payload . identity_payload ( state ) } , heartbeat_action }
53
53
end
54
54
end
55
55
56
56
def handle ( :invalid_session , _payload , state ) do
57
57
Logger . info ( "INVALID_SESSION" )
58
- { state , Payload . identity_payload ( state ) }
58
+ { { state , Payload . identity_payload ( state ) } , [ ] }
59
59
end
60
60
61
61
def handle ( :reconnect , _payload , state ) do
0 commit comments