コード例 #1
0
 private void InsertSingleChatMessage(Messageobject msg)
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         ChatMessageList.Insert(0, msg.MessageObjectToBubbleItem());
     });
 }
コード例 #2
0
        /// <summary>
        /// 收到消息
        /// </summary>
        /// <param name="msg">Message</param>
        public void ProcessNewMessage(Messageobject msg)
        {
            //处理撤回消息
            switch (msg.type)
            {
            case kWCMessageType.RoomMemberNameChange:
                UpdateGroupMemberRemark(new MessageListItem {
                    Jid = msg.fromUserId, ShowTitle = msg.content, Avator = Applicate.LocalConfigData.GetDisplayAvatorPath(msg.fromUserId)
                });
                break;

            case kWCMessageType.Withdraw:
                var withdraw = ChatMessageList.FirstOrDefault(m => m.messageId == msg.content);
                if (withdraw != null)
                {
                    ChatMessageList.Remove(withdraw);    //移除对应消息
                }
                break;

            case kWCMessageType.PokeMessage:    //戳一戳
                break;

            case kWCMessageType.RoomFileDelete:    //文件删除
                break;

            default:
                break;
            }
        }
コード例 #3
0
 /// <summary>
 /// 转<see cref="Messageobject"/>为 <see cref="ChatBubbleItemModel"/>
 /// </summary>
 /// <param name="msg">源</param>
 /// <returns>转换后</returns>
 public static ChatBubbleItemModel MessageObjectToBubbleItem(this Messageobject msg)
 {
     return(new ChatBubbleItemModel
     {
         type = msg.type,
         timeSend = msg.timeSend,
         messageId = msg.messageId,
         timeReceive = msg.timeReceive,
         fromUserId = msg.fromUserId,
         fromUserName = msg.fromUserName,
         toUserId = msg.toUserId,
         toUserName = msg.toUserName,
         content = msg.content,
         filePath = msg.filePath,
         fileName = msg.fileName,
         location_y = msg.location_y,
         location_x = msg.location_x,
         sendRead = msg.sendRead,
         isUpload = msg.isUpload,
         isDownload = msg.isDownload,
         messageState = msg.messageState,
         timeLen = msg.timeLen,
         fileSize = msg.fileSize,
         objectId = msg.objectId,
         sipStatus = msg.sipStatus,
         sipDuration = msg.sipDuration,
         isReadDel = msg.isReadDel,
         isEncrypt = msg.isEncrypt,
         reSendCount = msg.reSendCount,
         readPersons = msg.readPersons,
         readTime = msg.readTime,
         FromId = msg.FromId,
         ToId = msg.ToId,
     });
 }
コード例 #4
0
        public void Initial(Messageobject msg = null)
        {
            if (msg == null)
            {
                return;
            }

            this.message = msg;
            membersList  = new ObservableCollection <DataofMember>();
            Friend       = new DataOfUserDetial()
            {
                userId = msg.fromUserId, nickname = msg.fromUserName
            };
            var roomVerify = JsonConvert.DeserializeObject <RoomVerify>(msg.objectId);

            room = new Room()
            {
                jid = roomVerify.roomJid
            }.GetByJid();
            string[] userIds   = roomVerify.userIds.Split(',');
            string[] nicknames = roomVerify.userNames.Split(',');
            if (roomVerify.isInvite == "0")//邀请进群
            {
                InviteText = String.Format("{0} 邀请 {1} 位朋友加入群聊", msg.fromUserName, userIds.Length);
            }
            else
            {
                InviteText = String.Format("{0} 申请加入群聊", msg.fromUserName);
            }
            Reason = roomVerify.reason;
            if (userIds.Length > 0)
            {
                for (int i = 0; i < userIds.Length; i++)
                {
                    string nk = "";
                    if (i < nicknames.Length)
                    {
                        nk = nicknames[i];
                    }

                    membersList.Add(new DataofMember()
                    {
                        userId = userIds[i], nickname = nk
                    });
                }
            }
            if (msg.isDownload)
            {
                //已确认
                BtnIsEnable = false;
                BtnContent  = "已确认";
            }
            else
            {
                BtnIsEnable = true;
                BtnContent  = "确认邀请";
            }
        }
