示例#1
0
        public async override void ExecuteCommand(EasyClientBase session, PackageInfo packageInfo)
        {
            AddFriendAcceptedPackage package = packageInfo as AddFriendAcceptedPackage;

            //接收加好友
            if (packageInfo.code == 0 || package.code == (int)Protocol.StatusCode.AlreadyBecomeFriend)
            {
                await DAL.DALContactListHelper.DeleteCurrentContactListPackage();

                if (package.data.userId == SDKClient.Instance.property.CurrentAccount.userID)
                {
                    await DAL.DALFriendApplyListHelper.UpdateItemIsChecked(package.data.friendId);

                    await DAL.DALUserInfoHelper.UpdateItemIsChecked(package.data.friendId);

                    await DAL.DALMessageHelper.SendMsgtoDB(package.id, package.from, package.to, "已经是好朋友,开始聊天吧", package.data.friendId, package.data.userId, SDKProperty.MessageType.addfriendaccepted, SDKProperty.MessageState.isRead);

                    await DAL.DALMessageHelper.UpdateMsgSessionTypeToCommon(package.data.friendId);

                    await DAL.DALStrangerOptionHelper.DeleteStranger(package.data.friendId);
                }
                else
                {
                    await DAL.DALFriendApplyListHelper.UpdateItemIsChecked(package.data.userId);

                    await DAL.DALUserInfoHelper.UpdateItemIsChecked(package.data.userId);

                    if (package.data.type != 1)//服务器代发的同意消息,不需要添加提示
                    {
                        await DAL.DALMessageHelper.SendMsgtoDB(package.id, package.from, package.to, "已经是好朋友,开始聊天吧", package.data.userId, package.data.userId, SDKProperty.MessageType.addfriendaccepted, SDKProperty.MessageState.isRead);
                    }
                    await DAL.DALMessageHelper.UpdateMsgSessionTypeToCommon(package.data.userId);

                    await DAL.DALStrangerOptionHelper.DeleteStranger(package.data.userId);
                }
            }
            else if (packageInfo.code == (int)Protocol.StatusCode.AuditFriendApplyError)
            {
                if (package.data.userId == SDKClient.Instance.property.CurrentAccount.userID)
                {
                    await DAL.DALFriendApplyListHelper.DeleteItem(package.data.friendId);
                }
                else
                {
                    await DAL.DALFriendApplyListHelper.DeleteItem(package.data.friendId);
                }
            }


            SDKClient.Instance.OnNewDataRecv(packageInfo);
            base.ExecuteCommand(session, packageInfo);
        }
