public KXTUCCacheFile ( string path, Action <LogLevel, string> notify, bool chat_type = FriendType ) { Invaild = false; VisitTime = DateTime.Now; Notify = notify; ChatType = chat_type; Stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite); byte[] buffer = new byte[KXTUserChatHead.KXTUserChatHeadLength]; Stream.Read(buffer, 0, buffer.Length); Write = KXTUserChatHead.Parse(buffer); RequestList = new Dictionary <Guid, KXTUserChatHead>(); ReadLock = 0; WriteLock = 0; SaveTimes = 0; }
public void AddGroup(string group_id) { FileStream stream = File.Create(RootDirectory + "\\Groups\\" + group_id + ".kxtchat"); KXTUserChatHead head = new KXTUserChatHead { EndRecorder = 0, RecorderSize = 0 }; stream.Write(head.ToByteArray(), 0, KXTUserChatHead.KXTUserChatHeadLength); stream.Flush(); stream.Close(); }
public static KXTUserChatHead Parse(byte[] buffer) { KXTUserChatHead head = new KXTUserChatHead(); try { head.EndRecorder = BitConverter.ToInt64(buffer, 0); head.RecorderSize = BitConverter.ToInt32(buffer, 8); } catch { } return(head); }
public bool AddFriend(string userA, string userB) { if (DBReader.NewRelation(userA, userB, out string relation_id)) { FileStream stream = File.Create(RootDirectory + "\\Relations\\" + relation_id + ".kxtchat"); KXTUserChatHead head = new KXTUserChatHead { EndRecorder = 0, RecorderSize = 0 }; stream.Write(head.ToByteArray(), 0, KXTUserChatHead.KXTUserChatHeadLength); stream.Flush(); stream.Close(); return(true); } return(false); }
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(); }