public static KXTUserChatItem Parse(byte[] buffer) { KXTUserChatItem item = new KXTUserChatItem(); try { item.Sender = new Guid(buffer); item.PreRecorder = BitConverter.ToInt64(buffer, 16); item.PreSize = BitConverter.ToInt32(buffer, 24); item.Time = IKXTServer.KXTBitConvert.ToDateTime(buffer, 28); item.Message = IKXTServer.KXTBitConvert.ToString(buffer, 36); } catch { } return(item); }
public void Save(ChatMessage chat) { ToLockWrite(); VisitTime = DateTime.Now; Invaild = false; byte[] temp = new KXTUserChatItem { PreRecorder = Write.EndRecorder, PreSize = Write.RecorderSize, Sender = IKXTServer.DataConvert.GetGuid(chat.Sender), Time = chat.Time, Message = chat.Message }.ToByteArray(); try { long position = (0 == Write.EndRecorder ? KXTUserChatHead.KXTUserChatHeadLength : Write.EndRecorder) + Write.RecorderSize; Stream.Position = position; Stream.Write(temp, 0, temp.Length); Write.EndRecorder = position; Write.RecorderSize = temp.Length; ++SaveTimes; } catch { } ToUnLockWrite(); if (20 < SaveTimes) { Flush(); } }
public void Read(Guid request_id, out ChatPackage[] chats) { ToLockRead(); VisitTime = DateTime.Now; Invaild = false; List <ChatPackage> buffer = new List <ChatPackage>(); KXTUserChatHead value; if (!RequestList.TryGetValue(request_id, out value)) { ToLockWrite(); value = new KXTUserChatHead { EndRecorder = Write.EndRecorder, RecorderSize = Write.RecorderSize }; ToUnLockWrite(); RequestList.Add(request_id, value); } for (int i = 0; i < 10; ++i) { if (0 == value.EndRecorder) { break; } byte[] temp = new byte[value.RecorderSize]; Stream.Position = value.EndRecorder; Stream.Read(temp, 0, temp.Length); KXTUserChatItem item = KXTUserChatItem.Parse(temp); value.EndRecorder = item.PreRecorder; value.RecorderSize = item.PreSize; if (ChatType) { buffer.Add(new FriendChatPackage { Message = item.Message, Sender = IKXTServer.DataConvert.GetString(item.Sender), Time = item.Time }); } else { buffer.Add(new FriendChatPackage { Message = item.Message, Sender = IKXTServer.DataConvert.GetString(item.Sender), Time = item.Time }); } } ToUnLockRead(); chats = buffer.ToArray(); }