using System.Text; namespace SharpChat.Packet { public enum UserDisconnectReason { Leave, TimeOut, Kicked, Flood, } public class UserDisconnectPacket( long msgId, DateTimeOffset disconnected, ChatUser user, UserDisconnectReason reason ) : IServerPacket { public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user)); public IEnumerable<string> Pack() { StringBuilder sb = new(); sb.Append('3'); sb.Append('\t'); sb.Append(User.UserId); sb.Append('\t'); sb.Append(User.LegacyNameWithStatus); sb.Append('\t'); switch(reason) { case UserDisconnectReason.Leave: default: sb.Append("leave"); break; case UserDisconnectReason.TimeOut: sb.Append("timeout"); break; case UserDisconnectReason.Kicked: sb.Append("kick"); break; case UserDisconnectReason.Flood: sb.Append("flood"); break; } sb.Append('\t'); sb.Append(disconnected.ToUnixTimeSeconds()); sb.Append('\t'); sb.Append(msgId); yield return sb.ToString(); } } }