コード例 #5
0
 /// <summary>
 /// 滚动时事件
 /// </summary>
 /// <param name="eve">滚动相关数据</param>
 private void ChatListScrollChanged(ScrollChangedEventArgs eve)
 {
     ShowOrHideFAB(eve);
     if (eve.VerticalChange < 0)//滚动长度小于0 (往上滚动)
     {
         //Messenger.Default.Send(false, ChatBubbleListControl.ScrollChatBubbleMessageToBottom);//自动滚动
         if (ChatMessageList.Count > 1)//如果显示消息不少于十条时显示
         {
             var lastMsgOffset = 0.0;
             for (int i = 0; i < ChatMessageList.Count; i++)
             {
                 lastMsgOffset += ChatMessageList[i].BubbleHeight;
             }
             lastMsgOffset = lastMsgOffset * 0.1;
             if (eve.VerticalOffset <= lastMsgOffset)//当只剩10%的长度时
             {
                 Task.Run(() =>
                 {
                     Messageobject tmpMsg = new Messageobject()
                     {
                         FromId = Applicate.MyAccount.userId,
                         ToId   = ChatMessageList[0].jid
                     };
                     List <Messageobject> msgList = tmpMsg.GetPageList(ChatMessageList.Count); //获取第二页消息
                     if (msgList.Count > 0)                                                    //如果查出消息才显示
                     {
                         App.Current.Dispatcher.Invoke(() =>
                         {
                             InsertChatMessage(msgList);
                             Task.Run(() =>
                             {
                                 App.Current.Dispatcher.Invoke(() =>
                                 {
                                     var scroll         = eve.Source as ScrollViewer; //Get ScrollViewer
                                     var previousOffset = lastMsgOffset;              //Get old messages' height
                                     for (int i = 0; i < msgList.Count; i++)          //Plus new messages' height
                                     {
                                         previousOffset += ChatMessageList[i].BubbleHeight;
                                     }
                                     scroll.ScrollToVerticalOffset(previousOffset);//Do scroll
                                 });
                             });
                         });//插入和显示消息
                     }
                     else//未查出消息
                     {
                         GetMoreMessage();//从服务器获取消息
                     }
                 });
             }
         }
     }
     else//往下滚动
     {
         //Messenger.Default.Send(true, ChatBubbleListControl.ScrollChatBubbleMessageToBottom);//自动滚动
     }
 }
コード例 #6
0
        /// <summary>
        /// 删除消息
        /// </summary>
        /// <param name="msg">需要删除的消息</param>
        private void RemoveMessage(Messageobject msg)
        {
            var msgItem = ChatMessageList.FirstOrDefault(m => m.messageId == msg.messageId);//获取

            if (msgItem != null)
            {
                ChatMessageList.Remove(msgItem);//删除
            }
        }
コード例 #7
0
        public void MsgReceipt(Messageobject msg)
        {
            var existsItem = ChatMessageList.FirstOrDefault(m => m.messageId == msg.messageId);//获取对应消息

            if (existsItem != null)
            {
                existsItem.messageState = 1;                  //设为送达
                existsItem.StateIcon    = PackIconKind.Check; //设为送达
                existsItem.MsgStateText = "送达";
                existsItem.ReadToolTip  = "送达";
            }
        }
コード例 #8
0
 /// <summary>
 /// 显示单个消息气泡
 /// </summary>
 /// <param name="message"></param>
 public void AddSingleChatMessage(Messageobject message)
 {
     if (ServiceLocator.Current.GetInstance <MainViewModel>().Sess.Jid == message.jid)
     {
         //Add the single to ChatMessageList
         ChatMessageList.Add(message.MessageObjectToBubbleItem());
         Messenger.Default.Send(true, ChatBubbleListControl.ScrollChatBubbleMessageToBottom);//自动滚动
         SendReadMsgAsync(new List <Messageobject> {
             message
         });                                                   //发送已读
     }
 }
