SessionStateMessage.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Microsoft.Xna.Framework.Net;
  2. using System;
  3. namespace Microsoft.Xna.Framework.Net
  4. {
  5. /// <summary>
  6. /// Message broadcast by host to synchronize session state transitions across all clients.
  7. /// Ensures all players see the same state (Lobby → Playing → Ended) at the same time.
  8. /// </summary>
  9. public class SessionStateMessage : INetworkMessage
  10. {
  11. /// <summary>
  12. /// Message type ID for SessionStateMessage.
  13. /// </summary>
  14. public byte MessageType => 10;
  15. /// <summary>
  16. /// The new session state.
  17. /// </summary>
  18. public NetworkSessionState NewState { get; set; }
  19. /// <summary>
  20. /// UTC timestamp when the state change occurred (milliseconds since Unix epoch).
  21. /// </summary>
  22. public long Timestamp { get; set; }
  23. /// <summary>
  24. /// Optional reason for the state change (e.g., "Host started game", "Game completed").
  25. /// </summary>
  26. public string Reason { get; set; }
  27. /// <summary>
  28. /// Serializes the message to a packet writer.
  29. /// </summary>
  30. public void Serialize(PacketWriter writer)
  31. {
  32. writer.Write(MessageType);
  33. writer.Write((byte)NewState);
  34. writer.Write(Timestamp);
  35. writer.Write(Reason ?? string.Empty);
  36. }
  37. /// <summary>
  38. /// Deserializes the message from a packet reader.
  39. /// </summary>
  40. public void Deserialize(PacketReader reader)
  41. {
  42. NewState = (NetworkSessionState)reader.ReadByte();
  43. Timestamp = reader.ReadInt64();
  44. Reason = reader.ReadString();
  45. }
  46. }
  47. }