HeartbeatMessage.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. namespace Microsoft.Xna.Framework.Net
  2. {
  3. /// <summary>
  4. /// Heartbeat message sent periodically to monitor connection health.
  5. /// </summary>
  6. public class HeartbeatMessage : INetworkMessage
  7. {
  8. public byte MessageType => 7;
  9. /// <summary>
  10. /// Timestamp in milliseconds since epoch for RTT calculation.
  11. /// </summary>
  12. public long Timestamp { get; set; }
  13. /// <summary>
  14. /// Sequence number for detecting packet loss.
  15. /// </summary>
  16. public uint SequenceNumber { get; set; }
  17. /// <summary>
  18. /// Current number of gamers in session.
  19. /// </summary>
  20. public int GamerCount { get; set; }
  21. /// <summary>
  22. /// ID of the gamer sending the heartbeat.
  23. /// </summary>
  24. public string GamerId { get; set; }
  25. public void Serialize(PacketWriter writer)
  26. {
  27. writer.Write(MessageType);
  28. writer.Write(Timestamp);
  29. writer.Write(SequenceNumber);
  30. writer.Write(GamerCount);
  31. writer.Write(GamerId ?? string.Empty);
  32. }
  33. public void Deserialize(PacketReader reader)
  34. {
  35. // Reader is positioned after the type byte
  36. Timestamp = reader.ReadInt64();
  37. SequenceNumber = reader.ReadUInt32();
  38. GamerCount = reader.ReadInt32();
  39. GamerId = reader.ReadString();
  40. }
  41. }
  42. }