Exemplo n.º 1
0
        /// <summary>
        /// 异步初始化数据
        /// </summary>
        /// <returns></returns>
        private async Task InitAsync()
        {
            var list = await Task.Run(() =>
            {
                JObject init_result = wcs.WeChatInit();
                WeChatUser          = JObjectToUser(init_result["User"]);
                ImageDownloadService.Add(WeChatUser);
                return(init_result["ContactList"].Select(contact => JObjectToUser(contact)));
            });

            //将数据传输到聊天列表组件
            ChatListManager.AddChat(list.Distinct(new WeChatUserComparer()).ToArray());

            //开启微信状态通知
            await Task.Run(() =>
            {
                wcs.WxStatusNotify(WeChatUser.UserName);
            });

            //加载通讯录
            await LoadAllContact();

            //加载群组成员
            await UpdateInitGroupMember(list.Where(p => p.IsRoomContact()).Select(p => p.UserName).Distinct().ToArray());

            StartWeChatSyncTask();
        }
Exemplo n.º 2
0
 private void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
 }
Exemplo n.º 3
0
        private void ChatWithContact(WeChatUser contact)
        {
            ChatListManager.ChatWithContact(contact);

            //导航到聊天列表
            NavigateCommand.Execute("ChatListView");
            ChatNavChecked = true;
        }
Exemplo n.º 4
0
        /// <summary>
        /// 查询好友和群聊
        /// </summary>
        /// <param name="searchText"></param>
        /// <returns></returns>
        private List <WeChatUser> Search(string searchText)
        {
            List <WeChatUser> list = new List <WeChatUser>();

            list.AddRange(ContactListManager.SearchContact(searchText));
            list.AddRange(ChatListManager.SearchRoomChat(searchText));
            return(list);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 加载初始化的群组聊天成员(这里很奇怪,微信初始化接口返回的群组成员信息不全,没有昵称)
        /// </summary>
        /// <returns></returns>
        private async Task UpdateInitGroupMember(string[] userNames)
        {
            var list = await Task.Run(() =>
            {
                JObject contact_result = wcs.WxBatchGetContact(userNames);
                return(contact_result["ContactList"].Select(contact => JObjectToUser(contact)).ToArray());
            });

            //将初始化的群组聊天成员传输到聊天列表组件
            ChatListManager.UpdateInitGroupMember(list);
        }
Exemplo n.º 6
0
 /// <summary>
 /// 启动新线程加载更多聊天列表
 /// </summary>
 /// <param name="userNames"></param>
 private void LoadMoreChats(string[] userNames)
 {
     Task.Run(() =>
     {
         for (int i = 0; i < Math.Ceiling(userNames.Length / 50.0); i++)  //每次最多查询50条数据
         {
             JObject contact_result = wcs.WxBatchGetContact(userNames.Skip(i * 50).Take(50).ToArray());
             var chatList           = contact_result["ContactList"].Select(contact => JObjectToUser(contact)).ToArray();
             Application.Current.Dispatcher.BeginInvoke(new Action(() =>
             {
                 ChatListManager.AddChat(chatList);
             }));
         }
     });
 }
Exemplo n.º 7
0
        /// <summary>
        /// 发送文本消息
        /// </summary>
        /// <param name="msg"></param>
        private void SendTextMsg(string msg)
        {
            var selectedChat = ChatContentManager.SelectedChat;

            WeChatMessage weChatMessage = new WeChatMessage
            {
                Content        = msg,
                CreateDateTime = DateTime.Now,
                FromUserName   = WeChatUser.UserName,
                MsgType        = 1,
                ToUserName     = selectedChat.UserName,
                ShortTime      = DateTime.Now.ToString("HH:mm"),
                IsReceive      = false
            };

            ChatListManager.SyncMessage(weChatMessage);

            wcs.SendMsg(EmojiManager.ReplaceEmojiCode(msg), WeChatUser.UserName, selectedChat.UserName, 1);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 开启微信同步任务
        /// </summary>
        private void StartWeChatSyncTask()
        {
            Task.Run(() =>
            {
                while (true)
                {
                    //同步检查
                    string sync_flag = wcs.WeChatSyncCheck();
                    if (sync_flag == null)
                    {
                        Thread.Sleep(100);
                        continue;
                    }
                    //这里应该判断sync_flag中Selector的值
                    else
                    {
                        JObject sync_result = wcs.WeChatSync();//进行同步
                        if (sync_result != null)
                        {
                            if (sync_result["DelContactCount"] != null && sync_result["DelContactCount"].ToString() != "0")  //删除联系人
                            {
                                var delContacts = sync_result["DelContactList"].Select(p => p.Value <string>("UserName")).ToArray();
                                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                                {
                                    //同时删除聊天和联系人
                                    ChatListManager.DelChat(delContacts);
                                    ContactListManager.DelContact(delContacts);
                                }));
                            }
                            if (sync_result["ModContactCount"] != null && sync_result["ModContactCount"].ToString() != "0")  //添加或者修改联系人
                            {
                                var modContactList = sync_result["ModContactList"].Select(p => JObjectToUser(p)).ToArray();
                                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                                {
                                    ChatListManager.ModChat(modContactList);
                                    ContactListManager.ModContact(modContactList);
                                }));
                            }
                            if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")  //新消息
                            {
                                var messageList = sync_result["AddMsgList"].Select(p => JObjectToMessage(p));

                                var loadMore = messageList.FirstOrDefault(p => p.IsLoadMoreChats);
                                if (loadMore != null)
                                {
                                    //加载更多聊天列表
                                    string[] userNames = loadMore.StatusNotifyUserName.Split(',').Where(p => !ChatListManager.Contains(p)).ToArray();
                                    LoadMoreChats(userNames);
                                }
                                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                                {
                                    //同步消息
                                    ChatListManager.SyncMessage(messageList.ToArray());
                                }));
                            }
                        }
                    }
                    Thread.Sleep(100);
                }
            });
        }