コード例 #9
0
        public void SendTimeout(Messageobject msg)
        {
            var target = ChatMessageList.FirstOrDefault(m => m.messageId == msg.messageId);

            if (target != null)
            {
                target.messageState = -1;
                //target.StateIcon = PackIconKind.AlertCircle;

                target.UpdateMessageState();
                //target = target;
            }
        }
コード例 #10
0
ファイル: ChatRecord.xaml.cs プロジェクト: shaojava/PCManager
        public ChatRecord(string jid)
        {
            msgManager = new Messageobject()
            {
                fromUserId = Applicate.MyAccount.userId, toUserId = jid
            };
            this.thisJid = jid;
            InitializeComponent();
            var histmodel = new ChatHistoryViewModel();

            histmodel.InitialHistory(jid);//初始化
            this.DataContext = histmodel;
        }
コード例 #11
0
 /// <summary>
 /// 撤回消息
 /// </summary>
 /// <param name="msg">需要撤回的消息</param>
 private void WithDrawMessage(Messageobject msg)
 {
     if (ChatMessageList.Count(c => c.messageId == msg.messageId) > 0)
     {
         var cmsg = ChatMessageList.FirstOrDefault(c => c.messageId == msg.messageId);
         cmsg.content = msg.content; //内容
         cmsg.type    = msg.type;    //更新为撤回消息
         #region 移除并添加
         int index = ChatMessageList.IndexOf(cmsg);
         ChatMessageList.Remove(cmsg);
         ChatMessageList.Insert(index, cmsg);
         #endregion
     }
 }
コード例 #12
0
 private void Button_Click(object sender, RoutedEventArgs e)
 {
     message = new Messageobject()
     {
         messageId  = message.messageId,
         fromUserId = message.fromUserId,
         FromId     = message.FromId,
         toUserId   = message.toUserId,
         ToId       = message.ToId,
     }.GetModel();
     if (message != null)
     {
         new RoomVerifyForm(message).ShowDialog();
     }
 }
コード例 #13
0
        /// <summary>
        /// 处理新消息
        /// </summary>
        /// <param name="msg">新消息</param>
        private void ProcessNewMsg(Messageobject msg)
        {
            switch (msg.type)
            {
            case kWCMessageType.RoomFileDelete:
                DeleteFileItem(msg.content);    //删除文件
                break;

            case kWCMessageType.RoomFileDownload:
                break;

            default:
                break;
            }
        }
コード例 #14
0
        /// <summary>
        /// 处理消息回执
        /// </summary>
        /// <param name="msg">收到回执的消息</param>
        private void ProcessMsgReceipt(Messageobject msg)
        {
            switch (msg.type)
            {
            case kWCMessageType.RoomFileDelete:
                //DeleteFileItem(msg.fileName);//删除文件
                break;

            case kWCMessageType.RoomFileDownload:
                break;

            default:
                break;
            }
        }
コード例 #15
0
        /// <summary>
        /// 清空聊天记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void EmptyRecords_Click(object sender, RoutedEventArgs e)
        {
            Messageobject msgService = new Messageobject();
            int           i          = msgService.ClearAllMessage();
            var           mControl   = ServiceLocator.Current.GetInstance <MainViewModel>();

            if (mControl != null)
            {
                //mControl.SP_chatBottom.Children.Clear();//清理消息
                mControl.RecentMessageList.ToList().ForEach(d => { d.UnReadCount = 0; d.MessageItemContent = ""; });
                mControl.SetTotalUnReadCount();
                mControl.UpdateMessageList();
            }
            Snackbar.Enqueue("已清空");
            ConsoleLog.Output("删除" + i.ToString());
        }
コード例 #16
0
        /// <summary>
        /// 显示默认聊天信息(15条)
        /// </summary>
        public Messageobject ShowDefaultMessage()
        {
            var main = ServiceLocator.Current.GetInstance <MainViewModel>();

            ChatMessageList.Clear();
            var tmpMsg = new Messageobject()
            {
                FromId = Applicate.MyAccount.userId,
                ToId   = main.Sess.Jid
            };
            List <Messageobject> msgList = tmpMsg.GetPageList(0);

            ShowChatMessage(msgList);  //显示消息气泡
            SendReadMsgAsync(msgList); //发送已读
            return(msgList.LastOrDefault());
        }
