/// <summary> /// Handles the heartbeat acknowledgement when the server asks for it. /// </summary> private void Socket_OnHeartbeatReceived(object sender, MessageEventArgs e) { var json = e.Data; if (json.Length <= 1) { return; } if (!DiscordMessageFactory.TryParseMessage(json, out var msg)) { return; } if (msg.OpCode == GatewayOpcode.Hello) { if (heartbeatTimer != null) { heartbeatTimer.Dispose(); } heartbeatTimer = new System.Timers.Timer(((JObject)msg.Data).Value <int>("heartbeat_interval") / 2); heartbeatTimer.Elapsed += (senderr, ee) => { Socket.Send(DiscordMessageFactory.CreateHeartbeat(GetLastSequenceNumber())); if (errorCounter > 0) { errorCounter--; } }; heartbeatTimer.Start(); Socket.Send(DiscordMessageFactory.CreateHeartbeat(GetLastSequenceNumber())); } }