mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-15 03:30:53 +01:00
82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using Lidgren.Network;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.Serialization;
|
|
using Robust.Shared.Timing;
|
|
|
|
#nullable disable
|
|
|
|
namespace Robust.Shared.Network.Messages
|
|
{
|
|
public sealed class MsgEntity : NetMessage
|
|
{
|
|
public override MsgGroups MsgGroup => MsgGroups.EntityEvent;
|
|
|
|
public EntityMessageType Type { get; set; }
|
|
|
|
public EntityEventArgs SystemMessage { get; set; }
|
|
public EntityUid EntityUid { get; set; }
|
|
public uint NetId { get; set; }
|
|
public uint Sequence { get; set; }
|
|
public GameTick SourceTick { get; set; }
|
|
|
|
public override void ReadFromBuffer(NetIncomingMessage buffer)
|
|
{
|
|
Type = (EntityMessageType)buffer.ReadByte();
|
|
SourceTick = buffer.ReadGameTick();
|
|
Sequence = buffer.ReadUInt32();
|
|
|
|
switch (Type)
|
|
{
|
|
case EntityMessageType.SystemMessage:
|
|
{
|
|
var serializer = IoCManager.Resolve<IRobustSerializer>();
|
|
int length = buffer.ReadVariableInt32();
|
|
using var stream = buffer.ReadAlignedMemory(length);
|
|
SystemMessage = serializer.Deserialize<EntityEventArgs>(stream);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void WriteToBuffer(NetOutgoingMessage buffer)
|
|
{
|
|
buffer.Write((byte)Type);
|
|
buffer.Write(SourceTick);
|
|
buffer.Write(Sequence);
|
|
|
|
switch (Type)
|
|
{
|
|
case EntityMessageType.SystemMessage:
|
|
{
|
|
var serializer = IoCManager.Resolve<IRobustSerializer>();
|
|
using (var stream = new MemoryStream())
|
|
{
|
|
serializer.Serialize(stream, SystemMessage);
|
|
buffer.WriteVariableInt32((int)stream.Length);
|
|
stream.TryGetBuffer(out var segment);
|
|
buffer.Write(segment);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
var timingData = $"T: {SourceTick} S: {Sequence}";
|
|
switch (Type)
|
|
{
|
|
case EntityMessageType.Error:
|
|
return "MsgEntity Error";
|
|
case EntityMessageType.SystemMessage:
|
|
return $"MsgEntity Comp, {timingData}, {SystemMessage}";
|
|
default:
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
}
|
|
}
|
|
}
|