MsgVoteData.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Lidgren.Network;
  2. using Robust.Shared.Network;
  3. using Robust.Shared.Serialization;
  4. namespace Content.Shared.Voting
  5. {
  6. public sealed class MsgVoteData : NetMessage
  7. {
  8. public override MsgGroups MsgGroup => MsgGroups.Command;
  9. public int VoteId;
  10. public bool VoteActive;
  11. public string VoteTitle = string.Empty;
  12. public string VoteInitiator = string.Empty;
  13. public TimeSpan StartTime; // Server RealTime.
  14. public TimeSpan EndTime; // Server RealTime.
  15. public (ushort votes, string name)[] Options = default!;
  16. public bool IsYourVoteDirty;
  17. public byte? YourVote;
  18. public bool DisplayVotes;
  19. public int TargetEntity;
  20. public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
  21. {
  22. VoteId = buffer.ReadVariableInt32();
  23. VoteActive = buffer.ReadBoolean();
  24. buffer.ReadPadBits();
  25. if (!VoteActive)
  26. return;
  27. VoteTitle = buffer.ReadString();
  28. VoteInitiator = buffer.ReadString();
  29. StartTime = TimeSpan.FromTicks(buffer.ReadInt64());
  30. EndTime = TimeSpan.FromTicks(buffer.ReadInt64());
  31. DisplayVotes = buffer.ReadBoolean();
  32. TargetEntity = buffer.ReadVariableInt32();
  33. Options = new (ushort votes, string name)[buffer.ReadByte()];
  34. for (var i = 0; i < Options.Length; i++)
  35. {
  36. Options[i] = (buffer.ReadUInt16(), buffer.ReadString());
  37. }
  38. IsYourVoteDirty = buffer.ReadBoolean();
  39. if (IsYourVoteDirty)
  40. {
  41. YourVote = buffer.ReadBoolean() ? buffer.ReadByte() : null;
  42. }
  43. }
  44. public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
  45. {
  46. buffer.WriteVariableInt32(VoteId);
  47. buffer.Write(VoteActive);
  48. buffer.WritePadBits();
  49. if (!VoteActive)
  50. return;
  51. buffer.Write(VoteTitle);
  52. buffer.Write(VoteInitiator);
  53. buffer.Write(StartTime.Ticks);
  54. buffer.Write(EndTime.Ticks);
  55. buffer.Write(DisplayVotes);
  56. buffer.WriteVariableInt32(TargetEntity);
  57. buffer.Write((byte) Options.Length);
  58. foreach (var (votes, name) in Options)
  59. {
  60. buffer.Write(votes);
  61. buffer.Write(name);
  62. }
  63. buffer.Write(IsYourVoteDirty);
  64. if (IsYourVoteDirty)
  65. {
  66. buffer.Write(YourVote.HasValue);
  67. if (YourVote.HasValue)
  68. {
  69. buffer.Write(YourVote.Value);
  70. }
  71. }
  72. }
  73. public override NetDeliveryMethod DeliveryMethod => NetDeliveryMethod.ReliableOrdered;
  74. }
  75. }