コード例 #1
0
        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);
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
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();
        }