コード例 #17
0
 public void InitialHistory(string jid)
 {
     msgManager = new Messageobject()
     {
         fromUserId = Applicate.MyAccount.userId,
         FromId     = Applicate.MyAccount.userId,
         toUserId   = jid,
         ToId       = jid,
     };
     this.thisJid = jid;
     keyWords     = "";
     msgList      = new ObservableCollection <Messageobject>();
     if (IsInDesignMode)
     {
         return;
     }
     showChatRecord();
 }
コード例 #18
0
ファイル: RoomVerify.xaml.cs プロジェクト: shaojava/PCManager
        public RoomVerifyForm(Messageobject msg)
        {
            InitializeComponent();
            var rverifymodel = new RoomVerifyViewModel();

            rverifymodel.Initial(msg);
            this.DataContext = rverifymodel;
            App.Current.Dispatcher.Invoke(() =>
            {
                //UserId = userId;
                #region 添加右上角按钮
                FormOperation operation = new FormOperation(this, false);
                Grid.SetColumnSpan(operation, 3);//
                operation.VerticalAlignment   = VerticalAlignment.Top;
                operation.HorizontalAlignment = HorizontalAlignment.Right;
                //添加到窗口中
                this.gd_main.Children.Add(operation);
                #endregion
            });
        }
コード例 #19
0
        /// <summary>
        /// 显示默认消息
        /// </summary>
        /// <param name="jid"></param>
        /// <returns></returns>
        public void ShowDefaultMessage(string jid)
        {
            App.Current.Dispatcher.Invoke(() =>
            {
                ChatMessageList.Clear();//
            });
            var tmpMsg = new Messageobject()
            {
                FromId = Applicate.MyAccount.userId,
                ToId   = jid
            };
            List <Messageobject> msgList = tmpMsg.GetPageList(0);

            ShowChatMessage(msgList);  //显示消息气泡
            SendReadMsgAsync(msgList); //发送已读
            if (msgList.Count < 15)    //如果消息数量不足15条则拉取100条存入数据库并显示15条
            {
                GetMoreMessage();
            }
        }
コード例 #20
0
 public JXRoomVerify(bool isgroup, Messageobject msg)
 {
     InitializeComponent();
     this.message     = msg;
     this.DataContext = this;//指定绑定的对象
     if (msg.type == kWCMessageType.RoomIsVerify)
     {
         var   mControl = ServiceLocator.Current.GetInstance <MainViewModel>();
         Regex reg      = new Regex("^[A-F0-9]{8}([A-F0-9]{4}){3}[A-F0-9]{12}$", RegexOptions.IgnoreCase);
         if (reg.IsMatch(msg.objectId))
         {
             return;
         }
         var roomVerify = JsonConvert.DeserializeObject <RoomVerify>(msg.objectId);
         if (roomVerify.isInvite == "0")//邀请进群
         {
             tb_prompt.Text = string.Format("{0} 邀请 {1} 位朋友加入群聊({2})", msg.fromUserName, roomVerify.userIds.Split(',').Length, Helpers.StampToDatetime(msg.timeSend).ToString("MM-dd HH:mm:ss"));
         }
         else
         {
             tb_prompt.Text = string.Format("{0} 申请加入群聊({1})", msg.fromUserName, Helpers.StampToDatetime(msg.timeSend).ToString("MM-dd HH:mm:ss"));
         }
     }
 }
