diff --git a/SharpChat/ChatUser.cs b/SharpChat/ChatUser.cs index 8363c93..97c9240 100644 --- a/SharpChat/ChatUser.cs +++ b/SharpChat/ChatUser.cs @@ -139,5 +139,11 @@ namespace SharpChat { || string.Equals(name, Nickname, StringComparison.InvariantCultureIgnoreCase) || string.Equals(name, DisplayName, StringComparison.InvariantCultureIgnoreCase); } + + public static string GetDMChannelName(ChatUser user1, ChatUser user2) { + return user1.UserId < user2.UserId + ? $"@{user1.UserId}-{user2.UserId}" + : $"@{user2.UserId}-{user1.UserId}"; + } } } diff --git a/SharpChat/Commands/WhisperCommand.cs b/SharpChat/Commands/WhisperCommand.cs index b6a018e..e1eb1da 100644 --- a/SharpChat/Commands/WhisperCommand.cs +++ b/SharpChat/Commands/WhisperCommand.cs @@ -29,17 +29,19 @@ namespace SharpChat.Commands { return; string whisperStr = string.Join(' ', ctx.Args.Skip(1)); + string whisperChan = ChatUser.GetDMChannelName(ctx.User, whisperUser); + DateTimeOffset dateTime = DateTimeOffset.Now; ctx.Chat.SendTo(whisperUser, new ChatMessageAddPacket(new ChatMessage { - DateTime = DateTimeOffset.Now, - ChannelName = string.Empty, + DateTime = dateTime, + ChannelName = whisperChan, Sender = ctx.User, Text = whisperStr, Flags = ChatMessageFlags.Private, })); ctx.Chat.SendTo(ctx.User, new ChatMessageAddPacket(new ChatMessage { - DateTime = DateTimeOffset.Now, - ChannelName = string.Empty, + DateTime = dateTime, + ChannelName = whisperChan, Sender = ctx.User, Text = $"{whisperUser.DisplayName} {whisperStr}", Flags = ChatMessageFlags.Private, diff --git a/SharpChat/IServerPacket.cs b/SharpChat/IServerPacket.cs index 6d63d82..67381bb 100644 --- a/SharpChat/IServerPacket.cs +++ b/SharpChat/IServerPacket.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Threading; namespace SharpChat { public interface IServerPacket { @@ -8,13 +7,11 @@ namespace SharpChat { } public abstract class ServerPacket : IServerPacket { - private static long SequenceIdCounter = 0; - public long SequenceId { get; } public ServerPacket(long sequenceId = 0) { // Allow sequence id to be manually set for potential message repeats - SequenceId = sequenceId > 0 ? sequenceId : Interlocked.Increment(ref SequenceIdCounter); + SequenceId = sequenceId > 0 ? sequenceId : SharpId.Next(); } public abstract IEnumerable Pack();