using System; namespace SharpChat.Packet { public enum UserDisconnectReason { Leave, TimeOut, Kicked, Flood, } public class UserDisconnectPacket : ServerPacket { private readonly DateTimeOffset Disconnected; private readonly long UserId; private readonly string UserName; private readonly UserDisconnectReason Reason; public UserDisconnectPacket( DateTimeOffset disconnected, long userId, string userName, UserDisconnectReason reason ) { Disconnected = disconnected; UserId = userId; UserName = userName ?? throw new ArgumentNullException(nameof(userName)); Reason = reason; } public override string Pack() { return string.Format( "3\t{0}\t{1}\t{2}\t{3}\t{4}", UserId, UserName, Reason switch { UserDisconnectReason.Leave => "leave", UserDisconnectReason.TimeOut => "timeout", UserDisconnectReason.Kicked => "kick", UserDisconnectReason.Flood => "flood", _ => "leave", }, Disconnected.ToUnixTimeSeconds(), SequenceId ); } } }