Archived
1
0
Fork 0
This repository has been archived on 2024-05-21. You can view files and clone it, but cannot push or open issues or pull requests.
maki/Maki/Gateway/GatewayHeartbeatManager.cs

63 lines
1.4 KiB
C#
Raw Normal View History

2017-05-14 12:02:51 +00:00
using System;
using System.Threading;
namespace Maki.Gateway
{
/// <summary>
/// Handles Heartbeat (pings) in the background for a Shard
/// </summary>
class GatewayHeartbeatManager
{
/// <summary>
/// Subject shard
/// </summary>
private readonly GatewayShard Shard;
2017-05-14 12:02:51 +00:00
/// <summary>
/// Interval timer for repeating the request
/// </summary>
private Timer Timer = null;
2017-05-14 12:02:51 +00:00
/// <summary>
/// Constructor
/// </summary>
/// <param name="shard">Parent GatewayShard instance</param>
public GatewayHeartbeatManager(GatewayShard shard)
2017-05-14 12:02:51 +00:00
{
Shard = shard;
2017-05-14 12:02:51 +00:00
}
/// <summary>
/// Starts sending heartbeats
/// </summary>
public void Start()
{
if (Timer != null)
2017-05-14 12:02:51 +00:00
Stop();
Timer = new Timer(Handler, null, TimeSpan.Zero, Shard.HeartbeatInterval);
2017-05-14 12:02:51 +00:00
}
/// <summary>
/// Heartbeat sender
/// </summary>
/// <param name="state"></param>
private void Handler(object state)
{
Shard.Send(GatewayOPCode.Heartbeat, Shard.LastSequence);
2017-05-14 12:02:51 +00:00
}
/// <summary>
/// Stops sending heartbeats
/// </summary>
public void Stop()
{
if (Timer == null)
2017-05-14 12:02:51 +00:00
return;
Timer.Dispose();
Timer = null;
2017-05-14 12:02:51 +00:00
}
}
}