using System; using Lidgren.Network; using SS14.Shared.GameObjects; using SS14.Shared.Interfaces.Network; using SS14.Shared.Network; using SS14.Shared.Network.Messages; namespace Content.Shared.Chat { /// /// Sent from server to client to notify the client about a new chat message. /// public sealed class MsgChatMessage : NetMessage { #region REQUIRED public const MsgGroups GROUP = MsgGroups.Command; public const string NAME = nameof(MsgChatMessage); public MsgChatMessage(INetChannel channel) : base(NAME, GROUP) { } #endregion /// /// The channel the message is on. This can also change whether certain params are used. /// public ChatChannel Channel { get; set; } /// /// The actual message contents. /// public string Message { get; set; } /// /// What to "wrap" the message contents with. Example is stuff like 'Joe says: "{0}"' /// public string MessageWrap { get; set; } /// /// The sending entity. /// Only applies to and . /// public EntityUid SenderEntity { get; set; } public override void ReadFromBuffer(NetIncomingMessage buffer) { Channel = (ChatChannel) buffer.ReadByte(); Message = buffer.ReadString(); MessageWrap = buffer.ReadString(); switch (Channel) { case ChatChannel.Local: case ChatChannel.Emotes: SenderEntity = buffer.ReadEntityUid(); break; } } public override void WriteToBuffer(NetOutgoingMessage buffer) { buffer.Write((byte)Channel); buffer.Write(Message); buffer.Write(MessageWrap); switch (Channel) { case ChatChannel.Local: case ChatChannel.Emotes: buffer.Write(SenderEntity); break; } } } }