| using System.Text;  | 
| using System.Collections;  | 
| using vnxbqy.UI;  | 
| using System;  | 
|   | 
| public class ChatData  | 
| {  | 
|     public ChatData(string content)  | 
|     {  | 
|         _content = content;  | 
|         if (ChatCenter.s_VoiceRegex.IsMatch(_content))  | 
|         {  | 
|             _content = ChatCenter.s_VoiceRegex.Replace(_content, string.Empty);  | 
|         }  | 
|         richText = new StringBuilder();  | 
|         richText.Length = 0;  | 
|         createTime = DateTime.Now;  | 
|     }  | 
|   | 
|     private string _content = string.Empty;  | 
|   | 
|     public string content  | 
|     {  | 
|         get  | 
|         {  | 
|             if (richText.Length > 0)  | 
|             {  | 
|                 return richText.ToString();  | 
|             }  | 
|             return _content;  | 
|         }  | 
|         protected set  | 
|         {  | 
|             _content = value;  | 
|         }  | 
|     }  | 
|   | 
|     public ChatInfoType type { get; protected set; }  | 
|   | 
|     public DateTime createTime { get; set; }  | 
|   | 
|     private ChatInfoType m_DetailType = ChatInfoType.World;  | 
|     public ChatInfoType detailType  | 
|     {  | 
|         get  | 
|         {  | 
|             return m_DetailType;  | 
|         }  | 
|         set  | 
|         {  | 
|             m_DetailType = value;  | 
|         }  | 
|     }  | 
|   | 
|     public StringBuilder richText;  | 
|   | 
|     public ArrayList infoList = new ArrayList();  | 
| }  | 
|   | 
| public class ChatUeseData : ChatData  | 
| {  | 
|     public ChatUeseData(string _content, int player, string name, string extra) : base(_content)  | 
|     {  | 
|         this.player = player;  | 
|         this.name = name;  | 
|         extra = UIHelper.ServerStringTrim(extra);  | 
|         this.extra = extra;  | 
|         this.job = 1;  | 
|         IsSound = false;  | 
|         var extraLength = extra.Length;  | 
|         if (extraLength > 1)  | 
|         {  | 
|             vipLv = int.Parse(extra.Substring(0, 2));  | 
|         }  | 
|         if (extraLength > 2)  | 
|         {  | 
|             isGm = byte.Parse(extra.Substring(2, 1)) == 1;  | 
|         }  | 
|         if (extraLength > 3)  | 
|         {  | 
|             job = byte.Parse(extra.Substring(3, 1));  | 
|         }  | 
|         if (extraLength > 4)  | 
|         {  | 
|             bubbleId = int.Parse(extra.Substring(4, extraLength > 5 ? 2 : 1));  | 
|         }  | 
|         if (extraLength > 12)  | 
|         {  | 
|             serverGroupId = int.Parse(extra.Substring(6, 7));  | 
|         }  | 
|         if (extraLength > 16)  | 
|         {  | 
|             level = int.Parse(extra.Substring(13, 4));  | 
|         }  | 
|         if (ChatCenter.s_VoiceRegex.IsMatch(_content))  | 
|         {  | 
|             var _match = ChatCenter.s_VoiceRegex.Match(_content);  | 
|             soundTick = long.Parse(_match.Groups[1].Value);  | 
|             soundLength = byte.Parse(_match.Groups[2].Value)/10.0f;  | 
|             IsSound = true;  | 
|         }  | 
|   | 
|         string[] parts = extra.Split('|');  | 
|         face = (parts.Length > 4 && int.TryParse(parts[4], out var result1)) ? result1 : 0;  | 
|         facePic = (parts.Length > 5 && int.TryParse(parts[5], out var result2)) ? result2 : 0;  | 
|     }  | 
|     public int player { get; protected set; }  | 
|     public string name { get; protected set; }  | 
|     public string extra { get; protected set; }  | 
|     public int vipLv { get; protected set; }  | 
|     public bool isGm { get; protected set; }  | 
|     public int job { get; protected set; }  | 
|     public int bubbleId { get; protected set; }  | 
|     public long soundTick { get; private set; }  | 
|     public bool IsSound { get; private set; }  | 
|     public float soundLength { get; private set; }  | 
|     public int serverGroupId { get; private set; }  | 
|     public int level { get; private set; }  | 
|     public int face { get; private set; }  | 
|     public int facePic { get; private set; }  | 
| }  | 
|   | 
| public class ChatSystemData : ChatData  | 
| {  | 
|     public ChatSystemData(string content) : base(content)  | 
|     {  | 
|         type = ChatInfoType.System;  | 
|     }  | 
| }  | 
|   | 
| public class ChatTrumpetData : ChatUeseData  | 
| {  | 
|     public ChatTrumpetData(string content, int player, string name, string extra, byte speakType, string accId) : base(content, player, name, extra)  | 
|     {  | 
|         this.speakType = speakType;  | 
|         this.accId = accId;  | 
|         type = ChatInfoType.Trumpet;  | 
|     }  | 
|   | 
|     public byte speakType { get; protected set; }  | 
|   | 
|     public string accId { get; protected set; }  | 
| }  | 
|   | 
| public class ChatWorldData : ChatUeseData  | 
| {  | 
|     public ChatWorldData(string content, int player, string name, string extra) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.World;  | 
|     }  | 
| }  | 
|   | 
| public class ChatAreaData : ChatUeseData  | 
| {  | 
|     public ChatAreaData(string content, int player, string name, string extra) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.Area;  | 
|     }  | 
| }  | 
|   | 
| public class ChatCrossServerData : ChatUeseData  | 
| {  | 
|     public ChatCrossServerData(string content, int player, string name, string extra) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.CrossServer;  | 
|     }  | 
| }  | 
|   | 
| public class ChatFactionData : ChatUeseData  | 
| {  | 
|     public ChatFactionData(string content, int player, string name, string extra, ChatInfoType detailType = ChatInfoType.default1) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.default1;  | 
|         this.detailType = detailType;  | 
|     }  | 
| }  | 
|   | 
| public class ChatTeamData : ChatUeseData  | 
| {  | 
|     public ChatTeamData(string content, int player, string name, string extra, ChatInfoType detailType = ChatInfoType.Team) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.Team;  | 
|         this.detailType = detailType;  | 
|     }  | 
| }  | 
|   | 
| public class ChatFamilyData : ChatUeseData  | 
| {  | 
|     public ChatFamilyData(string content, int player, string name, string extra, ChatInfoType detailType = ChatInfoType.Fairy) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.Fairy;  | 
|         this.detailType = detailType;  | 
|     }  | 
| }  | 
|   | 
| public class ChatInviteData : ChatUeseData  | 
| {  | 
|     public ChatInviteData(string content, int player, string name, string extra) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.Invite;  | 
|     }  | 
| }  | 
|   | 
| public class ChatFriendData : ChatUeseData  | 
| {  | 
|     public ChatFriendData(string content, int player, string name, string extra, string toName, byte talkType, uint toPlayer) : base(content, player, name, extra)  | 
|     {  | 
|         type = ChatInfoType.Friend;  | 
|         this.toName = toName;  | 
|         this.talkType = talkType;  | 
|         this.toPlayer = (int)toPlayer;  | 
|     }  | 
|   | 
|     public string toName { get; protected set; }  | 
|   | 
|     public byte talkType { get; protected set; }  | 
|   | 
|     public int toPlayer { get; protected set; }  | 
| } |