From fc7d428f76fd47b350bea623b69b6074ccfbcab3 Mon Sep 17 00:00:00 2001 From: flashwave Date: Fri, 10 May 2024 15:07:56 +0000 Subject: [PATCH] Split name change notification out of UserUpdatePacket. --- SharpChat/ChatContext.cs | 8 +++-- .../Packet/UserUpdateNotificationPacket.cs | 34 +++++++++++++++++++ SharpChat/Packet/UserUpdatePacket.cs | 21 +----------- 3 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 SharpChat/Packet/UserUpdateNotificationPacket.cs diff --git a/SharpChat/ChatContext.cs b/SharpChat/ChatContext.cs index 80ab8be..fd17f9d 100644 --- a/SharpChat/ChatContext.cs +++ b/SharpChat/ChatContext.cs @@ -188,8 +188,12 @@ namespace SharpChat { hasChanged = true; } - if(hasChanged) - SendToUserChannels(user, new UserUpdatePacket(user, previousName)); + if(hasChanged) { + if(previousName != null) + SendToUserChannels(user, new UserUpdateNotificationPacket(previousName, user.LegacyNameWithStatus)); + + SendToUserChannels(user, new UserUpdatePacket(user)); + } } public void BanUser(ChatUser user, TimeSpan duration, UserDisconnectReason reason = UserDisconnectReason.Kicked) { diff --git a/SharpChat/Packet/UserUpdateNotificationPacket.cs b/SharpChat/Packet/UserUpdateNotificationPacket.cs new file mode 100644 index 0000000..cb74838 --- /dev/null +++ b/SharpChat/Packet/UserUpdateNotificationPacket.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SharpChat.Packet { + public class UserUpdateNotificationPacket : ServerPacket { + public string PreviousName { get; private set; } + public string NewName { get; private set; } + public DateTimeOffset Timestamp { get; } + + public UserUpdateNotificationPacket(string previousName, string newName) { + PreviousName = previousName ?? throw new ArgumentNullException(nameof(previousName)); + NewName = newName ?? throw new ArgumentNullException(nameof(newName)); + Timestamp = DateTimeOffset.Now; + } + + public override IEnumerable Pack() { + StringBuilder sb = new(); + + sb.Append('2'); + sb.Append('\t'); + sb.Append(Timestamp.ToUnixTimeSeconds()); + sb.Append("\t-1\t0\fnick\f"); + sb.Append(PreviousName); + sb.Append('\f'); + sb.Append(NewName); + sb.Append('\t'); + sb.Append(SequenceId); + sb.Append("\t10010"); + + yield return sb.ToString(); + } + } +} diff --git a/SharpChat/Packet/UserUpdatePacket.cs b/SharpChat/Packet/UserUpdatePacket.cs index d06bd74..b172b01 100644 --- a/SharpChat/Packet/UserUpdatePacket.cs +++ b/SharpChat/Packet/UserUpdatePacket.cs @@ -5,33 +5,14 @@ using System.Text; namespace SharpChat.Packet { public class UserUpdatePacket : ServerPacket { public ChatUser User { get; private set; } - public string PreviousName { get; private set; } - public UserUpdatePacket(ChatUser user, string previousName = null) { + public UserUpdatePacket(ChatUser user) { User = user ?? throw new ArgumentNullException(nameof(user)); - PreviousName = previousName; } public override IEnumerable Pack() { StringBuilder sb = new(); - bool isSilent = string.IsNullOrEmpty(PreviousName); - - if(!isSilent) { - sb.Append('2'); - sb.Append('\t'); - sb.Append(DateTimeOffset.Now.ToUnixTimeSeconds()); - sb.Append("\t-1\t0\fnick\f"); - sb.Append(PreviousName); - sb.Append('\f'); - sb.Append(User.LegacyNameWithStatus); - sb.Append('\t'); - sb.Append(SequenceId); - sb.Append("\t10010"); - yield return sb.ToString(); - sb.Clear(); - } - sb.Append("10"); sb.Append('\t'); sb.Append(User.Pack());