using System; namespace Project { /// /// Chat message type /// public enum MessageType { /// Client connect Connect = 0, /// Client disconnect Disconnect = 1, /// Normal chat message Chat = 2, /// Server notice Notice = 3, /// Whisper message Whisper = 4, /// User list request UserListRequest = 5, /// User list response UserListResponse = 6, /// Ping (keep alive) Ping = 7, /// Pong (ping response) Pong = 8 } /// /// Chat message protocol /// [Serializable] public class ChatMessage { /// Message type public MessageType Type { get; set; } /// Sender nickname public string NickName { get; set; } /// Sender employee ID (사번) public string EmployeeId { get; set; } /// Sender IP public string IpAddress { get; set; } /// Sender hostname public string HostName { get; set; } /// Message content public string Content { get; set; } /// Target employee ID (for 1:1 chat) public string TargetEmployeeId { get; set; } /// Target nickname (for whisper, null for broadcast) public string TargetNickName { get; set; } /// Send time public DateTime Timestamp { get; set; } /// User group (for filtering) public string UserGroup { get; set; } public ChatMessage() { Timestamp = DateTime.Now; } public override string ToString() { return $"[{Timestamp:HH:mm:ss}] {NickName}: {Content}"; } } }