예제 #1
0
        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();
        }