Files
tbd-station-14/Content.Shared/Voting/MsgVoteData.cs
2022-09-14 17:25:25 +10:00

83 lines
2.6 KiB
C#

using Lidgren.Network;
using Robust.Shared.Network;
using Robust.Shared.Serialization;
namespace Content.Shared.Voting
{
public sealed class MsgVoteData : NetMessage
{
public override MsgGroups MsgGroup => MsgGroups.Command;
public int VoteId;
public bool VoteActive;
public string VoteTitle = string.Empty;
public string VoteInitiator = string.Empty;
public TimeSpan StartTime; // Server RealTime.
public TimeSpan EndTime; // Server RealTime.
public (ushort votes, string name)[] Options = default!;
public bool IsYourVoteDirty;
public byte? YourVote;
public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
{
VoteId = buffer.ReadVariableInt32();
VoteActive = buffer.ReadBoolean();
buffer.ReadPadBits();
if (!VoteActive)
return;
VoteTitle = buffer.ReadString();
VoteInitiator = buffer.ReadString();
StartTime = TimeSpan.FromTicks(buffer.ReadInt64());
EndTime = TimeSpan.FromTicks(buffer.ReadInt64());
Options = new (ushort votes, string name)[buffer.ReadByte()];
for (var i = 0; i < Options.Length; i++)
{
Options[i] = (buffer.ReadUInt16(), buffer.ReadString());
}
IsYourVoteDirty = buffer.ReadBoolean();
if (IsYourVoteDirty)
{
YourVote = buffer.ReadBoolean() ? buffer.ReadByte() : null;
}
}
public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
{
buffer.WriteVariableInt32(VoteId);
buffer.Write(VoteActive);
buffer.WritePadBits();
if (!VoteActive)
return;
buffer.Write(VoteTitle);
buffer.Write(VoteInitiator);
buffer.Write(StartTime.Ticks);
buffer.Write(EndTime.Ticks);
buffer.Write((byte) Options.Length);
foreach (var (votes, name) in Options)
{
buffer.Write(votes);
buffer.Write(name);
}
buffer.Write(IsYourVoteDirty);
if (IsYourVoteDirty)
{
buffer.Write(YourVote.HasValue);
if (YourVote.HasValue)
{
buffer.Write(YourVote.Value);
}
}
}
public override NetDeliveryMethod DeliveryMethod => NetDeliveryMethod.ReliableOrdered;
}
}