コード例 #21
0
        /// <summary>
        /// 消息回执
        /// </summary>
        /// <param name="msg"></param>
        public void MsgReceipt(Messageobject msg)
        {
            if (msg.type >= kWCMessageType.FriendRequest && msg.type <= kWCMessageType.CancelBlackFriend)
            {
                InVerifingWaiting = false;
                var mControl   = ServiceLocator.Current.GetInstance <MainViewModel>();
                var verifyItem = VerifyUserList.FirstOrDefault(v => v.toUserId == msg.toUserId);
                if (verifyItem == null)
                {
                    verifyItem = new VerifingFriend()
                    {
                        toNickname = msg.toUserName,
                        toUserId   = msg.ToId
                    };
                }

                switch (msg.type)
                {
                case kWCMessageType.FriendRequest:    //打招呼回执
                    verifyItem.VerifyStatus = -3;
                    verifyItem.Content      = "等待验证中...";
                    break;

                case kWCMessageType.RequestAgree:    //通过验证回执
                    verifyItem.VerifyStatus = 1;
                    verifyItem.Content      = "我已通过对" + msg.toUserName /*((verifyItem.sex == 0) ? ("他") : ("她")) */ + "的验证";
                    var tmp = mControl.FriendList.FirstOrDefault(m => m.Jid == msg.toUserId);
                    //mControl.MsgItemMouseDown(tmp);
                    mControl.StartNewChatFromItem(tmp.Clone());
                    mControl.Snackbar.Enqueue(verifyItem.Content);    //
                    //ServiceLocator.Current.GetInstance<MainViewModel>().LoadAllFriendsByApi();
                    break;

                case kWCMessageType.RequestRefuse: //回话回执
                    InProgress   = false;          //不处于发送状态
                    DialogShow   = false;          //关闭对话框
                    AnswerContnt = "";             //清空文本
                    SnackBar.Enqueue("回话给" + msg.toUserName + "成功");
                    break;

                case kWCMessageType.DeleteFriend:
                    verifyItem.Content      = "已删除好友 " + msg.toUserName;
                    verifyItem.toNickname   = msg.toUserName;  //此处为接收者Name
                    verifyItem.VerifyStatus = -1;
                    break;

                case kWCMessageType.BlackFriend:
                    verifyItem.Content    = "已将好友 " + msg.toUserName + " 拉黑";
                    verifyItem.toNickname = msg.toUserName;    //此处为接收者Name
                    break;

                case kWCMessageType.RequestFriendDirectly:    //直接添加好友
                    verifyItem.VerifyStatus = 1;
                    verifyItem.Content      = "已添加好友" + msg.toUserName /*((verifyItem.sex == 0) ? ("他") : ("她"))*/;
                    if (new DataOfFriends().ExistsLocal(msg.ToId))    //本地数据库有用户
                    {
                        var dbFri = new DataOfFriends().GetByUserId(msg.ToId);
                        dbFri.UpdateFriendState(msg.ToId, 2);    //互为好友
                    }
                    else
                    {
                    }
                    Messenger.Default.Send(verifyItem.Content, MainViewNotifactions.SnacbarMessage);    //提示
                    break;

                case kWCMessageType.CancelBlackFriend:
                    var tuser = new DataOfFriends().GetByUserId(msg.toUserId);
                    verifyItem.Content      = "已将 " + tuser.toNickname + " 移出黑名单";
                    verifyItem.VerifyStatus = 1;    //互为好友
                    break;

                default:
                    break;
                }
                //更新最近用户中的内容
                Messenger.Default.Send(new MessageListItem
                {
                    Jid = "10001",
                    MessageItemContent = verifyItem.Content,
                    Avator             = Applicate.LocalConfigData.GetDisplayAvatorPath("10001")
                }, MainViewNotifactions.UpdateRecentItemContent);
                AddOrUpdateToList(verifyItem); //更新UI
                verifyItem.InsertOrUpdate();   //存入数据库
                verifyItem.Update();           //更新至数据库
            }
        }
