From 1d781bd72c319a6e058e007a57f813bade85af0b Mon Sep 17 00:00:00 2001 From: flashwave Date: Mon, 20 May 2024 02:16:38 +0000 Subject: [PATCH] Added base class for packets with timestamp. --- SharpChat/ChatContext.cs | 16 +++++++++------- SharpChat/ConnectionInfo.cs | 2 +- SharpChat/IServerPacket.cs | 12 ------------ SharpChat/Packet/AuthFailPacket.cs | 2 +- SharpChat/Packet/AuthSuccessPacket.cs | 2 +- SharpChat/Packet/BanListResponsePacket.cs | 11 ++++------- SharpChat/Packet/ChannelCreatePacket.cs | 2 +- .../Packet/ChannelCreateResponsePacket.cs | 12 ++++-------- .../ChannelDeleteNotAllowedErrorPacket.cs | 12 ++++-------- SharpChat/Packet/ChannelDeletePacket.cs | 2 +- .../Packet/ChannelDeleteResponsePacket.cs | 12 ++++-------- .../Packet/ChannelNameFormatErrorPacket.cs | 18 +++++++----------- .../Packet/ChannelNameInUseErrorPacket.cs | 12 ++++-------- SharpChat/Packet/ChannelNotFoundErrorPacket.cs | 12 ++++-------- .../ChannelPasswordChangedResponsePacket.cs | 18 +++++++----------- .../Packet/ChannelPasswordWrongErrorPacket.cs | 12 ++++-------- .../Packet/ChannelRankChangedResponsePacket.cs | 18 +++++++----------- .../Packet/ChannelRankTooHighErrorPacket.cs | 18 +++++++----------- .../Packet/ChannelRankTooLowErrorPacket.cs | 12 ++++-------- SharpChat/Packet/ChannelUpdatePacket.cs | 2 +- SharpChat/Packet/ChannelsPopulatePacket.cs | 2 +- SharpChat/Packet/CommandFormatErrorPacket.cs | 18 +++++++----------- .../Packet/CommandNotAllowedErrorPacket.cs | 12 ++++-------- SharpChat/Packet/ContextClearPacket.cs | 2 +- SharpChat/Packet/FloodWarningPacket.cs | 18 +++++++----------- SharpChat/Packet/ForceDisconnectPacket.cs | 2 +- SharpChat/Packet/KickBanNoRecordErrorPacket.cs | 15 ++++++++------- .../Packet/KickBanNotAllowedErrorPacket.cs | 15 ++++++++------- SharpChat/Packet/MOTDPacket.cs | 11 ++++------- SharpChat/Packet/MessageAddLogPacket.cs | 14 ++++++-------- SharpChat/Packet/MessageAddPacket.cs | 14 ++++++-------- SharpChat/Packet/MessageBroadcastPacket.cs | 12 ++++-------- .../MessageDeleteNotAllowedErrorPacket.cs | 18 +++++++----------- SharpChat/Packet/MessageDeletePacket.cs | 10 +++++----- SharpChat/Packet/PardonResponsePacket.cs | 15 ++++++++------- SharpChat/Packet/PongPacket.cs | 2 +- SharpChat/Packet/UserChannelForceJoinPacket.cs | 2 +- SharpChat/Packet/UserChannelJoinLogPacket.cs | 13 ++++++------- SharpChat/Packet/UserChannelJoinPacket.cs | 4 ++-- SharpChat/Packet/UserChannelLeaveLogPacket.cs | 13 ++++++------- SharpChat/Packet/UserChannelLeavePacket.cs | 8 ++++++-- SharpChat/Packet/UserConnectLogPacket.cs | 13 ++++++------- SharpChat/Packet/UserConnectPacket.cs | 13 ++++--------- SharpChat/Packet/UserDisconnectLogPacket.cs | 13 ++++++------- SharpChat/Packet/UserDisconnectPacket.cs | 13 ++++--------- SharpChat/Packet/UserNameInUseErrorPacket.cs | 15 ++++++++------- SharpChat/Packet/UserNotFoundErrorPacket.cs | 15 ++++++++------- .../Packet/UserUpdateNotificationPacket.cs | 12 ++++-------- SharpChat/Packet/UserUpdatePacket.cs | 2 +- SharpChat/Packet/UsersPopulatePacket.cs | 2 +- .../Packet/WhoChannelNotFoundErrorPacket.cs | 12 ++++-------- SharpChat/Packet/WhoChannelResponsePacket.cs | 8 +++----- SharpChat/Packet/WhoServerResponsePacket.cs | 8 +++----- SharpChat/Packet/WhoisResponsePacket.cs | 16 +++++++++------- SharpChat/SockChatS2CPacket.cs | 15 +++++++++++++++ SharpChat/SockChatTimedS2CPacket.cs | 15 +++++++++++++++ 56 files changed, 265 insertions(+), 334 deletions(-) delete mode 100644 SharpChat/IServerPacket.cs create mode 100644 SharpChat/SockChatS2CPacket.cs create mode 100644 SharpChat/SockChatTimedS2CPacket.cs diff --git a/SharpChat/ChatContext.cs b/SharpChat/ChatContext.cs index 23cf72f..6567165 100644 --- a/SharpChat/ChatContext.cs +++ b/SharpChat/ChatContext.cs @@ -200,7 +200,7 @@ namespace SharpChat { HandleDisconnect(user, reason); } - public void HandleChannelEventLog(string channelName, Action handler) { + public void HandleChannelEventLog(string channelName, Action handler) { foreach(StoredEventInfo msg in Events.GetChannelEventLog(channelName)) handler(msg.Type switch { "msg:add" => new MessageAddLogPacket( @@ -218,19 +218,23 @@ namespace SharpChat { false ), "user:connect" => new UserConnectLogPacket( + msg.Id, msg.Created, msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender) ), "user:disconnect" => new UserDisconnectLogPacket( + msg.Id, msg.Created, msg.Sender == null ? string.Empty : SockChatUtility.GetUserNameWithStatus(msg.Sender), (UserDisconnectReason)msg.Data.RootElement.GetProperty("reason").GetByte() ), "chan:join" => new UserChannelJoinLogPacket( + msg.Id, msg.Created, msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender) ), "chan:leave" => new UserChannelLeaveLogPacket( + msg.Id, msg.Created, msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender) ), @@ -241,7 +245,6 @@ namespace SharpChat { public void HandleJoin(UserInfo user, ChannelInfo chan, ConnectionInfo conn, int maxMsgLength) { if(!ChannelsUsers.Has(chan, user)) { SendTo(chan, new UserConnectPacket( - DateTimeOffset.Now, user.UserId, SockChatUtility.GetUserNameWithStatus(user), user.Colour, @@ -292,7 +295,6 @@ namespace SharpChat { foreach(ChannelInfo chan in channels) { SendTo(chan, new UserDisconnectPacket( - DateTimeOffset.Now, user.UserId, SockChatUtility.GetUserNameWithStatus(user), reason @@ -369,26 +371,26 @@ namespace SharpChat { RemoveChannel(oldChan); } - public void Send(ServerPacket packet) { + public void Send(SockChatS2CPacket packet) { foreach(ConnectionInfo conn in Connections) if(conn.IsAuthed) conn.Send(packet); } - public void SendTo(UserInfo user, ServerPacket packet) { + public void SendTo(UserInfo user, SockChatS2CPacket packet) { foreach(ConnectionInfo conn in Connections) if(conn.IsAuthed && conn.User!.UserId == user.UserId) conn.Send(packet); } - public void SendTo(ChannelInfo channel, ServerPacket packet) { + public void SendTo(ChannelInfo channel, SockChatS2CPacket packet) { long[] userIds = ChannelsUsers.GetChannelUserIds(channel); foreach(ConnectionInfo conn in Connections) if(conn.IsAuthed && userIds.Contains(conn.User!.UserId)) conn.Send(packet); } - public void SendToUserChannels(UserInfo user, ServerPacket packet) { + public void SendToUserChannels(UserInfo user, SockChatS2CPacket packet) { ChannelInfo[] chans = GetUserChannels(user); foreach(ChannelInfo chan in chans) SendTo(chan, packet); diff --git a/SharpChat/ConnectionInfo.cs b/SharpChat/ConnectionInfo.cs index c308c29..950497b 100644 --- a/SharpChat/ConnectionInfo.cs +++ b/SharpChat/ConnectionInfo.cs @@ -44,7 +44,7 @@ namespace SharpChat { RemotePort = (ushort)sock.ConnectionInfo.ClientPort; } - public void Send(ServerPacket packet) { + public void Send(SockChatS2CPacket packet) { if(!Socket.IsAvailable) return; diff --git a/SharpChat/IServerPacket.cs b/SharpChat/IServerPacket.cs deleted file mode 100644 index 7265fe9..0000000 --- a/SharpChat/IServerPacket.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace SharpChat { - public abstract class ServerPacket { - public long SequenceId { get; } - - public ServerPacket(long sequenceId = 0) { - // Allow sequence id to be manually set for potential message repeats - SequenceId = sequenceId > 0 ? sequenceId : SharpId.Next(); - } - - public abstract string Pack(); - } -} diff --git a/SharpChat/Packet/AuthFailPacket.cs b/SharpChat/Packet/AuthFailPacket.cs index 299a240..b3504d2 100644 --- a/SharpChat/Packet/AuthFailPacket.cs +++ b/SharpChat/Packet/AuthFailPacket.cs @@ -1,7 +1,7 @@ using System; namespace SharpChat.Packet { - public class AuthFailPacket : ServerPacket { + public class AuthFailPacket : SockChatS2CPacket { public enum FailReason { AuthInvalid, MaxSessions, diff --git a/SharpChat/Packet/AuthSuccessPacket.cs b/SharpChat/Packet/AuthSuccessPacket.cs index 4141210..023559a 100644 --- a/SharpChat/Packet/AuthSuccessPacket.cs +++ b/SharpChat/Packet/AuthSuccessPacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class AuthSuccessPacket : ServerPacket { + public class AuthSuccessPacket : SockChatS2CPacket { private readonly long UserId; private readonly string UserName; private readonly Colour UserColour; diff --git a/SharpChat/Packet/BanListResponsePacket.cs b/SharpChat/Packet/BanListResponsePacket.cs index 02e06d2..a832cd9 100644 --- a/SharpChat/Packet/BanListResponsePacket.cs +++ b/SharpChat/Packet/BanListResponsePacket.cs @@ -1,20 +1,17 @@ -using System; -using System.Text; +using System.Text; namespace SharpChat.Packet { - public class BanListResponsePacket : ServerPacket { - private readonly long Timestamp; + public class BanListResponsePacket : SockChatTimedS2CPacket { private readonly string[] Bans; public BanListResponsePacket(string[] bans) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); Bans = bans; } public override string Pack() { StringBuilder sb = new(); - sb.AppendFormat("2\t{0}\t-1\t0\fbanlist\f", Timestamp); + sb.AppendFormat("2\t{0}\t-1\t0\fbanlist\f", TimeStamp.ToUnixTimeSeconds()); foreach(string ban in Bans) sb.AppendFormat(@"{0}, ", ban); @@ -22,7 +19,7 @@ namespace SharpChat.Packet { if(Bans.Length > 0) sb.Length -= 2; - sb.AppendFormat("\t{0}\t10010", SequenceId); + sb.AppendFormat("\t{0}\t10010", MessageId); return sb.ToString(); } diff --git a/SharpChat/Packet/ChannelCreatePacket.cs b/SharpChat/Packet/ChannelCreatePacket.cs index 523a690..58d075b 100644 --- a/SharpChat/Packet/ChannelCreatePacket.cs +++ b/SharpChat/Packet/ChannelCreatePacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class ChannelCreatePacket : ServerPacket { + public class ChannelCreatePacket : SockChatS2CPacket { private readonly string ChannelName; private readonly bool ChannelHasPassword; private readonly bool ChannelIsTemporary; diff --git a/SharpChat/Packet/ChannelCreateResponsePacket.cs b/SharpChat/Packet/ChannelCreateResponsePacket.cs index 0bdc70d..c91b17c 100644 --- a/SharpChat/Packet/ChannelCreateResponsePacket.cs +++ b/SharpChat/Packet/ChannelCreateResponsePacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelCreateResponsePacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class ChannelCreateResponsePacket : SockChatTimedS2CPacket { private readonly string ChannelName; public ChannelCreateResponsePacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t0\fcrchan\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ChannelDeleteNotAllowedErrorPacket.cs b/SharpChat/Packet/ChannelDeleteNotAllowedErrorPacket.cs index d9880f0..1ec1e1d 100644 --- a/SharpChat/Packet/ChannelDeleteNotAllowedErrorPacket.cs +++ b/SharpChat/Packet/ChannelDeleteNotAllowedErrorPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelDeleteNotAllowedErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class ChannelDeleteNotAllowedErrorPacket : SockChatTimedS2CPacket { private readonly string ChannelName; public ChannelDeleteNotAllowedErrorPacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t1\fndchan\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ChannelDeletePacket.cs b/SharpChat/Packet/ChannelDeletePacket.cs index d7a51f0..9db562e 100644 --- a/SharpChat/Packet/ChannelDeletePacket.cs +++ b/SharpChat/Packet/ChannelDeletePacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class ChannelDeletePacket : ServerPacket { + public class ChannelDeletePacket : SockChatS2CPacket { private readonly string ChannelName; public ChannelDeletePacket(string channelName) { diff --git a/SharpChat/Packet/ChannelDeleteResponsePacket.cs b/SharpChat/Packet/ChannelDeleteResponsePacket.cs index 75d3207..e83822c 100644 --- a/SharpChat/Packet/ChannelDeleteResponsePacket.cs +++ b/SharpChat/Packet/ChannelDeleteResponsePacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelDeleteResponsePacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class ChannelDeleteResponsePacket : SockChatTimedS2CPacket { private readonly string ChannelName; public ChannelDeleteResponsePacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t0\fdelchan\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ChannelNameFormatErrorPacket.cs b/SharpChat/Packet/ChannelNameFormatErrorPacket.cs index db3e7ba..aafc17a 100644 --- a/SharpChat/Packet/ChannelNameFormatErrorPacket.cs +++ b/SharpChat/Packet/ChannelNameFormatErrorPacket.cs @@ -1,15 +1,11 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelNameFormatErrorPacket : ServerPacket { - private readonly long Timestamp; - - public ChannelNameFormatErrorPacket() { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); - } - +namespace SharpChat.Packet { + public class ChannelNameFormatErrorPacket : SockChatTimedS2CPacket { public override string Pack() { - return string.Format("2\t{0}\t-1\t1\finchan\t{1}\t10010", Timestamp, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\finchan\t{1}\t10010", + TimeStamp.ToUnixTimeSeconds(), + MessageId + ); } } } diff --git a/SharpChat/Packet/ChannelNameInUseErrorPacket.cs b/SharpChat/Packet/ChannelNameInUseErrorPacket.cs index 89f65a5..50f758a 100644 --- a/SharpChat/Packet/ChannelNameInUseErrorPacket.cs +++ b/SharpChat/Packet/ChannelNameInUseErrorPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelNameInUseErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class ChannelNameInUseErrorPacket : SockChatTimedS2CPacket { private readonly string ChannelName; public ChannelNameInUseErrorPacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t1\fnischan\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ChannelNotFoundErrorPacket.cs b/SharpChat/Packet/ChannelNotFoundErrorPacket.cs index f3a1efb..2046676 100644 --- a/SharpChat/Packet/ChannelNotFoundErrorPacket.cs +++ b/SharpChat/Packet/ChannelNotFoundErrorPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelNotFoundErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class ChannelNotFoundErrorPacket : SockChatTimedS2CPacket { private readonly string ChannelName; public ChannelNotFoundErrorPacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t1\fnochan\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ChannelPasswordChangedResponsePacket.cs b/SharpChat/Packet/ChannelPasswordChangedResponsePacket.cs index e911043..5e1774f 100644 --- a/SharpChat/Packet/ChannelPasswordChangedResponsePacket.cs +++ b/SharpChat/Packet/ChannelPasswordChangedResponsePacket.cs @@ -1,15 +1,11 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelPasswordChangedResponsePacket : ServerPacket { - private readonly long Timestamp; - - public ChannelPasswordChangedResponsePacket() { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); - } - +namespace SharpChat.Packet { + public class ChannelPasswordChangedResponsePacket : SockChatTimedS2CPacket { public override string Pack() { - return string.Format("2\t{0}\t-1\t0\fcpwdchan\t{1}\t10010", Timestamp, SequenceId); + return string.Format( + "2\t{0}\t-1\t0\fcpwdchan\t{1}\t10010", + TimeStamp.ToUnixTimeSeconds(), + MessageId + ); } } } diff --git a/SharpChat/Packet/ChannelPasswordWrongErrorPacket.cs b/SharpChat/Packet/ChannelPasswordWrongErrorPacket.cs index a5c6541..2723cf2 100644 --- a/SharpChat/Packet/ChannelPasswordWrongErrorPacket.cs +++ b/SharpChat/Packet/ChannelPasswordWrongErrorPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelPasswordWrongErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class ChannelPasswordWrongErrorPacket : SockChatTimedS2CPacket { private readonly string ChannelName; public ChannelPasswordWrongErrorPacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t1\fipwchan\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ChannelRankChangedResponsePacket.cs b/SharpChat/Packet/ChannelRankChangedResponsePacket.cs index c948c1e..db597a4 100644 --- a/SharpChat/Packet/ChannelRankChangedResponsePacket.cs +++ b/SharpChat/Packet/ChannelRankChangedResponsePacket.cs @@ -1,15 +1,11 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelRankChangedResponsePacket : ServerPacket { - private readonly long Timestamp; - - public ChannelRankChangedResponsePacket() { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); - } - +namespace SharpChat.Packet { + public class ChannelRankChangedResponsePacket : SockChatTimedS2CPacket { public override string Pack() { - return string.Format("2\t{0}\t-1\t0\fcprivchan\t{1}\t10010", Timestamp, SequenceId); + return string.Format( + "2\t{0}\t-1\t0\fcprivchan\t{1}\t10010", + TimeStamp.ToUnixTimeSeconds(), + MessageId + ); } } } diff --git a/SharpChat/Packet/ChannelRankTooHighErrorPacket.cs b/SharpChat/Packet/ChannelRankTooHighErrorPacket.cs index 3bb6dd6..457af0d 100644 --- a/SharpChat/Packet/ChannelRankTooHighErrorPacket.cs +++ b/SharpChat/Packet/ChannelRankTooHighErrorPacket.cs @@ -1,15 +1,11 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelRankTooHighErrorPacket : ServerPacket { - private readonly long Timestamp; - - public ChannelRankTooHighErrorPacket() { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); - } - +namespace SharpChat.Packet { + public class ChannelRankTooHighErrorPacket : SockChatTimedS2CPacket { public override string Pack() { - return string.Format("2\t{0}\t-1\t1\frankerr\t{1}\t10010", Timestamp, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\frankerr\t{1}\t10010", + TimeStamp.ToUnixTimeSeconds(), + MessageId + ); } } } diff --git a/SharpChat/Packet/ChannelRankTooLowErrorPacket.cs b/SharpChat/Packet/ChannelRankTooLowErrorPacket.cs index 69fce27..b79ad3c 100644 --- a/SharpChat/Packet/ChannelRankTooLowErrorPacket.cs +++ b/SharpChat/Packet/ChannelRankTooLowErrorPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class ChannelRankTooLowErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class ChannelRankTooLowErrorPacket : SockChatTimedS2CPacket { private readonly string ChannelName; public ChannelRankTooLowErrorPacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t1\fipchan\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ChannelUpdatePacket.cs b/SharpChat/Packet/ChannelUpdatePacket.cs index 840a7d0..c84d0d1 100644 --- a/SharpChat/Packet/ChannelUpdatePacket.cs +++ b/SharpChat/Packet/ChannelUpdatePacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class ChannelUpdatePacket : ServerPacket { + public class ChannelUpdatePacket : SockChatS2CPacket { private readonly string ChannelNamePrevious; private readonly string ChannelNameNew; private readonly bool ChannelHasPassword; diff --git a/SharpChat/Packet/ChannelsPopulatePacket.cs b/SharpChat/Packet/ChannelsPopulatePacket.cs index 1bcf69e..a075bd7 100644 --- a/SharpChat/Packet/ChannelsPopulatePacket.cs +++ b/SharpChat/Packet/ChannelsPopulatePacket.cs @@ -1,7 +1,7 @@ using System.Text; namespace SharpChat.Packet { - public class ChannelsPopulatePacket : ServerPacket { + public class ChannelsPopulatePacket : SockChatS2CPacket { public record ListEntry(string Name, bool HasPassword, bool IsTemporary); private readonly ListEntry[] Entries; diff --git a/SharpChat/Packet/CommandFormatErrorPacket.cs b/SharpChat/Packet/CommandFormatErrorPacket.cs index 37e0d24..0284bb3 100644 --- a/SharpChat/Packet/CommandFormatErrorPacket.cs +++ b/SharpChat/Packet/CommandFormatErrorPacket.cs @@ -1,15 +1,11 @@ -using System; - -namespace SharpChat.Packet { - public class CommandFormatErrorPacket : ServerPacket { - private readonly long Timestamp; - - public CommandFormatErrorPacket() { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); - } - +namespace SharpChat.Packet { + public class CommandFormatErrorPacket : SockChatTimedS2CPacket { public override string Pack() { - return string.Format("2\t{0}\t-1\t1\fcmdna\t{1}\t10010", Timestamp, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\fcmdna\t{1}\t10010", + TimeStamp.ToUnixTimeSeconds(), + MessageId + ); } } } diff --git a/SharpChat/Packet/CommandNotAllowedErrorPacket.cs b/SharpChat/Packet/CommandNotAllowedErrorPacket.cs index 9984651..ab807fa 100644 --- a/SharpChat/Packet/CommandNotAllowedErrorPacket.cs +++ b/SharpChat/Packet/CommandNotAllowedErrorPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class CommandNotAllowedErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class CommandNotAllowedErrorPacket : SockChatTimedS2CPacket { private readonly string CommandName; public CommandNotAllowedErrorPacket(string commandName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); CommandName = commandName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t1\fcmdna\f/{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), CommandName, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/ContextClearPacket.cs b/SharpChat/Packet/ContextClearPacket.cs index 853de65..10b8838 100644 --- a/SharpChat/Packet/ContextClearPacket.cs +++ b/SharpChat/Packet/ContextClearPacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class ContextClearPacket : ServerPacket { + public class ContextClearPacket : SockChatS2CPacket { public enum ClearMode { Messages = 0, Users = 1, diff --git a/SharpChat/Packet/FloodWarningPacket.cs b/SharpChat/Packet/FloodWarningPacket.cs index 813da85..616780c 100644 --- a/SharpChat/Packet/FloodWarningPacket.cs +++ b/SharpChat/Packet/FloodWarningPacket.cs @@ -1,15 +1,11 @@ -using System; - -namespace SharpChat.Packet { - public class FloodWarningPacket : ServerPacket { - private readonly long Timestamp; - - public FloodWarningPacket() { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); - } - +namespace SharpChat.Packet { + public class FloodWarningPacket : SockChatTimedS2CPacket { public override string Pack() { - return string.Format("2\t{0}\t-1\t0\fflwarn\t{1}\t10010", Timestamp, SequenceId); + return string.Format( + "2\t{0}\t-1\t0\fflwarn\t{1}\t10010", + TimeStamp.ToUnixTimeSeconds(), + MessageId + ); } } } diff --git a/SharpChat/Packet/ForceDisconnectPacket.cs b/SharpChat/Packet/ForceDisconnectPacket.cs index 24e6b99..11f4263 100644 --- a/SharpChat/Packet/ForceDisconnectPacket.cs +++ b/SharpChat/Packet/ForceDisconnectPacket.cs @@ -1,7 +1,7 @@ using System; namespace SharpChat.Packet { - public class ForceDisconnectPacket : ServerPacket { + public class ForceDisconnectPacket : SockChatS2CPacket { private readonly long Expires; public ForceDisconnectPacket() {} diff --git a/SharpChat/Packet/KickBanNoRecordErrorPacket.cs b/SharpChat/Packet/KickBanNoRecordErrorPacket.cs index 21c74d0..4f6cf8f 100644 --- a/SharpChat/Packet/KickBanNoRecordErrorPacket.cs +++ b/SharpChat/Packet/KickBanNoRecordErrorPacket.cs @@ -1,17 +1,18 @@ -using System; - -namespace SharpChat.Packet { - public class KickBanNoRecordErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class KickBanNoRecordErrorPacket : SockChatTimedS2CPacket { private readonly string TargetName; public KickBanNoRecordErrorPacket(string targetName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); TargetName = targetName; } public override string Pack() { - return string.Format("2\t{0}\t-1\t1\fnotban\f{1}\t{2}\t10010", Timestamp, TargetName, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\fnotban\f{1}\t{2}\t10010", + TimeStamp.ToUnixTimeSeconds(), + TargetName, + MessageId + ); } } } diff --git a/SharpChat/Packet/KickBanNotAllowedErrorPacket.cs b/SharpChat/Packet/KickBanNotAllowedErrorPacket.cs index 3414146..abc87f8 100644 --- a/SharpChat/Packet/KickBanNotAllowedErrorPacket.cs +++ b/SharpChat/Packet/KickBanNotAllowedErrorPacket.cs @@ -1,17 +1,18 @@ -using System; - -namespace SharpChat.Packet { - public class KickBanNotAllowedErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class KickBanNotAllowedErrorPacket : SockChatTimedS2CPacket { private readonly string UserName; public KickBanNotAllowedErrorPacket(string userName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); UserName = userName; } public override string Pack() { - return string.Format("2\t{0}\t-1\t1\fkickna\f{1}\t{2}\t10010", Timestamp, UserName, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\fkickna\f{1}\t{2}\t10010", + TimeStamp.ToUnixTimeSeconds(), + UserName, + MessageId + ); } } } diff --git a/SharpChat/Packet/MOTDPacket.cs b/SharpChat/Packet/MOTDPacket.cs index 8048277..fb625de 100644 --- a/SharpChat/Packet/MOTDPacket.cs +++ b/SharpChat/Packet/MOTDPacket.cs @@ -1,19 +1,16 @@ -using System; - -namespace SharpChat.Packet { - public class MOTDPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class MOTDPacket : SockChatTimedS2CPacket { private readonly string Body; public MOTDPacket(string body) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); Body = body; } public override string Pack() { return string.Format( "7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fsay\f{1}\twelcome\t0\t10010", - Timestamp, SockChatUtility.SanitiseMessageBody(Body) + TimeStamp.ToUnixTimeSeconds(), + SockChatUtility.SanitiseMessageBody(Body) ); } } diff --git a/SharpChat/Packet/MessageAddLogPacket.cs b/SharpChat/Packet/MessageAddLogPacket.cs index ca1b075..623d150 100644 --- a/SharpChat/Packet/MessageAddLogPacket.cs +++ b/SharpChat/Packet/MessageAddLogPacket.cs @@ -1,8 +1,7 @@ using System; namespace SharpChat.Packet { - public class MessageAddLogPacket : ServerPacket { - private readonly long Created; + public class MessageAddLogPacket : SockChatTimedS2CPacket { private readonly long UserId; private readonly string UserName; private readonly Colour UserColour; @@ -15,8 +14,8 @@ namespace SharpChat.Packet { private readonly bool Notify; public MessageAddLogPacket( - long msgId, - DateTimeOffset created, + long messageId, + DateTimeOffset timeStamp, long userId, string userName, Colour userColour, @@ -27,8 +26,7 @@ namespace SharpChat.Packet { bool isPrivate, bool isBroadcast, bool notify - ) : base(msgId) { - Created = created.ToUnixTimeSeconds(); + ) : base(messageId, timeStamp) { UserId = userId < 0 ? -1 : userId; UserName = userName; UserColour = userColour; @@ -62,13 +60,13 @@ namespace SharpChat.Packet { return string.Format( "7\t1\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}{9}{10}{11}{12}", - Created, + TimeStamp.ToUnixTimeSeconds(), UserId, UserName, UserColour, userPerms, body, - SequenceId, + MessageId, Notify ? 1 : 0, 1, IsAction ? 1 : 0, diff --git a/SharpChat/Packet/MessageAddPacket.cs b/SharpChat/Packet/MessageAddPacket.cs index 5b2bd62..281d277 100644 --- a/SharpChat/Packet/MessageAddPacket.cs +++ b/SharpChat/Packet/MessageAddPacket.cs @@ -1,22 +1,20 @@ using System; namespace SharpChat.Packet { - public class MessageAddPacket : ServerPacket { - private readonly long Created; + public class MessageAddPacket : SockChatTimedS2CPacket { private readonly long UserId; private readonly string Body; private readonly bool IsAction; private readonly bool IsPrivate; public MessageAddPacket( - long msgId, - DateTimeOffset created, + long messageId, + DateTimeOffset timeStamp, long userId, string body, bool isAction, bool isPrivate - ) : base(msgId) { - Created = created.ToUnixTimeSeconds(); + ) : base(messageId, timeStamp) { UserId = userId < 0 ? -1 : userId; Body = body; IsAction = isAction; @@ -30,10 +28,10 @@ namespace SharpChat.Packet { return string.Format( "2\t{0}\t{1}\t{2}\t{3}\t{4}{5}{6}{7}{8}", - Created, + TimeStamp.ToUnixTimeSeconds(), UserId, body, - SequenceId, + MessageId, 1, IsAction ? 1 : 0, 0, diff --git a/SharpChat/Packet/MessageBroadcastPacket.cs b/SharpChat/Packet/MessageBroadcastPacket.cs index a27f4a4..face92c 100644 --- a/SharpChat/Packet/MessageBroadcastPacket.cs +++ b/SharpChat/Packet/MessageBroadcastPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class MessageBroadcastPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class MessageBroadcastPacket : SockChatTimedS2CPacket { private readonly string Body; public MessageBroadcastPacket(string body) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); Body = body; } public override string Pack() { return string.Format( "2\t{0}\t-1\t0\fsay\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseMessageBody(Body), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/MessageDeleteNotAllowedErrorPacket.cs b/SharpChat/Packet/MessageDeleteNotAllowedErrorPacket.cs index 6b9ae25..195e9d6 100644 --- a/SharpChat/Packet/MessageDeleteNotAllowedErrorPacket.cs +++ b/SharpChat/Packet/MessageDeleteNotAllowedErrorPacket.cs @@ -1,15 +1,11 @@ -using System; - -namespace SharpChat.Packet { - public class MessageDeleteNotAllowedErrorPacket : ServerPacket { - private readonly long Timestamp; - - public MessageDeleteNotAllowedErrorPacket() { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); - } - +namespace SharpChat.Packet { + public class MessageDeleteNotAllowedErrorPacket : SockChatTimedS2CPacket { public override string Pack() { - return string.Format("2\t{0}\t-1\t1\fdelerr\t{1}\t10010", Timestamp, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\fdelerr\t{1}\t10010", + TimeStamp.ToUnixTimeSeconds(), + MessageId + ); } } } diff --git a/SharpChat/Packet/MessageDeletePacket.cs b/SharpChat/Packet/MessageDeletePacket.cs index 66efa78..9e24a6b 100644 --- a/SharpChat/Packet/MessageDeletePacket.cs +++ b/SharpChat/Packet/MessageDeletePacket.cs @@ -1,13 +1,13 @@ namespace SharpChat.Packet { - public class MessageDeletePacket : ServerPacket { - private readonly long MessageId; + public class MessageDeletePacket : SockChatS2CPacket { + private readonly long DeletedMessageId; - public MessageDeletePacket(long msgId) { - MessageId = msgId; + public MessageDeletePacket(long deletedMessageId) { + DeletedMessageId = deletedMessageId; } public override string Pack() { - return string.Format("6\t{0}", MessageId); + return string.Format("6\t{0}", DeletedMessageId); } } } diff --git a/SharpChat/Packet/PardonResponsePacket.cs b/SharpChat/Packet/PardonResponsePacket.cs index 5801eab..ceddaef 100644 --- a/SharpChat/Packet/PardonResponsePacket.cs +++ b/SharpChat/Packet/PardonResponsePacket.cs @@ -1,17 +1,18 @@ -using System; - -namespace SharpChat.Packet { - public class PardonResponsePacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class PardonResponsePacket : SockChatTimedS2CPacket { private readonly string Subject; public PardonResponsePacket(string subject) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); Subject = subject; } public override string Pack() { - return string.Format("2\t{0}\t-1\t0\funban\f{1}\t{2}\t10010", Timestamp, Subject, SequenceId); + return string.Format( + "2\t{0}\t-1\t0\funban\f{1}\t{2}\t10010", + TimeStamp.ToUnixTimeSeconds(), + Subject, + MessageId + ); } } } diff --git a/SharpChat/Packet/PongPacket.cs b/SharpChat/Packet/PongPacket.cs index 3eaf871..e4470e9 100644 --- a/SharpChat/Packet/PongPacket.cs +++ b/SharpChat/Packet/PongPacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class PongPacket : ServerPacket { + public class PongPacket : SockChatS2CPacket { public override string Pack() { return "0\tpong"; } diff --git a/SharpChat/Packet/UserChannelForceJoinPacket.cs b/SharpChat/Packet/UserChannelForceJoinPacket.cs index 891de24..c1f0cda 100644 --- a/SharpChat/Packet/UserChannelForceJoinPacket.cs +++ b/SharpChat/Packet/UserChannelForceJoinPacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class UserChannelForceJoinPacket : ServerPacket { + public class UserChannelForceJoinPacket : SockChatS2CPacket { private readonly string ChannelName; public UserChannelForceJoinPacket(string channelName) { diff --git a/SharpChat/Packet/UserChannelJoinLogPacket.cs b/SharpChat/Packet/UserChannelJoinLogPacket.cs index dc3ad26..95686f0 100644 --- a/SharpChat/Packet/UserChannelJoinLogPacket.cs +++ b/SharpChat/Packet/UserChannelJoinLogPacket.cs @@ -1,24 +1,23 @@ using System; namespace SharpChat.Packet { - public class UserChannelJoinLogPacket : ServerPacket { - private readonly long Timestamp; + public class UserChannelJoinLogPacket : SockChatTimedS2CPacket { private readonly string UserName; public UserChannelJoinLogPacket( - DateTimeOffset timestamp, + long messageId, + DateTimeOffset timeStamp, string userName - ) { - Timestamp = timestamp.ToUnixTimeSeconds(); + ) : base(messageId, timeStamp) { UserName = userName; } public override string Pack() { return string.Format( "7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjchan\f{1}\t{2}\t0\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), UserName, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/UserChannelJoinPacket.cs b/SharpChat/Packet/UserChannelJoinPacket.cs index ef922d2..9ac707c 100644 --- a/SharpChat/Packet/UserChannelJoinPacket.cs +++ b/SharpChat/Packet/UserChannelJoinPacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class UserChannelJoinPacket : ServerPacket { + public class UserChannelJoinPacket : SockChatS2CPacket { private readonly long UserId; private readonly string UserName; private readonly Colour UserColour; @@ -33,7 +33,7 @@ UserPerms.HasFlag(UserPermissions.CreateChannel) ? ( UserPerms.HasFlag(UserPermissions.SetChannelPermanent) ? 2 : 1 ) : 0, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/UserChannelLeaveLogPacket.cs b/SharpChat/Packet/UserChannelLeaveLogPacket.cs index 89dadb1..205f02f 100644 --- a/SharpChat/Packet/UserChannelLeaveLogPacket.cs +++ b/SharpChat/Packet/UserChannelLeaveLogPacket.cs @@ -1,24 +1,23 @@ using System; namespace SharpChat.Packet { - public class UserChannelLeaveLogPacket : ServerPacket { - private readonly long Timestamp; + public class UserChannelLeaveLogPacket : SockChatTimedS2CPacket { private readonly string UserName; public UserChannelLeaveLogPacket( - DateTimeOffset timestamp, + long messageId, + DateTimeOffset timeStamp, string userName - ) { - Timestamp = timestamp.ToUnixTimeSeconds(); + ) : base(messageId, timeStamp) { UserName = userName; } public override string Pack() { return string.Format( "7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\flchan\f{1}\t{2}\t0\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), UserName, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/UserChannelLeavePacket.cs b/SharpChat/Packet/UserChannelLeavePacket.cs index feb7221..e2bb348 100644 --- a/SharpChat/Packet/UserChannelLeavePacket.cs +++ b/SharpChat/Packet/UserChannelLeavePacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class UserChannelLeavePacket : ServerPacket { + public class UserChannelLeavePacket : SockChatS2CPacket { private readonly long UserId; public UserChannelLeavePacket(long userId) { @@ -7,7 +7,11 @@ } public override string Pack() { - return string.Format("5\t1\t{0}\t{1}", UserId, SequenceId); + return string.Format( + "5\t1\t{0}\t{1}", + UserId, + MessageId + ); } } } diff --git a/SharpChat/Packet/UserConnectLogPacket.cs b/SharpChat/Packet/UserConnectLogPacket.cs index 383a4d2..1f87e42 100644 --- a/SharpChat/Packet/UserConnectLogPacket.cs +++ b/SharpChat/Packet/UserConnectLogPacket.cs @@ -1,24 +1,23 @@ using System; namespace SharpChat.Packet { - public class UserConnectLogPacket : ServerPacket { - private readonly long Timestamp; + public class UserConnectLogPacket : SockChatTimedS2CPacket { private readonly string UserName; public UserConnectLogPacket( - DateTimeOffset timestamp, + long messageId, + DateTimeOffset timeStamp, string userName - ) { - Timestamp = timestamp.ToUnixTimeSeconds(); + ) : base(messageId, timeStamp) { UserName = userName; } public override string Pack() { return string.Format( "7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjoin\f{1}\t{2}\t0\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), UserName, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/UserConnectPacket.cs b/SharpChat/Packet/UserConnectPacket.cs index 15712c3..aafb68d 100644 --- a/SharpChat/Packet/UserConnectPacket.cs +++ b/SharpChat/Packet/UserConnectPacket.cs @@ -1,8 +1,5 @@ -using System; - -namespace SharpChat.Packet { - public class UserConnectPacket : ServerPacket { - private readonly DateTimeOffset Joined; +namespace SharpChat.Packet { + public class UserConnectPacket : SockChatTimedS2CPacket { private readonly long UserId; private readonly string UserName; private readonly Colour UserColour; @@ -10,14 +7,12 @@ namespace SharpChat.Packet { private readonly UserPermissions UserPerms; public UserConnectPacket( - DateTimeOffset joined, long userId, string userName, Colour userColour, int userRank, UserPermissions userPerms ) { - Joined = joined; UserId = userId; UserName = userName; UserColour = userColour; @@ -28,7 +23,7 @@ namespace SharpChat.Packet { public override string Pack() { return string.Format( "1\t{0}\t{1}\t{2}\t{3}\t{4} {5} {6} {7} {8}\t{9}", - Joined.ToUnixTimeSeconds(), + TimeStamp.ToUnixTimeSeconds(), UserId, UserName, UserColour, @@ -39,7 +34,7 @@ namespace SharpChat.Packet { UserPerms.HasFlag(UserPermissions.CreateChannel) ? ( UserPerms.HasFlag(UserPermissions.SetChannelPermanent) ? 2 : 1 ) : 0, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/UserDisconnectLogPacket.cs b/SharpChat/Packet/UserDisconnectLogPacket.cs index 071b294..409081b 100644 --- a/SharpChat/Packet/UserDisconnectLogPacket.cs +++ b/SharpChat/Packet/UserDisconnectLogPacket.cs @@ -1,17 +1,16 @@ using System; namespace SharpChat.Packet { - public class UserDisconnectLogPacket : ServerPacket { - private readonly long Timestamp; + public class UserDisconnectLogPacket : SockChatTimedS2CPacket { private readonly string UserName; private readonly UserDisconnectReason Reason; public UserDisconnectLogPacket( - DateTimeOffset timestamp, + long messageId, + DateTimeOffset timeStamp, string userName, UserDisconnectReason reason - ) { - Timestamp = timestamp.ToUnixTimeSeconds(); + ) : base(messageId, timeStamp) { UserName = userName; Reason = reason; } @@ -19,7 +18,7 @@ namespace SharpChat.Packet { public override string Pack() { return string.Format( "7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\f{1}\f{2}\t{3}\t0\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), Reason switch { UserDisconnectReason.Leave => "leave", UserDisconnectReason.TimeOut => "timeout", @@ -28,7 +27,7 @@ namespace SharpChat.Packet { _ => "leave", }, UserName, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/UserDisconnectPacket.cs b/SharpChat/Packet/UserDisconnectPacket.cs index 63a2066..547ee7f 100644 --- a/SharpChat/Packet/UserDisconnectPacket.cs +++ b/SharpChat/Packet/UserDisconnectPacket.cs @@ -1,19 +1,14 @@ -using System; - -namespace SharpChat.Packet { - public class UserDisconnectPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class UserDisconnectPacket : SockChatTimedS2CPacket { private readonly long UserId; private readonly string UserName; private readonly UserDisconnectReason Reason; public UserDisconnectPacket( - DateTimeOffset timestamp, long userId, string userName, UserDisconnectReason reason ) { - Timestamp = timestamp.ToUnixTimeSeconds(); UserId = userId; UserName = userName; Reason = reason; @@ -31,8 +26,8 @@ namespace SharpChat.Packet { UserDisconnectReason.Flood => "flood", _ => "leave", }, - Timestamp, - SequenceId + TimeStamp.ToUnixTimeSeconds(), + MessageId ); } } diff --git a/SharpChat/Packet/UserNameInUseErrorPacket.cs b/SharpChat/Packet/UserNameInUseErrorPacket.cs index 14631ae..b804336 100644 --- a/SharpChat/Packet/UserNameInUseErrorPacket.cs +++ b/SharpChat/Packet/UserNameInUseErrorPacket.cs @@ -1,17 +1,18 @@ -using System; - -namespace SharpChat.Packet { - public class UserNameInUseErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class UserNameInUseErrorPacket : SockChatTimedS2CPacket { private readonly string UserName; public UserNameInUseErrorPacket(string userName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); UserName = userName; } public override string Pack() { - return string.Format("2\t{0}\t-1\t1\fnameinuse\f{1}\t{2}\t10010", Timestamp, UserName, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\fnameinuse\f{1}\t{2}\t10010", + TimeStamp.ToUnixTimeSeconds(), + UserName, + MessageId + ); } } } diff --git a/SharpChat/Packet/UserNotFoundErrorPacket.cs b/SharpChat/Packet/UserNotFoundErrorPacket.cs index 5d414a4..9ab72fd 100644 --- a/SharpChat/Packet/UserNotFoundErrorPacket.cs +++ b/SharpChat/Packet/UserNotFoundErrorPacket.cs @@ -1,17 +1,18 @@ -using System; - -namespace SharpChat.Packet { - public class UserNotFoundErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class UserNotFoundErrorPacket : SockChatTimedS2CPacket { private readonly string UserName; public UserNotFoundErrorPacket(string userName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); UserName = userName; } public override string Pack() { - return string.Format("2\t{0}\t-1\t1\fusernf\f{1}\t{2}\t10010", Timestamp, UserName, SequenceId); + return string.Format( + "2\t{0}\t-1\t1\fusernf\f{1}\t{2}\t10010", + TimeStamp.ToUnixTimeSeconds(), + UserName, + MessageId + ); } } } diff --git a/SharpChat/Packet/UserUpdateNotificationPacket.cs b/SharpChat/Packet/UserUpdateNotificationPacket.cs index 2275ddc..2b02233 100644 --- a/SharpChat/Packet/UserUpdateNotificationPacket.cs +++ b/SharpChat/Packet/UserUpdateNotificationPacket.cs @@ -1,24 +1,20 @@ -using System; - -namespace SharpChat.Packet { - public class UserUpdateNotificationPacket : ServerPacket { +namespace SharpChat.Packet { + public class UserUpdateNotificationPacket : SockChatTimedS2CPacket { private readonly string PreviousName; private readonly string NewName; - private readonly long Timestamp; public UserUpdateNotificationPacket(string previousName, string newName) { PreviousName = previousName; NewName = newName; - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); } public override string Pack() { return string.Format( "2\t{0}\t-1\t0\fnick\f{1}\f{2}\t{3}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), PreviousName, NewName, - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/UserUpdatePacket.cs b/SharpChat/Packet/UserUpdatePacket.cs index 8a05586..b0c34e9 100644 --- a/SharpChat/Packet/UserUpdatePacket.cs +++ b/SharpChat/Packet/UserUpdatePacket.cs @@ -1,5 +1,5 @@ namespace SharpChat.Packet { - public class UserUpdatePacket : ServerPacket { + public class UserUpdatePacket : SockChatS2CPacket { private readonly long UserId; private readonly string UserName; private readonly Colour UserColour; diff --git a/SharpChat/Packet/UsersPopulatePacket.cs b/SharpChat/Packet/UsersPopulatePacket.cs index ee1c683..d319a32 100644 --- a/SharpChat/Packet/UsersPopulatePacket.cs +++ b/SharpChat/Packet/UsersPopulatePacket.cs @@ -1,7 +1,7 @@ using System.Text; namespace SharpChat.Packet { - public class UsersPopulatePacket : ServerPacket { + public class UsersPopulatePacket : SockChatS2CPacket { public record ListEntry(long Id, string Name, Colour Colour, int Rank, UserPermissions Perms, bool Visible); private readonly ListEntry[] Entries; diff --git a/SharpChat/Packet/WhoChannelNotFoundErrorPacket.cs b/SharpChat/Packet/WhoChannelNotFoundErrorPacket.cs index 0b55c87..e8f609a 100644 --- a/SharpChat/Packet/WhoChannelNotFoundErrorPacket.cs +++ b/SharpChat/Packet/WhoChannelNotFoundErrorPacket.cs @@ -1,21 +1,17 @@ -using System; - -namespace SharpChat.Packet { - public class WhoChannelNotFoundErrorPacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class WhoChannelNotFoundErrorPacket : SockChatTimedS2CPacket { private readonly string ChannelName; public WhoChannelNotFoundErrorPacket(string channelName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; } public override string Pack() { return string.Format( "2\t{0}\t-1\t1\fwhoerr\f{1}\t{2}\t10010", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName), - SequenceId + MessageId ); } } diff --git a/SharpChat/Packet/WhoChannelResponsePacket.cs b/SharpChat/Packet/WhoChannelResponsePacket.cs index a19f763..d74c6e3 100644 --- a/SharpChat/Packet/WhoChannelResponsePacket.cs +++ b/SharpChat/Packet/WhoChannelResponsePacket.cs @@ -2,14 +2,12 @@ using System.Text; namespace SharpChat.Packet { - public class WhoChannelResponsePacket : ServerPacket { - private readonly long Timestamp; + public class WhoChannelResponsePacket : SockChatTimedS2CPacket { private readonly string ChannelName; private readonly string[] Users; private readonly string SelfName; public WhoChannelResponsePacket(string channelName, string[] users, string selfName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); ChannelName = channelName; Users = users; SelfName = selfName; @@ -20,7 +18,7 @@ namespace SharpChat.Packet { sb.AppendFormat( "2\t{0}\t-1\t0\fwhochan\f{1}\f", - Timestamp, + TimeStamp.ToUnixTimeSeconds(), SockChatUtility.SanitiseChannelName(ChannelName) ); @@ -36,7 +34,7 @@ namespace SharpChat.Packet { if(Users.Length > 0) sb.Length -= 2; - sb.AppendFormat("\t{0}\t10010", SequenceId); + sb.AppendFormat("\t{0}\t10010", MessageId); return sb.ToString(); } diff --git a/SharpChat/Packet/WhoServerResponsePacket.cs b/SharpChat/Packet/WhoServerResponsePacket.cs index 9a2b844..ebbd3d0 100644 --- a/SharpChat/Packet/WhoServerResponsePacket.cs +++ b/SharpChat/Packet/WhoServerResponsePacket.cs @@ -2,13 +2,11 @@ using System.Text; namespace SharpChat.Packet { - public class WhoServerResponsePacket : ServerPacket { - private readonly long Timestamp; + public class WhoServerResponsePacket : SockChatTimedS2CPacket { private readonly string[] Users; private readonly string SelfName; public WhoServerResponsePacket(string[] users, string selfName) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); Users = users; SelfName = selfName; } @@ -16,7 +14,7 @@ namespace SharpChat.Packet { public override string Pack() { StringBuilder sb = new(); - sb.AppendFormat("2\t{0}\t-1\t0\fwho\f", Timestamp); + sb.AppendFormat("2\t{0}\t-1\t0\fwho\f", TimeStamp.ToUnixTimeSeconds()); foreach(string userName in Users) { sb.Append(@" 0) sb.Length -= 2; - sb.AppendFormat("\t{0}\t10010", SequenceId); + sb.AppendFormat("\t{0}\t10010", MessageId); return sb.ToString(); } diff --git a/SharpChat/Packet/WhoisResponsePacket.cs b/SharpChat/Packet/WhoisResponsePacket.cs index 428e454..b1657cd 100644 --- a/SharpChat/Packet/WhoisResponsePacket.cs +++ b/SharpChat/Packet/WhoisResponsePacket.cs @@ -1,19 +1,21 @@ -using System; - -namespace SharpChat.Packet { - public class WhoisResponsePacket : ServerPacket { - private readonly long Timestamp; +namespace SharpChat.Packet { + public class WhoisResponsePacket : SockChatTimedS2CPacket { private readonly string UserName; private readonly string RemoteAddress; public WhoisResponsePacket(string userName, string remoteAddress) { - Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); UserName = userName; RemoteAddress = remoteAddress; } public override string Pack() { - return string.Format("2\t{0}\t-1\t0\fipaddr\f{1}\f{2}\t{3}\t10010", Timestamp, UserName, RemoteAddress, SequenceId); + return string.Format( + "2\t{0}\t-1\t0\fipaddr\f{1}\f{2}\t{3}\t10010", + TimeStamp.ToUnixTimeSeconds(), + UserName, + RemoteAddress, + MessageId + ); } } } diff --git a/SharpChat/SockChatS2CPacket.cs b/SharpChat/SockChatS2CPacket.cs new file mode 100644 index 0000000..f87dde4 --- /dev/null +++ b/SharpChat/SockChatS2CPacket.cs @@ -0,0 +1,15 @@ +namespace SharpChat { + public abstract class SockChatS2CPacket { + protected readonly long MessageId; + + public SockChatS2CPacket() { + MessageId = SharpId.Next(); + } + + public SockChatS2CPacket(long messageId) { + MessageId = messageId; + } + + public abstract string Pack(); + } +} diff --git a/SharpChat/SockChatTimedS2CPacket.cs b/SharpChat/SockChatTimedS2CPacket.cs new file mode 100644 index 0000000..ac09ecb --- /dev/null +++ b/SharpChat/SockChatTimedS2CPacket.cs @@ -0,0 +1,15 @@ +using System; + +namespace SharpChat { + public abstract class SockChatTimedS2CPacket : SockChatS2CPacket { + protected readonly DateTimeOffset TimeStamp; + + public SockChatTimedS2CPacket() : base() { + TimeStamp = DateTimeOffset.UtcNow; + } + + public SockChatTimedS2CPacket(long messageId, DateTimeOffset timeStamp) : base(messageId) { + TimeStamp = timeStamp; + } + } +}