MsgChatMessage.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.IO;
  2. using JetBrains.Annotations;
  3. using Lidgren.Network;
  4. using Robust.Shared.Network;
  5. using Robust.Shared.Serialization;
  6. using Robust.Shared.Utility;
  7. namespace Content.Shared.Chat
  8. {
  9. [Serializable, NetSerializable]
  10. public sealed class ChatMessage
  11. {
  12. public ChatChannel Channel;
  13. /// <summary>
  14. /// This is the text spoken by the entity, after accents and such were applied.
  15. /// This should have <see cref="FormattedMessage.EscapeText"/> applied before using it in any rich text box.
  16. /// </summary>
  17. public string Message;
  18. /// <summary>
  19. /// This is the <see cref="Message"/> but with special characters escaped and wrapped in some rich text
  20. /// formatting tags.
  21. /// </summary>
  22. public string WrappedMessage;
  23. public NetEntity SenderEntity;
  24. /// <summary>
  25. /// Identifier sent when <see cref="SenderEntity"/> is <see cref="NetEntity.Invalid"/>
  26. /// if this was sent by a player to assign a key to the sender of this message.
  27. /// This is unique per sender.
  28. /// </summary>
  29. public int? SenderKey;
  30. public bool HideChat;
  31. public Color? MessageColorOverride;
  32. public string? AudioPath;
  33. public float AudioVolume;
  34. [NonSerialized]
  35. public bool Read;
  36. public ChatMessage(ChatChannel channel, string message, string wrappedMessage, NetEntity source, int? senderKey, bool hideChat = false, Color? colorOverride = null, string? audioPath = null, float audioVolume = 0)
  37. {
  38. Channel = channel;
  39. Message = message;
  40. WrappedMessage = wrappedMessage;
  41. SenderEntity = source;
  42. SenderKey = senderKey;
  43. HideChat = hideChat;
  44. MessageColorOverride = colorOverride;
  45. AudioPath = audioPath;
  46. AudioVolume = audioVolume;
  47. }
  48. }
  49. /// <summary>
  50. /// Sent from server to client to notify the client about a new chat message.
  51. /// </summary>
  52. [UsedImplicitly]
  53. public sealed class MsgChatMessage : NetMessage
  54. {
  55. public override MsgGroups MsgGroup => MsgGroups.Command;
  56. public ChatMessage Message = default!;
  57. public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
  58. {
  59. var length = buffer.ReadVariableInt32();
  60. using var stream = new MemoryStream(length);
  61. buffer.ReadAlignedMemory(stream, length);
  62. serializer.DeserializeDirect(stream, out Message);
  63. }
  64. public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
  65. {
  66. var stream = new MemoryStream();
  67. serializer.SerializeDirect(stream, Message);
  68. buffer.WriteVariableInt32((int) stream.Length);
  69. buffer.Write(stream.AsSpan());
  70. }
  71. }
  72. }