コード例 #22
0
        /// <summary>
        /// 收到消息时
        /// </summary>
        /// <param name="msg">收到的新消息</param>
        public void ProcessNewMessage(Messageobject msg)
        {
            if (msg.type >= kWCMessageType.FriendRequest && msg.type <= kWCMessageType.PhoneContactToFriend)
            {
                var vItem    = new VerifingFriend();
                var mControl = ServiceLocator.Current.GetInstance <MainViewModel>();
                if (VerifyUserList.FirstOrDefault(v => v.toUserId == msg.fromUserId) != null)
                {
                    vItem = VerifyUserList.FirstOrDefault(v => v.toUserId == msg.fromUserId);
                }

                switch (msg.type)
                {
                case kWCMessageType.FriendRequest:
                    vItem.VerifyStatus = -4;          //对方添加己方
                    vItem.StatusTag    = "通过验证";
                    vItem.Content      = msg.content; //消息内容
                    break;

                case kWCMessageType.RequestAgree:
                    vItem.VerifyStatus = 1;
                    vItem.StatusTag    = "已通过验证";
                    vItem.Content      = "验证被" + msg.fromUserName /*((vItem.sex == 0) ? ("他") : ("她"))*/ + "通过了";
                    //mControl.AddToFriendList(msg.FromId);//添加到好友列表
                    var tmp = new MessageListItem()
                    {
                        Jid             = msg.FromId,
                        ShowTitle       = msg.fromUserName,
                        MessageTitle    = msg.fromUserName,
                        MessageItemType = ItemType.Message,
                        Avator          = Applicate.LocalConfigData.GetDisplayAvatorPath(msg.FromId)
                    };
                    mControl.MsgItemMouseDown(tmp);
                    mControl.StartNewChatFromItem(tmp.Clone());
                    break;

                case kWCMessageType.RequestRefuse:    //对方回话
                    //item.StatusTag = "";
                    vItem.CanAnswer = true;
                    vItem.Content   = msg.content; //回话内容
                    DialogShow      = false;
                    AnswerContnt    = "";          //清空文本
                    break;

                case kWCMessageType.DeleteFriend:
                    //System.Windows.Forms.MessageBox.Show("删除成功");
                    vItem.Content      = msg.fromUserName + " 已删除了我";
                    vItem.VerifyStatus = 0;
                    break;

                case kWCMessageType.BlackFriend:
                    vItem.VerifyStatus = 0;
                    vItem.Content      = msg.fromUserName + " 拉黑了我";
                    break;

                case kWCMessageType.RequestFriendDirectly:
                    vItem.VerifyStatus = 1;                            //互为好友
                    vItem.Content      = msg.fromUserName + " 添加你为好友"; //消息内容
                    break;

                case kWCMessageType.CancelBlackFriend:
                    vItem.Content = msg.fromUserName + " 取消了黑名单";
                    Messenger.Default.Send(vItem.toUserId, MainViewNotifactions.CancelBlockItem);
                    var tmpFriend = new DataOfFriends();
                    break;

                default:
                    break;
                }
                //更新最近用户中的内容
                Messenger.Default.Send(new MessageListItem
                {
                    Jid = "10001",
                    MessageItemContent = vItem.Content,
                    Avator             = Applicate.LocalConfigData.GetDisplayAvatorPath("10001")
                }, MainViewNotifactions.UpdateRecentItemContent);
                vItem.toUserId   = msg.fromUserId;            //UserId
                vItem.toNickname = msg.fromUserName;          //昵称
                vItem.Type       = Convert.ToInt32(msg.type); //消息类型
                vItem.InsertOrUpdate();                       //存入数据库
                AddOrUpdateToList(vItem);
            }
        }
