Esempio n. 1
0
        /// <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()));
            }
        }