示例#2
0
        /// <summary>
        /// 好友申请审核结果
        /// </summary>
        /// <param name="package">好友审核包</param>
        internal void PackageDeal(AddFriendAcceptedPackage package)
        {
            if (package == null || package.data == null)
            {
                return;
            }
            var tempApplyList = this.Items.ToList();

            if (package.code != 0)//包错误
            {
                //Application.Current.Dispatcher.Invoke(() =>
                //{
                if (package.code == 636)
                {
                    AppData.MainMV.TipMessage = "已经是好友关系了";
                    UserViewModel userVM = tempApplyList.FirstOrDefault(info => info.ID == package.data.friendId);
                    userVM.IsNeedAccepted = false;
                    var friendApply = SDKClient.SDKClient.Instance.property.FriendApplyList.FirstOrDefault(m => m.userId == package.data.friendId);
                    if (friendApply != null)
                    {
                        friendApply.IsChecked = true;
                    }
                }
                else if (package.code == 606)
                {
                    UserViewModel userVM = tempApplyList.FirstOrDefault(info => info.ID == package.data.friendId);
                    userVM.IsNeedAccepted     = false;
                    AppData.MainMV.TipMessage = package.error;
                    var friendApply = SDKClient.SDKClient.Instance.property.FriendApplyList.FirstOrDefault(m => m.userId == package.data.friendId);
                    if (friendApply != null)
                    {
                        friendApply.IsChecked = true;
                    }
                }
                else
                {
                    //_newFriendViewModel.UpdateApplyStatus(package.data.friendId, 0);
                    //IMUI.View.V2.MessageTip.ShowTip("添加好友失败!", IMUI.View.V2.TipTypes.Warning);

                    AppData.MainMV.TipMessage = "添加好友失败!";
                }
                //});
            }
            else
            {
                var friendApply = SDKClient.SDKClient.Instance.property.FriendApplyList.FirstOrDefault(m => m.userId == package.data.friendId);
                if (friendApply != null)
                {
                    friendApply.IsChecked = true;
                }
                //我同意好友申请后的回包处理
                if (package.data.userId == AppData.Current.LoginUser.ID)
                {
                    UserViewModel userVM = tempApplyList.FirstOrDefault(info => info.ID == package.data.friendId);

                    if (userVM != null && userVM.Model is UserModel user)
                    {
                        user.LinkDelType = 0;

                        if (user.LinkType == 1 || user.LinkType == 3)
                        {
                        }
                        else
                        {
                            var friendVM = AppData.MainMV.FriendListVM.AddNewFriend(package.data.friendId);
                            if (friendVM != null && friendVM.Model is UserModel userModel)
                            {
                                userModel.FriendSource    = friendApply.friendSource;
                                userModel.SourceGroup     = friendApply.sourceGroup;
                                userModel.SourceGroupName = friendApply.sourceGroupName;
                                if (userModel.FriendSource != 0)
                                {
                                    friendVM.IsExitFriendSource = true;
                                    switch (user.FriendSource)
                                    {
                                    case (int)ApplyFriendSource.FriendRecommend:
                                        friendVM.ApplyFriendContent = "好友推荐";
                                        break;

                                    case (int)ApplyFriendSource.Group:
                                        friendVM.ApplyFriendContent = "群聊:" + userModel.SourceGroupName;
                                        break;

                                    case (int)ApplyFriendSource.PhoneNumSearch:
                                        friendVM.ApplyFriendContent = "手机号搜索";
                                        break;

                                    case (int)ApplyFriendSource.Scan:
                                        friendVM.ApplyFriendContent = "扫一扫";
                                        break;

                                    case (int)ApplyFriendSource.ShopInvitation:
                                        friendVM.ApplyFriendContent = "开店邀请";
                                        break;

                                    case (int)ApplyFriendSource.FriendVerification:
                                        friendVM.ApplyFriendContent = "朋友验证";
                                        break;

                                    case (int)ApplyFriendSource.KeFangNum:
                                        friendVM.ApplyFriendContent = "可访号搜索";
                                        break;

                                    case (int)ApplyFriendSource.InvitationCard:
                                        break;

                                    case (int)ApplyFriendSource.Other:
                                        break;
                                    }
                                }
                                else
                                {
                                    friendVM.IsExitFriendSource = false;
                                }
                            }
                        }

                        var attention = AppData.MainMV.AttentionListVM.Items.ToList().FirstOrDefault(info => info.ID == package.data.friendId);
                        if (attention != null)
                        {
                            App.Current.Dispatcher.Invoke(() =>
                            {
                                AppData.MainMV.AttentionListVM.Items.Remove(attention);
                            });
                        }
                        //MessageType type;
                        //try
                        //{
                        //    type = (MessageType)Enum.Parse(typeof(MessageType), package.msgType.ToLower());
                        //}
                        //catch
                        //{
                        //    //Views.MessageBox.ShowBox("收到未知消息类型:" + m.msgType);
                        //    continue;
                        //}
                        var chatVM = AppData.MainMV.ChatListVM.GetChat(package.data.friendId);
                        if (chatVM.IsTemporaryChat)
                        {
                            MessageModel msg = new MessageModel()
                            {
                                MsgKey   = package.id,
                                SendTime = package.time.Value,
                                IsMine   = false,
                                MsgType  = MessageType.addfriendaccepted
                                           //Target = AppData.Current.LoginUser,
                            };
                            if (SDKClient.SDKClient.Instance.property.FriendApplyList != null && SDKClient.SDKClient.Instance.property.FriendApplyList.Count > 0)
                            {
                                var tempFriendApply = SDKClient.SDKClient.Instance.property.FriendApplyList.FirstOrDefault(a => a.userId == package.data.friendId);
                                if (tempFriendApply != null)
                                {
                                    if (string.IsNullOrEmpty(tempFriendApply.applyRemark))
                                    {
                                        msg.MsgType    = MessageType.notification;
                                        msg.TipMessage = msg.Content = ConstString.BecomeFriendsTip;
                                    }
                                    else
                                    {
                                        msg.MsgType    = MessageType.notification;
                                        msg.Sender     = AppData.Current.GetUserModel(package.data.friendId);
                                        msg.IsMine     = false;
                                        msg.Content    = ConstString.BecomeFriendsTip;
                                        msg.TipMessage = msg.Content;
                                    }
                                }
                            }
                            else
                            {
                                msg.MsgType    = MessageType.notification;
                                msg.TipMessage = msg.Content = ConstString.BecomeFriendsTip;
                            }
                            chatVM.AddMessage(msg);
                            //if (AppData.MainMV.ChatListVM.SelectedItem == chatVM)
                            //{
                            //    chatVM.AddMessageTipEx("已经成为好友,开始聊天吧", msg.SendTime, msg.MsgKey);
                            //    chatVM.AddMessageTipEx("以上为打招呼内容", msg.SendTime, msg.MsgKey);
                            //}


                            //chatVM.cha
                            //chatVM.AddMessageTipEx("已经成为好友,开始聊天吧");
                        }
                        else
                        {
                            user.IsNotDisturb = user.IsTopMost = false;
                            user.TopMostTime  = DateTime.MinValue;
                        }
                        userVM.IsNeedAccepted = false;
                        ThreadPool.QueueUserWorkItem(m =>
                        {
                            var obj = SDKClient.SDKClient.Instance.GetFriend(package.data.friendId);
                            if (obj?.data?.item != null && !string.IsNullOrEmpty(obj.data.item.partnerRemark))
                            {
                                user.DisplayName = obj.data.item.partnerRemark;
                            }
                        });
                        chatVM.IsTemporaryChat = false;
                        chatVM.CurrentChatType = ChatType.Normal;
                        chatVM.Acitve();
                        App.Current.Dispatcher.Invoke(() =>
                        {
                            AppData.MainMV.ChatListVM.DeleteStrangerItem(chatVM, false);
                        });
                        var target = tempApplyList.FirstOrDefault(info => info.ID == package.data.friendId);
                        target.IsRead = true;
                    }
                    else
                    {
                        if (package.data.friendId == AppData.Current.LoginUser.ID)
                        {
                            return;
                        }
                        var tempUser = AppData.Current.GetUserModel(package.data.friendId);
                        tempUser.LinkDelType = 0;

                        var friend = AppData.MainMV.FriendListVM.Items.ToList().FirstOrDefault(info => info.ID == package.data.friendId);

                        if (friend == null)
                        {
                            AppData.MainMV.FriendListVM.AddNewFriend(package.data.friendId);

                            friend = AppData.MainMV.FriendListVM.Items.ToList().FirstOrDefault(info => info.ID == package.data.friendId);
                            if (friend != null)
                            {
                                if (tempUser.LinkType == 1 || tempUser.LinkType == 3)
                                {
                                    friend.FirstChar = friend.GroupByChar = ' ';
                                    App.Current.Dispatcher.Invoke(() =>
                                    {
                                        AppData.MainMV.FriendListVM.UpdateGroupBy();
                                    });
                                }
                            }

                            SDKClient.SDKClient.Instance.GetUser(package.data.friendId);
                            var attention = AppData.MainMV.AttentionListVM.Items.ToList().FirstOrDefault(info => info.ID == package.data.friendId);
                            if (attention != null)
                            {
                                App.Current.Dispatcher.Invoke(() =>
                                {
                                    AppData.MainMV.AttentionListVM.Items.Remove(attention);
                                });
                            }

                            var chartVM = AppData.MainMV.ChatListVM.GetChat(package.data.friendId);
                            if (chartVM.IsTemporaryChat)
                            {
                                MessageModel msg = new MessageModel()
                                {
                                    MsgKey   = package.id,
                                    SendTime = package.time.Value,
                                    IsMine   = false,
                                    MsgType  = MessageType.addfriendaccepted
                                               //Target = AppData.Current.LoginUser,
                                };
                                if (SDKClient.SDKClient.Instance.property.FriendApplyList != null && SDKClient.SDKClient.Instance.property.FriendApplyList.Count > 0)
                                {
                                    var tempFriendApply = SDKClient.SDKClient.Instance.property.FriendApplyList.FirstOrDefault(a => a.userId == package.data.friendId);
                                    if (tempFriendApply != null)
                                    {
                                        if (string.IsNullOrEmpty(tempFriendApply.applyRemark))
                                        {
                                            msg.MsgType    = MessageType.notification;
                                            msg.TipMessage = msg.Content = ConstString.BecomeFriendsTip;
                                        }
                                        else
                                        {
                                            msg.Sender     = AppData.Current.GetUserModel(package.data.friendId);
                                            msg.IsMine     = false;
                                            msg.MsgType    = MessageType.notification;
                                            msg.Content    = ConstString.BecomeFriendsTip;
                                            msg.TipMessage = ConstString.BecomeFriendsTip;
                                        }
                                    }
                                }
                                else
                                {
                                    msg.MsgType    = MessageType.notification;
                                    msg.TipMessage = msg.Content = ConstString.BecomeFriendsTip;
                                }
                                chartVM.AddMessage(msg);
                                if (AppData.MainMV.ChatListVM.SelectedItem == chartVM)
                                {
                                    chartVM.AddMessageTipEx("以上为打招呼内容", msg.SendTime, msg.MsgKey);
                                    //chartVM.AddMessageTipEx("已经成为好友,开始聊天吧", msg.SendTime, msg.MsgKey);
                                }
                            }
                            else
                            {
                                var target = chartVM.Chat.Chat as UserModel;
                                target.IsNotDisturb = target.IsTopMost = false;
                                target.TopMostTime  = DateTime.MinValue;
                            }
                            chartVM.IsTemporaryChat = false;
                            chartVM.CurrentChatType = ChatType.Normal;
                            chartVM.Acitve();
                            App.Current.Dispatcher.Invoke(() =>
                            {
                                AppData.MainMV.ChatListVM.DeleteStrangerItem(chartVM, false);
                            });
                        }
                    }
                }
                else//我的申请被对方处理后,得到的回包处理
                {
                    UserModel user = AppData.Current.GetUserModel(package.data.userId);

                    if (user.LinkDelType == 2)
                    {
                        if (!IsUpdateRead)
                        {
                            var tempTask = Task.Run(() =>
                            {
                                IsUpdateRead = true;
                                SDKClient.SDKClient.Instance.GetContactsList();
                            }).ContinueWith(t =>
                            {
                                IsUpdateRead = false;
                            });
                        }
                    }
                    user.LinkDelType = 0;

                    var friend = AppData.MainMV.FriendListVM.Items.ToList().FirstOrDefault(info => info.ID == package.data.userId);

                    if (friend == null)
                    {
                        AppData.MainMV.FriendListVM.AddNewFriend(package.data.userId);

                        friend = AppData.MainMV.FriendListVM.Items.ToList().FirstOrDefault(info => info.ID == package.data.userId);
                        if (friend != null)
                        {
                            if (user.LinkType == 1 || user.LinkType == 3)
                            {
                                friend.FirstChar = friend.GroupByChar = ' ';
                                App.Current.Dispatcher.Invoke(() =>
                                {
                                    AppData.MainMV.FriendListVM.UpdateGroupBy();
                                });
                            }
                        }

                        //SDKClient.SDKClient.Instance.GetUser(package.data.userId);
                        ThreadPool.QueueUserWorkItem(m =>
                        {
                            var obj = SDKClient.SDKClient.Instance.GetFriend(package.data.userId);
                            if (user.HeadImgMD5 != obj.data.item.photo)
                            {
                                user.HeadImgMD5 = obj.data.item.photo;
                                IMClient.Helper.ImageHelper.GetFriendFace(obj.data.item.photo, (s) =>
                                {
                                    user.HeadImg = s;
                                });
                            }
                            if (obj?.data?.item != null && !string.IsNullOrEmpty(obj.data.item.partnerRemark))
                            {
                                if (string.IsNullOrEmpty(user.NickName) || user.DisplayName != obj.data.item.partnerRemark)
                                {
                                    user.DisplayName = obj.data.item.partnerRemark;
                                    user.NickName    = obj.data.item.partnerRemark;
                                    AppData.MainMV.FriendListVM.UpdateFriendSort(package.data.userId);
                                }
                            }
                        });
                        var attention = AppData.MainMV.AttentionListVM.Items.ToList().FirstOrDefault(info => info.ID == package.data.userId);
                        if (attention != null)
                        {
                            App.Current.Dispatcher.Invoke(() =>
                            {
                                AppData.MainMV.AttentionListVM.Items.Remove(attention);
                            });
                        }

                        var chartVM = AppData.MainMV.ChatListVM.GetChat(package.data.userId);
                        if (chartVM.IsTemporaryChat)
                        {
                            chartVM.AddMessageTipEx("已经成为好友,开始聊天吧");
                            //chartVM.IsTemporaryChat = false;
                        }
                        else
                        {
                            var target = chartVM.Chat.Chat as UserModel;
                            target.IsNotDisturb = target.IsTopMost = false;
                            target.TopMostTime  = DateTime.MinValue;
                        }
                        chartVM.IsTemporaryChat = false;
                        chartVM.CurrentChatType = ChatType.Normal;
                        chartVM.Acitve();
                        App.Current.Dispatcher.Invoke(() =>
                        {
                            AppData.MainMV.ChatListVM.DeleteStrangerItem(chartVM, false);
                        });
                    }
                    else
                    {
                        // 不为空实际上,我的好友里有对方,而对方删除了我后重新添加
                        //此种情况为服务器代发的审核包,不需要处理,即本地实际上不知道对方删除后又加了我

                        var chartVM = AppData.MainMV.ChatListVM.GetChat(package.data.userId);
                        if (chartVM.IsTemporaryChat)
                        {
                            chartVM.AddMessageTipEx("已经成为好友,开始聊天吧");
                        }
                        else
                        {
                            var target = chartVM.Chat.Chat as UserModel;
                            target.IsNotDisturb = target.IsTopMost = false;
                            target.TopMostTime  = DateTime.MinValue;
                        }
                        chartVM.IsTemporaryChat = false;

                        chartVM.CurrentChatType = ChatType.Normal;
                        App.Current.Dispatcher.Invoke(() =>
                        {
                            AppData.MainMV.ChatListVM.DeleteStrangerItem(chartVM, false);
                        });
                    }

                    var apply = tempApplyList.FirstOrDefault(info => info.ID == package.data.userId);

                    if (apply != null)
                    {
                        apply.IsNeedAccepted = false;
                        apply.IsRead         = true;
                        // this.UpdateApplyCount(true);
                    }
                }
            }

            UpdateApplyCount();
            App.Current.Dispatcher.Invoke(() =>
            {
                AppData.MainMV.ChatListVM.ResetSort();
            });
        }