private void InitialMessanger() { ////Xmpp通知注册 Messenger.Default.Register <Messageobject>(this, CommonNotifications.XmppMsgRecived, msg => { ProcessNewMessage(msg); }); Messenger.Default.Register <Messageobject>(this, CommonNotifications.XmppMsgReceipt, (msg) => MsgReceipt(msg)); Messenger.Default.Register <VerifingFriend>(this, VerifyFriendLIstToken.DeleteVerifyItem, (item) => { App.Current.Dispatcher.Invoke(() => { VerifyUserList.Remove(item); }); }); }
/// <summary> /// Initial Data from Database and sth. else /// </summary> public UserVerifyListViewModel() { if (IsInDesignMode) { return; } var lists = new VerifingFriend().GetVerifingsList();//读取数据库 for (int i = 0; i < lists.Count; i++) { VerifyUserList.Add(lists[i]); } InitialMessanger(); }
public void OnUserNameChanged(string jid, string nickname) { if (jid.Length > 10) { return; } App.Current.Dispatcher.Invoke(() => { var item = VerifyUserList.FirstOrDefault(v => v.toUserId == jid); if (item != null) { item.toNickname = nickname;//更新昵称 } }); }
/// <summary> /// 验证用户信息(加好友) /// </summary> public BaseResponse VerifyUser(string userName, string ticket, WechatCookie wechatCookie, string cookieStr) { string url = string.Format(WechatUrl.VerifyUserUrl, WechatCommon.GetTicks(), wechatCookie.Pass_Ticket); VerifyUserParamter param = new VerifyUserParamter(); BaseRequest request = new BaseRequest(); request.DeviceID = DeviceID; request.Sid = wechatCookie.Wxsid; request.Skey = wechatCookie.Skey; request.Uin = wechatCookie.Wxuin; param.BaseRequest = request; param.Opcode = 3; param.SceneList = new int[] { 3 }; param.SceneListCount = 1; param.skey = wechatCookie.Skey; param.VerifyContent = ""; param.VerifyUserListSize = 1; IList <VerifyUserList> verifyUserList = new List <VerifyUserList>(); VerifyUserList verifyUser = new VerifyUserList(); verifyUser.Value = userName; verifyUser.VerifyUserTicket = ticket; verifyUserList.Add(verifyUser); param.VerifyUserList = verifyUserList; string postData = JsonConvert.SerializeObject(param); string html = HttpCommon.instance.PostHttp(url, postData, ContentType.json, cookieStr); AppLog.WriteInfo(string.Format("协议:{0},结果:{1}", "VerifyUser", html)); BaseResponse response = new BaseResponse(); try { if (!string.IsNullOrEmpty(html) && html != "操作超时") { response = JsonConvert.DeserializeObject <BaseResponse>(html); } } catch (Exception ex) { AppLog.WriteError(ex.Message); } return(response); }
/// <summary> /// 添加或更新集合 /// </summary> /// <param name="item">对应的项</param> public void AddOrUpdateToList(VerifingFriend item) { #region 修改集合 if (VerifyUserList.Count(v => v.toUserId == item.toUserId) > 0) { App.Current.Dispatcher.Invoke(() => { var verifyItem = VerifyUserList.FirstOrDefault(v => v.toUserId == item.toUserId); verifyItem.StatusTag = item.StatusTag; verifyItem.VerifyStatus = item.VerifyStatus; }); } else//添加未存在的消息 { App.Current.Dispatcher.Invoke(() => { VerifyUserList.Add(item); }); } #endregion }
/// <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(); //更新至数据库 } }
/// <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); } }