コード例 #23
0
 /// <summary>
 /// 查看消息完成
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void GetMessagesComplete(object sender, UploadDataCompletedEventArgs e)
 {
     try
     {
         var resStr                   = Encoding.UTF8.GetString(e.Result);//使用
         var afterHtmlTxt             = Helpers.ClearHTML(resStr);
         var jsonRtn                  = JsonConvert.DeserializeObject <JsonParentMessage>(afterHtmlTxt);
         List <Messageobject> msgList = new List <Messageobject>();
         #region 获取返回消息
         foreach (var body in jsonRtn.data)
         {
             //body.Body = System.Web.HttpUtility.HtmlDecode(body.Body);//解码
             Messageobject reciveJsonMsg = JsonConvert.DeserializeObject <Messageobject>(body.Body);
             if (reciveJsonMsg.isEncrypt == 1)
             {
                 //string kyes = (Applicate.ApiKey + JsonMsg.timeSend + JsonMsg.messageId).MD5create();
                 reciveJsonMsg.content = AES.TDecrypt3Des(reciveJsonMsg.content, null);//解密
             }
             //reciveJsonMsg.jid = roomId;
             #region 拼接完整消息
             if (!string.IsNullOrWhiteSpace(body.room_jid_id)) //群聊
             {
                 reciveJsonMsg.ToId   = body.room_jid_id;      //群聊Jid
                 reciveJsonMsg.FromId = body.sender;           //发送者
             }
             else//单聊
             {
                 if (string.IsNullOrWhiteSpace(reciveJsonMsg.ToId))
                 {
                     reciveJsonMsg.ToId = body.direction == 1 ? body.sender : body.receiver;//设置接收者
                 }
                 if (string.IsNullOrWhiteSpace(reciveJsonMsg.FromId))
                 {
                     reciveJsonMsg.FromId = body.direction == 1 ? body.sender : body.receiver;//设置发送者
                 }
             }
             reciveJsonMsg.messageState = body.isRead == 1 ? 2 : 1;//设置已读或送达
             #endregion
             reciveJsonMsg.isRead = body.isRead;
             msgList.Add(reciveJsonMsg);
         }
         #endregion
         Task.Run(() =>
         {
             for (int i = 0; i < msgList.Count; i++)//插入数据库
             {
                 msgList[i].Insert();
             }
         });
         if (msgList.Count < 100)//如果返回数量小于100则为无更多消息
         {
             //如果滚动页面中没有消息,或  滚动页面中最顶部一条消息位为 普通消息
             if (ChatMessageList.Count == 0 ||
                 (ChatMessageList[0].type != kWCMessageType.LocalTypeNotice &&
                  !ChatMessageList[0].content.Contains("无更多聊天记录")))
             {
                 var tipmsg = new Messageobject()
                 {
                     content  = "已无更多聊天记录",
                     type     = kWCMessageType.LocalTypeNotice,
                     FromId   = Applicate.MyAccount.userId,
                     ToId     = ServiceLocator.Current.GetInstance <MainViewModel>().Sess.Jid,
                     timeSend = 126227520//设置发送时间为最早
                 };
                 Task.Run(() =>
                 {
                     tipmsg.Insert();
                 });
                 InsertSingleChatMessage(tipmsg);//显示至页面
             }
         }
         App.Current.Dispatcher.Invoke(() =>
         {
             int historyCount = 15;
             if (msgList.Count < 15)//计算最大显示15条消息
             {
                 historyCount = msgList.Count;
             }
             #region 只显示15条消息
             var tmplst = new List <Messageobject>();
             for (int i = historyCount - 1; i >= 0; i--)//获取
             {
                 tmplst.Add(msgList[i]);
             }
             if (ChatMessageList[0].type == kWCMessageType.LocalTypeNotice && ChatMessageList[0].content == "已无更多聊天记录")
             {
                 InsertChatMessage(tmplst, 1);//插入顶部的消息
             }
             else
             {
                 InsertChatMessage(tmplst);//插入顶部的消息
             }
             #endregion
             Task.Run(() =>
             {
                 App.Current.Dispatcher.Invoke(() =>
                 {
                     try
                     {
                         var previousOffset = 0.0;   //Get old messages' height
                         for (int i = 0; i < 5; i++) //获取5条消息记录的高度
                         {
                             previousOffset += ChatMessageList[i].BubbleHeight;
                         }
                         for (int i = 0; i < tmplst.Count; i++)//Plus new messages' height
                         {
                             previousOffset += ChatMessageList[i].BubbleHeight;
                         }
                         Messenger.Default.Send(previousOffset, ChatBubbleListControl.ScrollChatMessageListVerticalOffset);//通知界面滚动至原始位置
                     }
                     catch (Exception ex)
                     {
                         Console.WriteLine(ex);
                     }
                 });
             });
         });
     }
     catch (Exception ex)
     {
         Console.WriteLine("GetMessagesCompleteError" + ex.Message);
         LogHelper.log.Error("-_-_-_MessagesCompleteError" + ex.Message, ex);
     }
     finally
     {
         App.Current.Dispatcher.Invoke(() =>
         {
             IsLoading = false;
         });
         ((HttpClient)sender).Dispose(); //完成后释放资源
         HttpService = null;             //初始化Http访问
     }
 }