diff --git a/SharpChat/Packet/MOTDPacket.cs b/SharpChat/Packet/MOTDPacket.cs index fb625de..44d12aa 100644 --- a/SharpChat/Packet/MOTDPacket.cs +++ b/SharpChat/Packet/MOTDPacket.cs @@ -1,8 +1,10 @@ -namespace SharpChat.Packet { +using System; + +namespace SharpChat.Packet { public class MOTDPacket : SockChatTimedS2CPacket { private readonly string Body; - public MOTDPacket(string body) { + public MOTDPacket(DateTimeOffset timeStamp, string body) : base(timeStamp) { Body = body; } diff --git a/SharpChat/PacketHandlers/AuthHandler.cs b/SharpChat/PacketHandlers/AuthHandler.cs index a4d4d1c..38df9bf 100644 --- a/SharpChat/PacketHandlers/AuthHandler.cs +++ b/SharpChat/PacketHandlers/AuthHandler.cs @@ -9,17 +9,22 @@ using System.Threading.Tasks; namespace SharpChat.PacketHandlers { public class AuthHandler : IPacketHandler { + public const string MOTD_FILE = @"welcome.txt"; + + private readonly DateTimeOffset Started; private readonly MisuzuClient Misuzu; private readonly ChannelInfo DefaultChannel; private readonly CachedValue MaxMessageLength; private readonly CachedValue MaxConnections; public AuthHandler( + DateTimeOffset started, MisuzuClient msz, ChannelInfo? defaultChannel, CachedValue maxMsgLength, CachedValue maxConns ) { + Started = started; Misuzu = msz; DefaultChannel = defaultChannel ?? throw new ArgumentNullException(nameof(defaultChannel)); MaxMessageLength = maxMsgLength; @@ -144,14 +149,14 @@ namespace SharpChat.PacketHandlers { ctx.Connection.BumpPing(); ctx.Connection.User = user; - ctx.Connection.Send(new MOTDPacket($"Welcome to Flashii Chat, {user.UserName}!")); + ctx.Connection.Send(new MOTDPacket(Started, $"Welcome to Flashii Chat, {user.UserName}!")); - if(File.Exists("welcome.txt")) { - IEnumerable lines = File.ReadAllLines("welcome.txt").Where(x => !string.IsNullOrWhiteSpace(x)); + if(File.Exists(MOTD_FILE)) { + IEnumerable lines = File.ReadAllLines(MOTD_FILE).Where(x => !string.IsNullOrWhiteSpace(x)); string? line = lines.ElementAtOrDefault(RNG.Next(lines.Count())); if(!string.IsNullOrWhiteSpace(line)) - ctx.Connection.Send(new MOTDPacket(line)); + ctx.Connection.Send(new MOTDPacket(File.GetLastWriteTimeUtc(MOTD_FILE), line)); } ctx.Chat.HandleJoin(user, DefaultChannel, ctx.Connection, MaxMessageLength); diff --git a/SharpChat/SockChatServer.cs b/SharpChat/SockChatServer.cs index a7d3be2..35492c4 100644 --- a/SharpChat/SockChatServer.cs +++ b/SharpChat/SockChatServer.cs @@ -39,6 +39,7 @@ namespace SharpChat { public SockChatServer(HttpClient httpClient, MisuzuClient msz, IEventStorage evtStore, IConfig config) { Logger.Write("Initialising Sock Chat server..."); + DateTimeOffset started = DateTimeOffset.UtcNow; HttpClient = httpClient; Misuzu = msz; @@ -71,7 +72,13 @@ namespace SharpChat { if(Context.Channels.PublicCount < 1) Context.Channels.Add(new ChannelInfo("Default")); - GuestHandlers.Add(new AuthHandler(Misuzu, Context.Channels.MainChannel, MaxMessageLength, MaxConnections)); + GuestHandlers.Add(new AuthHandler( + started, + Misuzu, + Context.Channels.MainChannel, + MaxMessageLength, + MaxConnections + )); AuthedHandlers.AddRange(new IPacketHandler[] { new PingHandler(Misuzu), diff --git a/SharpChat/SockChatTimedS2CPacket.cs b/SharpChat/SockChatTimedS2CPacket.cs index ac09ecb..3c29d62 100644 --- a/SharpChat/SockChatTimedS2CPacket.cs +++ b/SharpChat/SockChatTimedS2CPacket.cs @@ -8,6 +8,10 @@ namespace SharpChat { TimeStamp = DateTimeOffset.UtcNow; } + public SockChatTimedS2CPacket(DateTimeOffset timeStamp) : base() { + TimeStamp = timeStamp; + } + public SockChatTimedS2CPacket(long messageId, DateTimeOffset timeStamp) : base(messageId) { TimeStamp = timeStamp; }