private void vTreeChating_NodeMouseDoubleClick(object sender, VirtualTreeEventArgs e) { //保存当前聊天内容到本地 SaveChatContentToLocal(); //替换聊天对象 ToUserInfo = vTreeChating.SelectedNode.Tag as UserInfo; if (ToUserInfo == null) { return; } vTreeChating.SuspendLayout(); vTreeChating.SelectedNode.SubItems[0].Text = ""; vTreeChating.PerformLayout(); //加载本地已有聊天记录 LoadChatContent(); //获取节点用户发送过来的未读消息 List <MessageInfo> lstInfo = new List <MessageInfo>(); lstInfo = ListMessageInfo.FindAll(i => i.MessageFrom.USER_ID == ToUserInfo.USER_ID); foreach (MessageInfo item in lstInfo) { if (item.MessageAction == (int)ActionType.SendMessage) { ShowMessageText(item); } else if (item.MessageAction == (int)ActionType.SendPIc) { ShowMessagePic(item, null); } //从缓存list中移除 ListMessageInfo.Remove(item); //设置消息已读 UpdateChatLog(item); } }
/// <summary> /// 接收聊天数据 /// </summary> /// <param name="info"></param> private void HandleSendMessage(MessageInfo info) { if (info == null) { return; } //接收到的消息缓存至ht内容中 ListMessageInfo.Add(info); //更新对应节点显示信息 UpdateChatingTreeMessage(info); //跳图标 TrayIconHandler.Instance.StartTrayBlink(); }
private void vTreeAlluser_NodeMouseDoubleClick(object sender, VirtualTreeEventArgs e) { if (CurrentUser == null) { return; } UserInfo userInfo = vTreeAlluser.SelectedNode.Tag as UserInfo; if (userInfo == null || userInfo.USER_ID == CurrentUser.USER_ID) { return; } //保存当前聊天内容到本地 SaveChatContentToLocal(); ToUserInfo = userInfo; //加载本地已有聊天记录 LoadChatContent(); if (!htChating.ContainsKey(ToUserInfo.USER_ID)) { return; } //获取节点用户发送过来的未读消息 List <MessageInfo> lstInfo = new List <MessageInfo>(); lstInfo = ListMessageInfo.FindAll(i => i.MessageFrom.USER_ID == ToUserInfo.USER_ID); foreach (MessageInfo item in lstInfo) { if (item.MessageAction == (int)ActionType.SendMessage) { ShowMessageText(item); } else if (item.MessageAction == (int)ActionType.SendPIc) { ShowMessagePic(item, null); } //从缓存list中移除 ListMessageInfo.Remove(item); //设置消息已读 UpdateChatLog(item); } }
/// <summary> /// 窗体激活时显示将正在聊天的新内容展示到显示框中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChatClient_Activated(object sender, EventArgs e) { if (ToUserInfo == null) { return; } if (vTreeChating.SelectedNode == null) { return; } //获取节点用户发送过来的未读消息 List <MessageInfo> lstInfo = new List <MessageInfo>(); lstInfo = ListMessageInfo.FindAll(i => i.MessageFrom.USER_ID == ToUserInfo.USER_ID); if (lstInfo == null || lstInfo.Count == 0) { return; } foreach (MessageInfo item in lstInfo) { if (item.MessageAction == (int)ActionType.SendMessage) { ShowMessageText(item); } else if (item.MessageAction == (int)ActionType.SendPIc) { ShowMessagePic(item, null); } //从缓存list中移除 ListMessageInfo.Remove(item); //设置消息已读 UpdateChatLog(item); } //更新当前聊天对象信息 vTreeChating.SuspendLayout(); VirtualNode node = vTreeChating.SelectedNode; node.SubItems[0].Text = ""; vTreeChating.PerformLayout(); }
/// <summary> /// 更新消息对应的用户节点显示信息 /// </summary> /// <param name="info"></param> private void UpdateChatingTreeMessage(MessageInfo info) { if (info == null) { return; } //找到消息对应节点 VirtualNode userNode = null; UserInfo userInfo = null; foreach (VirtualNode item in vTreeChating.Nodes) { userInfo = item.Tag as UserInfo; if (userInfo != null && userInfo.USER_ID == info.MessageFrom.USER_ID) { userNode = item; break; } } if (userNode == null)//添加离线节点 { userInfo = SystemCache.LstUserInfo.Find(i => i.USER_ID == info.MessageFrom.USER_ID); userNode = AddChatingTreeNode(userInfo, 0); } if (userNode == null || userInfo == null || string.IsNullOrEmpty(userInfo.USER_ID)) { return; } //获取发送用户的消息 List <MessageInfo> lstInfo = new List <MessageInfo>(); lstInfo = ListMessageInfo.FindAll(i => i.MessageFrom.USER_ID == userInfo.USER_ID); vTreeChating.SuspendLayout(); userNode.SubItems[0].Text = string.Format("{0}", lstInfo.Count == 0 ? "" : string.Format("{0}", lstInfo.Count)); vTreeChating.PerformLayout(); }