示例#1
0
        // private WXService wxs { get; set; }
        /// <summary>
        /// 微信登录初始化及同步操作
        /// </summary>
        public void DoMainLogic(bool isReload = false)
        {
            WXService wxs = new WXService();

            try
            {
                JObject init_result = wxs.WxInit();  //初始化
                mainForm.contact_all.Clear();
                if (init_result != null)
                {
                    InitCurrentUserData(init_result);
                }
                JObject contact_result = wxs.GetContact(); //通讯录
                if (contact_result != null)
                {
                    LoadMyContact(contact_result);
                }
            }
            catch (Exception)
            {
            }
            if (!isReload)
            {
                WxSyncCheck(wxs);
            }
        }
示例#2
0
        private void CreateAllUser()
        {
            JObject contactResult = Service.GetContact(); //通讯录

            if (contactResult != null)
            {
                foreach (JObject contact in contactResult["MemberList"])  //完整好友名单
                {
                    WXUser user = new WXUser();
                    user.UserName        = contact["UserName"].ToString();
                    user.City            = contact["City"].ToString();
                    user.HeadImgUrl      = contact["HeadImgUrl"].ToString();
                    user.NickName        = contact["NickName"].ToString();
                    user.Province        = contact["Province"].ToString();
                    user.PYQuanPin       = contact["PYQuanPin"].ToString();
                    user.RemarkName      = contact["RemarkName"].ToString();
                    user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                    user.Sex             = contact["Sex"].ToString();
                    user.Signature       = contact["Signature"].ToString();

                    AllFriend.Add(user);
                    if (user.UserName.StartsWith(@"@@"))
                    {
                        AllGroup.Add(user);
                    }
                }
            }
        }
示例#3
0
 /// <summary>
 /// 重新加载联系人
 /// </summary>
 public void ReloadContact(Action callback = null)
 {
     mainForm.ThreadHandle(() =>
     {
         WXService wxs          = new WXService();
         JObject contact_result = wxs.GetContact(); //通讯录
         if (contact_result != null)
         {
             LoadMyContact(contact_result, callback);
         }
     });
 }
示例#4
0
        private void frmGroup_Load(object sender, EventArgs e)
        {
            WXService wxs = new WXService();
            // JObject init_result = wxs.WxInit();//初始化
            JObject contact_result = wxs.GetContact();     //通讯录

            if (contact_result != null)
            {
                this.listView1.BeginUpdate();                             //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
                foreach (JObject contact in contact_result["MemberList"]) //完整好友名单
                {
                    WXUser user = new WXUser();
                    if (contact["UserName"].ToString().IndexOf("@@") >= 0)
                    {
                        ListViewItem lvi = new ListViewItem();
                        lvi.Text = contact["NickName"].ToString();
                        lvi.SubItems.Add(contact["UserName"].ToString());
                        this.listView1.Items.Add(lvi);
                    }
                }
                this.listView1.EndUpdate();     //结束数据处理,UI界面一次性绘制。
            }
        }
示例#5
0
        private void DoMainLogic()
        {
            //_lblWait.BringToFront();
            //MessageBox.Show("---1");
            ((Action)(delegate()
            {
                //MessageBox.Show("---2");
                LogUtil.log_call(this, "初始化微信信息");
                WXService wxs = new WXService();
                JObject init_result = wxs.WxInit();  //初始化


                List <object> contact_all = new List <object>();
                if (init_result != null)
                {
                    _me = new WXUser();
                    _me.UserName = init_result["User"]["UserName"].ToString();
                    try
                    {
                        _me.City = "";
                        _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString();
                        _me.NickName = init_result["User"]["NickName"].ToString();
                        _me.Province = "";
                        _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString();
                        _me.RemarkName = init_result["User"]["RemarkName"].ToString();
                        _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString();
                        _me.Sex = init_result["User"]["Sex"].ToString();
                        _me.Signature = init_result["User"]["Signature"].ToString();
                    }
                    catch (Exception)
                    {
                    }

                    try
                    {
                        foreach (JObject contact in init_result["ContactList"])  //部分好友名单
                        {
                            try
                            {
                                WXUser user = new WXUser();
                                user.UserName = contact["UserName"].ToString();
                                user.City = contact["City"].ToString();
                                user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                                user.NickName = contact["NickName"].ToString();
                                user.Province = contact["Province"].ToString();
                                user.PYQuanPin = contact["PYQuanPin"].ToString();
                                user.RemarkName = contact["RemarkName"].ToString();
                                user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                                user.Sex = contact["Sex"].ToString();
                                user.Signature = contact["Signature"].ToString();

                                _contact_latest.Add(user);
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                    catch (Exception)
                    {
                    }
                }

                JObject contact_result = wxs.GetContact(); //通讯录
                try
                {
                    if (contact_result != null)
                    {
                        foreach (JObject contact in contact_result["MemberList"])  //完整好友名单
                        {
                            try
                            {
                                WXUser user = new WXUser();
                                user.UserName = contact["UserName"].ToString();
                                user.City = contact["City"].ToString();
                                user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                                user.NickName = contact["NickName"].ToString();
                                user.Province = contact["Province"].ToString();
                                user.PYQuanPin = contact["PYQuanPin"].ToString();
                                user.RemarkName = contact["RemarkName"].ToString();
                                user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                                user.Sex = contact["Sex"].ToString();
                                user.Signature = contact["Signature"].ToString();

                                contact_all.Add(user);
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                }
                catch (Exception)
                {
                }
                //IOrderedEnumerable<object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin);

                //WXUser wx; string start_char;
                //foreach (object o in list_all)
                //{
                //    wx = o as WXUser;
                //    start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1);
                //    if (!_contact_all.Contains(start_char.ToUpper()))
                //    {
                //        _contact_all.Add(start_char.ToUpper());
                //    }
                //    _contact_all.Add(o);
                //}

                //MessageBox.Show("---:" + contact_all.Count.ToString());

                try
                {
                    //this.appBean.weixin_list = weixinList;
                    this.dataGridView_weixin_qun_list.Rows.Clear();
                    //this.load_qq_qun_shunxu();
                    int num = 0;
                    foreach (WXUser arrayList4 in contact_all)
                    {
                        try
                        {
                            if (arrayList4.UserName.Contains("@@"))
                            {
                                //MessageBox.Show(arrayList4.UserName.ToString());
                                DataGridViewRow dataGridViewRow = new DataGridViewRow();
                                this.dataGridView_weixin_qun_list.Rows.Add(dataGridViewRow);
                                //this.dataGridView_weixin_qun_list.Rows[num].HeaderCell.Value = string.Concat(num + 1, "");
                                this.dataGridView_weixin_qun_list[0, num].Value = true;
                                this.dataGridView_weixin_qun_list[1, num].Value = arrayList4.NickName;
                                this.dataGridView_weixin_qun_list[1, num].Tag = arrayList4;
                                num++;
                            }
                            else
                            {
                                //DataGridViewRow dataGridViewRow = new DataGridViewRow();
                                //this.dataGridView_weixin_qun_list.Rows.Add(dataGridViewRow);
                                ////this.dataGridView_weixin_qun_list.Rows[num].HeaderCell.Value = string.Concat(num + 1, "");
                                //this.dataGridView_weixin_qun_list[0, num].Value = true;
                                //this.dataGridView_weixin_qun_list[1, num].Value = arrayList4.NickName;
                                //this.dataGridView_weixin_qun_list[1, num].Tag = arrayList4;
                                //num++;
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.ToString());
                    //LogUtil.log_call(this, string.Concat("[loadWeixinList]出错:", exception.ToString()));
                }

                //this.BeginInvoke((Action)(delegate()  //等待结束
                //{
                //    _lblWait.Visible = false;

                //    wChatList1.Items.AddRange(_contact_latest.ToArray());  //近期联系人
                //    wFriendsList1.Items.AddRange(_contact_all.ToArray());  //通讯录
                //    wpersonalinfo.FriendUser = _me;
                //}));


                string sync_flag = "";
                JObject sync_result;
                while (true)
                {
                    sync_flag = wxs.WxSyncCheck();  //同步检查
                    if (sync_flag == null)
                    {
                        continue;
                    }
                    //这里应该判断 sync_flag中selector的值
                    else //有消息
                    {
                        sync_result = wxs.WxSync();  //进行同步
                        if (sync_result != null)
                        {
                            if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")
                            {
                                foreach (JObject m in sync_result["AddMsgList"])
                                {
                                    string from = m["FromUserName"].ToString();
                                    string to = m["ToUserName"].ToString();
                                    string content = m["Content"].ToString();
                                    string type = m["MsgType"].ToString();

                                    WXMsg msg = new WXMsg();
                                    msg.From = from;
                                    msg.Msg = type == "1" ? content : "请在其他设备上查看消息";  //只接受文本消息
                                    msg.Readed = false;
                                    msg.Time = DateTime.Now;
                                    msg.To = to;
                                    msg.Type = int.Parse(type);

                                    if (msg.Type == 51)  //屏蔽一些系统数据
                                    {
                                        continue;
                                    }
                                    this.BeginInvoke((Action) delegate()
                                    {
                                        WXUser user; bool exist_latest_contact = false;
                                        //foreach (Object u in wChatList1.Items)
                                        //{
                                        //    user = u as WXUser;
                                        //    if (user != null)
                                        //    {
                                        //        if (user.UserName == msg.From && msg.To == _me.UserName)  //接收别人消息
                                        //        {
                                        //            wChatList1.Items.Remove(user);
                                        //            wChatList1.Items.Insert(0, user);
                                        //            exist_latest_contact = true;
                                        //            user.ReceiveMsg(msg);
                                        //            break;
                                        //        }
                                        //        else if (user.UserName == msg.To && msg.From == _me.UserName)  //同步自己在其他设备上发送的消息
                                        //        {
                                        //            wChatList1.Items.Remove(user);
                                        //            wChatList1.Items.Insert(0, user);
                                        //            exist_latest_contact = true;
                                        //            user.SendMsg(msg, true);
                                        //            break;
                                        //        }
                                        //    }
                                        //}
                                        //if (!exist_latest_contact)
                                        //{
                                        //    foreach (object o in wFriendsList1.Items)
                                        //    {
                                        //        WXUser friend = o as WXUser;
                                        //        if (friend != null && friend.UserName == msg.From && msg.To == _me.UserName)
                                        //        {
                                        //            wChatList1.Items.Insert(0, friend);
                                        //            friend.ReceiveMsg(msg);
                                        //            break;
                                        //        }
                                        //        if (friend != null && friend.UserName == msg.To && msg.From == _me.UserName)
                                        //        {
                                        //            wChatList1.Items.Insert(0, friend);
                                        //            friend.SendMsg(msg, true);
                                        //            break;
                                        //        }
                                        //    }
                                        //}
                                        //wChatList1.Invalidate();
                                    });
                                }
                            }
                        }
                    }
                    System.Threading.Thread.Sleep(10);
                }
            })).BeginInvoke(null, null);
        }
示例#6
0
        /// <summary>
        ///
        /// </summary>
        private void DoMainLogic()
        {
            _lblWait.BringToFront();
            ((Action)(delegate()
            {
                WXService wxs = new WXService();
                JObject init_result = wxs.WxInit();  //初始化

                List <object> contact_all = new List <object>();
                if (init_result != null)
                {
                    _me = new WXUser();
                    _me.UserName = init_result["User"]["UserName"].ToString();
                    _me.City = "";
                    _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString();
                    _me.NickName = init_result["User"]["NickName"].ToString();
                    _me.Province = "";
                    _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString();
                    _me.RemarkName = init_result["User"]["RemarkName"].ToString();
                    _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString();
                    _me.Sex = init_result["User"]["Sex"].ToString();
                    _me.Signature = init_result["User"]["Signature"].ToString();

                    foreach (JObject contact in init_result["ContactList"])  //部分好友名单
                    {
                        WXUser user = new WXUser();
                        user.UserName = contact["UserName"].ToString();
                        user.City = contact["City"].ToString();
                        user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                        user.NickName = contact["NickName"].ToString();
                        user.Province = contact["Province"].ToString();
                        user.PYQuanPin = contact["PYQuanPin"].ToString();
                        user.RemarkName = contact["RemarkName"].ToString();
                        user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                        user.Sex = contact["Sex"].ToString();
                        user.Signature = contact["Signature"].ToString();

                        _contact_latest.Add(user);
                    }
                }

                JObject contact_result = wxs.GetContact(); //通讯录
                if (contact_result != null)
                {
                    foreach (JObject contact in contact_result["MemberList"])  //完整好友名单
                    {
                        WXUser user = new WXUser();
                        user.UserName = contact["UserName"].ToString();
                        user.City = contact["City"].ToString();
                        user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                        user.NickName = contact["NickName"].ToString();
                        user.Province = contact["Province"].ToString();
                        user.PYQuanPin = contact["PYQuanPin"].ToString();
                        user.RemarkName = contact["RemarkName"].ToString();
                        user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                        user.Sex = contact["Sex"].ToString();
                        user.Signature = contact["Signature"].ToString();

                        contact_all.Add(user);
                    }
                }
                IOrderedEnumerable <object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin);

                WXUser wx; string start_char;
                foreach (object o in list_all)
                {
                    wx = o as WXUser;
                    start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1);
                    if (!_contact_all.Contains(start_char.ToUpper()))
                    {
                        _contact_all.Add(start_char.ToUpper());
                    }
                    _contact_all.Add(o);
                }

                this.BeginInvoke((Action)(delegate()  //等待结束
                {
                    _lblWait.Visible = false;

                    wChatList1.Items.AddRange(_contact_latest.ToArray());  //近期联系人
                    wFriendsList1.Items.AddRange(_contact_all.ToArray());  //通讯录
                    wpersonalinfo.FriendUser = _me;
                }));


                string sync_flag = "";
                JObject sync_result;
                while (true)
                {
                    sync_flag = wxs.WxSyncCheck();  //同步检查
                    if (sync_flag == null)
                    {
                        continue;
                    }
                    //这里应该判断 sync_flag中selector的值
                    else //有消息
                    {
                        sync_result = wxs.WxSync();  //进行同步
                        if (sync_result != null)
                        {
                            if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")
                            {
                                foreach (JObject m in sync_result["AddMsgList"])
                                {
                                    string from = m["FromUserName"].ToString();
                                    string to = m["ToUserName"].ToString();
                                    string content = m["Content"].ToString();
                                    string type = m["MsgType"].ToString();

                                    WXMsg msg = new WXMsg();
                                    msg.From = from;
                                    msg.Msg = type == "1" ? content : "请在其他设备上查看消息1111";  //只接受文本消息
                                    msg.Readed = false;
                                    msg.Time = DateTime.Now;
                                    msg.To = to;
                                    msg.Type = int.Parse(type);


                                    if (msg.Type == 51)  //屏蔽一些系统数据
                                    {
                                        continue;
                                    }
                                    //消息处理
                                    if ((msg.To == "@@ab5c137f16c29a0140eacfa2034c287da5f33961fee17e3a2ac54c0eb7a30d14") || (msg.From == "@@ab5c137f16c29a0140eacfa2034c287da5f33961fee17e3a2ac54c0eb7a30d14"))
                                    {
                                        setLabel(msg.Msg);
                                    }


                                    this.BeginInvoke((Action) delegate()
                                    {
                                        WXUser user; bool exist_latest_contact = false;
                                        foreach (Object u in wChatList1.Items)
                                        {
                                            user = u as WXUser;
                                            if (user != null)
                                            {
                                                if (user.UserName == msg.From && msg.To == _me.UserName)  //接收别人消息

                                                {
                                                    //label1.Text = msg.;
                                                    wChatList1.Items.Remove(user);
                                                    wChatList1.Items.Insert(0, user);
                                                    exist_latest_contact = true;
                                                    user.ReceiveMsg(msg);
                                                    break;
                                                }
                                                else if (user.UserName == msg.To && msg.From == _me.UserName)  //同步自己在其他设备上发送的消息
                                                {
                                                    wChatList1.Items.Remove(user);
                                                    wChatList1.Items.Insert(0, user);
                                                    exist_latest_contact = true;
                                                    user.SendMsg(msg, true);
                                                    break;
                                                }
                                            }
                                        }
                                        if (!exist_latest_contact)
                                        {
                                            foreach (object o in wFriendsList1.Items)
                                            {
                                                WXUser friend = o as WXUser;
                                                if (friend != null && friend.UserName == msg.From && msg.To == _me.UserName)
                                                {
                                                    wChatList1.Items.Insert(0, friend);
                                                    friend.ReceiveMsg(msg);
                                                    break;
                                                }
                                                if (friend != null && friend.UserName == msg.To && msg.From == _me.UserName)
                                                {
                                                    wChatList1.Items.Insert(0, friend);
                                                    friend.SendMsg(msg, true);
                                                    break;
                                                }
                                            }
                                        }
                                        wChatList1.Invalidate();
                                    });
                                }
                            }
                        }
                    }
                    System.Threading.Thread.Sleep(10);
                }
            })).BeginInvoke(null, null);
        }
示例#7
0
        /// <summary>
        /// 初始化联系人
        /// </summary>
        public void InitContact(List <WXUser> partUsers)
        {
            var groupNames     = new List <string>();
            var contact_result = wx.GetContact();
            var _allUser       = new Dictionary <string, WXUser>();

            if (partUsers != null)
            {
                foreach (var u in partUsers)
                {
                    if (!_allUser.ContainsKey(u.UserName))
                    {
                        _allUser.Add(u.UserName, u);
                    }
                }
            }
            if (contact_result != null)
            {
                foreach (JObject contact in contact_result["MemberList"])  //完整好友名单
                {
                    WXUser user = new WXUser();
                    user = Convert(contact);
                    if (!_allUser.ContainsKey(user.UserName))
                    {
                        _allUser.Add(user.UserName, user);
                    }
                }
            }

            foreach (var u in _allUser)
            {
                if (u.Key.Contains("@@"))
                {
                    groupNames.Add(u.Key);
                }
            }

            //获取所有群内联系人信息
            var bat_contact_result = wx.BatGetContact(groupNames);

            if (bat_contact_result != null)
            {
                var dic = new Dictionary <string, WxGroup>();
                foreach (JObject bat_contact in bat_contact_result["ContactList"])
                {
                    //群号
                    var roomID = bat_contact["EncryChatRoomId"].ToString();
                    //群用户名
                    var userName = bat_contact["UserName"].ToString();
                    var nickName = bat_contact["NickName"].ToString();

                    var userNameArray = new List <GroupWxUser>();
                    foreach (JObject c in bat_contact["MemberList"])
                    {
                        var m_username    = c["UserName"].ToString();
                        var m_displayName = c["DisplayName"].ToString();
                        var m_nickName    = c["NickName"].ToString();
                        var m_attrStatus  = c["AttrStatus"].ToString();
                        if (string.IsNullOrEmpty(m_displayName))
                        {
                            m_displayName = m_nickName;
                        }
                        userNameArray.Add(new GroupWxUser()
                        {
                            UserName    = m_username,
                            NickName    = m_nickName,
                            DisplayName = m_displayName,
                            AttrStatus  = m_attrStatus
                        });
                    }
                    WxGroup g = new WxGroup()
                    {
                        UserName        = userName,
                        MemberUserNames = userNameArray,
                        NickName        = nickName,
                        RoomID          = roomID
                    };
                    dic.Add(userName, g);
                }
                WxSerializable s_g = new WxSerializable(this._uin, EnumContainer.SerializType.curr_group_user);
                s_g.Serializable(dic);  //序列化 所有群内成员
            }
            WxSerializable s = new WxSerializable(this._uin, EnumContainer.SerializType.contact);

            s.Serializable(_allUser);  //序列化 所有联系人
        }
示例#8
0
        // private WXService wxs { get; set; }
        /// <summary>
        /// 微信登录初始化及同步操作
        /// </summary>
        public void DoMainLogic()
        {
            WXService wxs         = new WXService();
            JObject   init_result = wxs.WxInit(); //初始化

            mainForm.contact_all.Clear();
            if (init_result != null)
            {
                InitCurrentUserData(init_result);
            }
            else
            {
                return;
            }
            JObject contact_result = wxs.GetContact(); //通讯录

            if (contact_result != null)
            {
                LoadMyContact(contact_result);
            }


            new Thread(() =>
            {
                Thread.Sleep(30000);
                wxs = new WXService();
            })
            {
                IsBackground = true
            }.Start();

            string  sync_flag = "";
            JObject sync_result;

            while (true)
            {
                if (isCloseWinForm)
                {
                    break;
                }

                sync_flag = wxs.WxSyncCheck();  //同步检查
                if (sync_flag == null)
                {
                    continue;
                }
                //这里应该判断 sync_flag中selector的值
                else //有消息
                {
                    sync_result = wxs.WxSync();  //进行同步

                    //在此次进行判断自动回复或踢人操作
                    if (sync_result != null)
                    {
                        try
                        {
                            //判断是否掉线
                            if (sync_result["BaseResponse"]["Ret"].ToObject <int>() > 0)
                            {
                                isLoginCheck   = false;
                                isCloseWinForm = true;
                                mainForm.listenForm.wxMessageData.Clear();
                                mainForm.listenForm.ListenWeChatData.Clear();
                                mainForm.listenForm.HileWinEdit();
                                mainForm.CloseMyContact();
                                mainForm.AlertTip("微信掉线,请重新授权登录");
                                break;
                            }
                            if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")
                            {
                                foreach (JObject m in sync_result["AddMsgList"])
                                {
                                    SyncMsgHandle(wxs, m);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            log.Error(ex);
                            throw;
                        }
                    }
                }
                Thread.Sleep(100);
            }
        }
示例#9
0
        /// <summary>
        ///
        /// </summary>
        private void DoMainLogic()
        {
            _lblWait.BringToFront();
            ((Action)(delegate()
            {
                WXService wxs = new WXService();
                JObject init_result = wxs.WxInit();  //初始化
                contact_all = new List <object>();
                contact_group = new List <object>();
                contact_friends = new List <object>();

                if (init_result != null)
                {
                    _me = new WXUser();
                    _me.UserName = init_result["User"]["UserName"].ToString();
                    _me.City = "";
                    _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString();
                    _me.NickName = init_result["User"]["NickName"].ToString();
                    _me.Province = "";
                    _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString();
                    _me.RemarkName = init_result["User"]["RemarkName"].ToString();
                    _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString();
                    _me.Sex = init_result["User"]["Sex"].ToString();
                    _me.Signature = init_result["User"]["Signature"].ToString();
                }

                JObject contact_result = wxs.GetContact(); //通讯录
                if (contact_result != null)
                {
                    foreach (JObject contact in contact_result["MemberList"])  //完整好友名单
                    {
                        if (contact["UserName"].ToString().Contains("@") && !contact["UserName"].ToString().Contains("@@") && contact["VerifyFlag"].ToString() == "0")
                        {
                            WXUser user = new WXUser();
                            user.UserName = contact["UserName"].ToString();
                            user.City = contact["City"].ToString();
                            user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                            user.NickName = contact["NickName"].ToString();
                            user.Province = contact["Province"].ToString();
                            user.PYQuanPin = contact["PYQuanPin"].ToString();
                            user.RemarkName = contact["RemarkName"].ToString();
                            user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                            user.Sex = contact["Sex"].ToString();
                            user.Signature = contact["Signature"].ToString();
                            user.IsOwner = Convert.ToInt32(contact["IsOwner"].ToString());
                            contact_all.Add(user);
                        }
                        if (contact["UserName"].ToString().Contains("@@"))
                        {
                            WXUser user = new WXUser();
                            user.UserName = contact["UserName"].ToString();
                            user.City = contact["City"].ToString();
                            user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                            user.NickName = contact["NickName"].ToString();
                            user.Province = contact["Province"].ToString();
                            user.PYQuanPin = contact["PYQuanPin"].ToString();
                            user.RemarkName = contact["RemarkName"].ToString();
                            user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                            user.Sex = contact["Sex"].ToString();
                            user.Signature = contact["Signature"].ToString();
                            user.IsOwner = Convert.ToInt32(contact["IsOwner"].ToString());
                            contact_group.Add(user);
                        }
                    }
                }
                IOrderedEnumerable <object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin);

                WXUser wx; string start_char;
                foreach (object o in list_all)
                {
                    wx = o as WXUser;
                    start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1);
                    if (!_contact_all.Contains(start_char.ToUpper()))
                    {
                        _contact_all.Add(start_char.ToUpper());
                    }
                    _contact_all.Add(o);
                }

                this.BeginInvoke((Action)(delegate()   //等待结束
                {
                    _lblWait.Visible = false;
                    wFriendsList1.Items.AddRange(_contact_all.ToArray());  //通讯录
                }));


                string sync_flag = "";
                JObject sync_result;
                while (true)
                {
                    sync_flag = wxs.WxSyncCheck();  //同步检查
                    if (sync_flag == null)
                    {
                        continue;
                    }
                    //这里应该判断 sync_flag中selector的值
                    else //有消息
                    {
                        sync_result = wxs.WxSync();  //进行同步
                        if (sync_result != null)
                        {
                            if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")
                            {
                                foreach (JObject m in sync_result["AddMsgList"])
                                {
                                    string from = m["FromUserName"].ToString();
                                    string to = m["ToUserName"].ToString();
                                    string content = m["Content"].ToString();
                                    string type = m["MsgType"].ToString();
                                    if (type == "10000")
                                    {
                                        if (content.Contains("开启了朋友验证") || content.Contains("消息已发出,但被对方拒收"))
                                        {
                                            WXUser user = SendResult.Find(item =>
                                            {
                                                return(item.UserName == from);
                                            });
                                            if (user != null)
                                            {
                                                this.BeginInvoke((Action)(delegate()   //等待结束
                                                {
                                                    wFriendsList2.Items.Add(user);
                                                }));
                                            }
                                        }
                                    }

                                    if (_me.UserName == to && from.Contains("@@"))
                                    {
                                        switch (type)
                                        {
                                        case "3":
                                            //获取发送者标识id;
                                            var msgSendUser = content.Split(':')[0];
                                            wxs.DeleteChatroom(from, msgSendUser);
                                            break;

                                        default:
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    System.Threading.Thread.Sleep(10);
                }
            })).BeginInvoke(null, null);
        }
示例#10
0
        /// <summary>
        /// 网页微信登录
        /// </summary>
        /// <param name="scanCallback">用户扫码回调,会传入用户头像base64字符串</param>
        /// <param name="LoginCallback">用户登录成功回调</param>
        /// <returns>登录扫一扫二维码Base64字符串</returns>
        public async Task <string> Login(Action <string> ScanCallback, Action LoginCallback, Action <MsgModel> GetMsgCallback, Action <string> LoginErrorCallback)
        {
            if (State == LoginState.Logined)
            {
                throw new Exception("已登录之后,不允许重新登录");
            }
            State = LoginState.Unlogin;
            var result = await loginService.GetQRBase64Async();

            var next = Task.Factory.StartNew(async() =>
            {
                try
                {
                    string login_result = null;
                    while (true)  //循环判断手机扫面二维码结果
                    {
                        login_result = loginService.LoginCheck();
                        if (!login_result.ToLower().StartsWith("http")) //已扫描 未登录
                        {
                            State          = LoginState.Scaned;
                            var scanNotice = Task.Factory.StartNew(() =>
                            {
                                ScanCallback(login_result);
                            });
                        }
                        else if (!string.IsNullOrEmpty(login_result))  //已完成登录
                        {
                            //访问登录跳转URL
                            await loginService.GetSidUidAsync(login_result);
                            wxService = new WXService(baseService, loginService.SKey, loginService.Pass_Ticket);
                            State     = LoginState.Logined;

                            var init_result = wxService.WxInit();  //登录初始化
                            #region 初始化个人信息和最近聊天列表
                            if (init_result != null)
                            {
                                SelfUser        = init_result.User;
                                LastConnectUser = init_result.ContactList;
                            }
                            else
                            {
                                init_result = wxService.WxInit();  //登录初始化
                                if (init_result != null)
                                {
                                    SelfUser        = init_result.User;
                                    LastConnectUser = init_result.ContactList;
                                }
                                else
                                {
                                    LoginErrorCallback("初始化登录用户信息失败,请重新登录");
                                    break;
                                }
                            }
                            #endregion
                            #region 初始化通讯录
                            var contact_result = wxService.GetContact(); //通讯录
                            if (contact_result != null)
                            {
                                AllConnectUser = contact_result.MemberList.OrderBy(c => c.ShowPinYin).ToList();
                            }
                            else
                            {
                                contact_result = wxService.GetContact(); //通讯录
                                if (contact_result != null)
                                {
                                    AllConnectUser = contact_result.MemberList.OrderBy(c => c.ShowPinYin).ToList();
                                }
                                else
                                {
                                    LoginErrorCallback("初始化通讯录失败,请重新登录");
                                    break;
                                }
                            }
                            #endregion

                            var loginNotice = Task.Factory.StartNew(() =>
                            {
                                LoginCallback();
                            });
                            #region 循环拉取微信消息
                            string sync_flag = "";
                            WxSyncResponse sync_result;
                            while (true)
                            {
                                sync_flag = await wxService.WxSyncCheck();  //同步检查
                                if (sync_flag == null)
                                {
                                    continue;
                                }
                                //这里应该判断 sync_flag中selector的值
                                else //有消息
                                {
                                    sync_result = await wxService.WxSync();  //进行同步
                                    if (sync_result != null)
                                    {
                                        if (sync_result.AddMsgCount > 0)
                                        {
                                            foreach (var m in sync_result.AddMsgList)
                                            {
                                                GetMsgCallback(new MsgModel()
                                                {
                                                    FromUserName = m.FromUserName,
                                                    ToUserName   = m.ToUserName,
                                                    Content      = m.Content,
                                                    MsgType      = m.MsgType,
                                                });
                                            }
                                        }
                                    }
                                }
                                System.Threading.Thread.Sleep(10);
                            }
                            #endregion
                        }
                    }
                }
                catch (Exception ex) {
                    LoginErrorCallback(ex.Message);
                }
            });

            return(result);
        }
示例#11
0
        /// <summary>
        ///
        /// </summary>
        private void DoMainLogic()
        {
            _lblWait.BringToFront();
            ((Action)(delegate()
            {
                Dictionary <string, string> ss = new Dictionary <string, string>();
                //先判断下键值是否存在要不卡死头像只能显示一个用户的
                //if (!ss.ContainsKey("1"))
                //{
                //    ss.Add("1", "1");
                //}
                string sid = LoginCore.GetPassTicket(Uin).WxSid;
                WXService wxs = new WXService();
                wxs.Uin = Uin;
                wxs.Sid = sid;
                wxs.robotID = robotID;
                JObject init_result = wxs.WxInit();  //初始化
                List <object> contact_all = new List <object>();
                if (init_result != null)
                {
                    _me = new WXUser();
                    _me.uin = wxs.Uin;
                    _me.UserName = init_result["User"]["UserName"].ToString();
                    _me.City = "";
                    _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString();
                    _me.NickName = init_result["User"]["NickName"].ToString();
                    _me.Province = "";
                    _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString();
                    _me.RemarkName = init_result["User"]["RemarkName"].ToString();
                    _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString();
                    _me.Sex = init_result["User"]["Sex"].ToString();
                    _me.Signature = init_result["User"]["Signature"].ToString();
                    foreach (JObject contact in init_result["ContactList"])  //部分好友名单
                    {
                        WXUser user = new WXUser();
                        user.uin = wxs.Uin;
                        user.UserName = contact["UserName"].ToString();
                        user.City = contact["City"].ToString();
                        user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                        user.NickName = contact["NickName"].ToString();
                        user.Province = contact["Province"].ToString();
                        user.PYQuanPin = contact["PYQuanPin"].ToString();
                        user.RemarkName = contact["RemarkName"].ToString();
                        user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                        user.Sex = contact["Sex"].ToString();
                        user.Signature = contact["Signature"].ToString();
                        _contact_latest.Add(user);
                    }
                }
                JObject contact_result = wxs.GetContact(); //通讯录
                if (contact_result != null)
                {
                    foreach (JObject contact in contact_result["MemberList"])  //完整好友名单
                    {
                        WXUser user = new WXUser();
                        user.uin = wxs.Uin;
                        user.UserName = contact["UserName"].ToString();
                        user.City = contact["City"].ToString();
                        user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                        user.NickName = contact["NickName"].ToString();
                        user.Province = contact["Province"].ToString();
                        user.PYQuanPin = contact["PYQuanPin"].ToString();
                        user.RemarkName = contact["RemarkName"].ToString();
                        user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                        user.Sex = contact["Sex"].ToString();
                        user.Signature = contact["Signature"].ToString();
                        contact_all.Add(user);
                        //((Action)delegate()
                        //{
                        //    //写入所有好友信息
                        //    var b = WxOperateLogDal.AddchartLog(wxs.Uin, contact["UserName"].ToString(), contact["City"].ToString(), contact["HeadImgUrl"].ToString(), contact["NickName"].ToString(), contact["Province"].ToString(), contact["PYQuanPin"].ToString(), contact["RemarkName"].ToString(), contact["RemarkPYQuanPin"].ToString(), contact["Sex"].ToString(), contact["Signature"].ToString());
                        //}).BeginInvoke(null, null);
                        wChatList1.Invalidate();
                    }
                }
                IOrderedEnumerable <object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin);

                WXUser wx; string start_char;
                foreach (object o in list_all)
                {
                    wx = o as WXUser;
                    start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1);
                    if (!_contact_all.Contains(start_char.ToUpper()))
                    {
                        _contact_all.Add(start_char.ToUpper());
                    }
                    _contact_all.Add(o);
                }

                this.BeginInvoke((Action)(delegate()   //等待结束
                {
                    _lblWait.Visible = false;
                    wChatList1.Items.AddRange(_contact_latest.ToArray());  //近期联系人
                    wFriendsList1.Items.AddRange(_contact_all.ToArray());  //通讯录
                    wpersonalinfo.FriendUser = _me;
                }));
                string sync_flag = "";
                JObject sync_result;
                while (true)
                {
                    sync_flag = wxs.WxSyncCheck();  //同步检查
                    if (sync_flag == null)
                    {
                        continue;
                    }
                    //这里应该判断 sync_flag中selector的值
                    else //有消息
                    {
                        sync_result = wxs.WxSync();  //进行同步
                        if (sync_result != null)
                        {
                            if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")
                            {
                                foreach (JObject m in sync_result["AddMsgList"])
                                {
                                    string from = m["FromUserName"].ToString();
                                    string to = m["ToUserName"].ToString();
                                    string content = m["Content"].ToString();
                                    string MsgId = m["MsgId"].ToString();
                                    string type = m["MsgType"].ToString();//语音视频标识
                                    WXMsg msg = new WXMsg();
                                    msg.From = from;
                                    wxs.Uin = Uin;
                                    wxs.Sid = sid;
                                    msg.Sid = wxs.Sid;
                                    msg.Uin = wxs.Uin;
                                    msg.Msg = type == "1" ? content : "收到一个系统数据"; //只接受文本消息
                                    if (msg.Type == 1)                            //屏蔽一些系统数据
                                    {
                                        msg.Msg = content;
                                    }
                                    msg.Readed = false;
                                    msg.Time = DateTime.Now;
                                    msg.To = to;
                                    msg.Type = int.Parse(type);
                                    //if (msg.Type == 51)  //屏蔽一些系统数据
                                    //{
                                    //    msg.Msg = "收到一个系统数据";
                                    //}
                                    if (msg.Type == 10000)//进群退群消息
                                    {
                                        string s = sync_result.ToString();
                                    }
                                    if (msg.Type == 3)//图片
                                    {
                                        msg.Msg = content + "收到一个图片";
                                        string sFilePath = Environment.CurrentDirectory + "\\IMG";
                                        string sFileName = MsgId + ".jpg";
                                        sFileName = sFilePath + "\\" + sFileName; //文件的绝对路径
                                        HttpService.HttpDownloadFile(Constant._getmsgimg_url + MsgId, msg.Uin, sFileName);
                                    }

                                    if (msg.Type == 34)//语音
                                    {
                                        msg.Msg = "收到语音点击查看";
                                        //Button newButton = new Button();//创建一个名为newButton的新按钮
                                        //newButton.Width = 150;
                                        //newButton.Text = "NewButton";
                                        //newButton.BackColor = Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
                                        //newButton.Click += new EventHandler(textBox1_Click);
                                        string sFilePath = Environment.CurrentDirectory + "\\MP3";
                                        string sFileName = MsgId + ".wav";
                                        sFileName = sFilePath + "\\" + sFileName; //文件的绝对路径
                                        HttpService.HttpDownloadFile(Constant._getmsgmp3_url + MsgId, msg.Uin, sFileName);
                                    }
                                    if (msg.Type == 43)//小视频
                                    {
                                        msg.Msg = "收到小视频" + "点击查看";
                                        string sFilePath = Environment.CurrentDirectory + "\\MP4";
                                        string sFileName = MsgId + ".MP4";
                                        sFileName = sFilePath + "\\" + sFileName;
                                        HttpService.HttpDownloadFile(Constant._getmsgvideo_url + MsgId, msg.Uin, sFileName);
                                    }
                                    if (msg.Type == 62)//视频
                                    {
                                        msg.Msg = content + "收到一个视频";
                                    }
                                    if (msg.Type == 10002)//消息撤回
                                    {
                                        msg.Msg = content + "对方撤回了消息";
                                    }
                                    if (msg.Type == 42)//好友名片
                                    {
                                        msg.Msg = content + "收到一个好友名片";
                                    }
                                    if (msg.Type == 47)//动态表情
                                    {
                                        msg.Msg = content + "收到一个动态表情";
                                    }
                                    if (msg.Type == 48)//位置消息
                                    {
                                        msg.Msg = content + "收到一个位置消息";
                                    }
                                    if (msg.Type == 49)//分享链接
                                    {
                                        msg.Msg = content + "收到一个分享链接";
                                    }
                                    BeginInvoke((Action) delegate()
                                    {
                                        WXUser user; bool exist_latest_contact = false;
                                        foreach (object u in wChatList1.Items)
                                        {
                                            user = u as WXUser;

                                            if (user != null)
                                            {
                                                if (user.UserName == msg.From && msg.To == _me.UserName)  //接收别人消息
                                                {
                                                    wChatList1.Items.Remove(user);
                                                    wChatList1.Items.Insert(0, user);
                                                    exist_latest_contact = true;
                                                    user.ReceiveMsg(msg);
                                                    break;
                                                }
                                                else if (user.UserName == msg.To && msg.From == _me.UserName)  //同步自己在其他设备上发送的消息
                                                {
                                                    wChatList1.Items.Remove(user);
                                                    wChatList1.Items.Insert(0, user);
                                                    exist_latest_contact = true;
                                                    user.SendMsg(msg, true);
                                                    break;
                                                }
                                            }
                                        }
                                        if (!exist_latest_contact)
                                        {
                                            foreach (object o in wFriendsList1.Items)
                                            {
                                                WXUser friend = o as WXUser;
                                                if (friend != null && friend.UserName == msg.From && msg.To == _me.UserName)
                                                {
                                                    wChatList1.Items.Insert(0, friend);
                                                    friend.ReceiveMsg(msg);
                                                    break;
                                                }
                                                if (friend != null && friend.UserName == msg.To && msg.From == _me.UserName)
                                                {
                                                    wChatList1.Items.Insert(0, friend);
                                                    friend.SendMsg(msg, true);
                                                    break;
                                                }
                                            }
                                        }
                                        Wx_AlertForm.ShowWay showWay = Wx_AlertForm.ShowWay.UpDown;
                                        string aftitle = _me.NickName + "收到来自" + _me.ShowName + "一条消息";
                                        string afContent = msg.Msg;
                                        int afShowInTime, afShowTime, afShowOutTime;
                                        int afWidth, afHeigth;
                                        int.TryParse("100", out afShowInTime);
                                        int.TryParse("8000", out afShowTime);
                                        int.TryParse("800", out afShowOutTime);
                                        int.TryParse("250", out afWidth);
                                        int.TryParse("120", out afHeigth);
                                        af = new Wx_AlertForm();
                                        af.Show(afContent, aftitle, showWay, afWidth, afHeigth, afShowInTime, afShowTime, afShowOutTime);
                                    });
                                }
                            }
                        }
                    }
                    //System.Threading.Thread.Sleep(800);
                    //#region 开始任务
                    ////var robotID = table.Rows[0]["RobotId"].ToString();
                    //WxTaskCore wt = new WxTaskCore(sid, Uin, robotID);
                    //wt.user = _me;
                    ////接收消息事件
                    ////wt.OnRevice += new WxTaskCore.Revice(wt_OnRevice);
                    ////接收修改联系人消息
                    //wt.OnModifyContact += new WxTaskCore.ModifyContact(wt_OnModifyContact);
                    ////通知发送信息
                    //wt.OnNotifySend += new WxTaskCore.NotifySend(wt_OnNotifySend);
                    //////每一个微信号,开启一个线程
                    ////ThreadStart start = new ThreadStart(wt.ReviceMsg);
                    ////new Thread(start).Start();
                    ////启动发送线程
                    //new Thread(new ThreadStart(wt.AutoSendMsg)).Start();
                    //#endregion
                }
            })).BeginInvoke(null, null);
        }
示例#12
0
        public void MainLogic()
        {
            WXService wxs         = new WXService();
            JObject   init_result = wxs.WxInit(); //初始化

            List <object> contact_all = new List <object>();

            if (init_result != null)
            {
                _me                 = new WXUser();
                _me.UserName        = init_result["User"]["UserName"].ToString();
                _me.City            = "";
                _me.HeadImgUrl      = init_result["User"]["HeadImgUrl"].ToString();
                _me.NickName        = init_result["User"]["NickName"].ToString();
                _me.Province        = "";
                _me.PYQuanPin       = init_result["User"]["PYQuanPin"].ToString();
                _me.RemarkName      = init_result["User"]["RemarkName"].ToString();
                _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString();
                _me.Sex             = init_result["User"]["Sex"].ToString();
                _me.Signature       = init_result["User"]["Signature"].ToString();

                foreach (JObject contact in init_result["ContactList"])  //部分好友名单
                {
                    WXUser user = new WXUser();
                    user.UserName        = contact["UserName"].ToString();
                    user.City            = contact["City"].ToString();
                    user.HeadImgUrl      = contact["HeadImgUrl"].ToString();
                    user.NickName        = contact["NickName"].ToString();
                    user.Province        = contact["Province"].ToString();
                    user.PYQuanPin       = contact["PYQuanPin"].ToString();
                    user.RemarkName      = contact["RemarkName"].ToString();
                    user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                    user.Sex             = contact["Sex"].ToString();
                    user.Signature       = contact["Signature"].ToString();

                    _contact_latest.Add(user);
                }
            }

            JObject contact_result = wxs.GetContact(); //通讯录

            if (contact_result != null)
            {
                foreach (JObject contact in contact_result["MemberList"])  //完整好友名单
                {
                    WXUser user = new WXUser();
                    user.UserName        = contact["UserName"].ToString();
                    user.City            = contact["City"].ToString();
                    user.HeadImgUrl      = contact["HeadImgUrl"].ToString();
                    user.NickName        = contact["NickName"].ToString();
                    user.Province        = contact["Province"].ToString();
                    user.PYQuanPin       = contact["PYQuanPin"].ToString();
                    user.RemarkName      = contact["RemarkName"].ToString();
                    user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                    user.Sex             = contact["Sex"].ToString();
                    user.Signature       = contact["Signature"].ToString();

                    contact_all.Add(user);
                }
            }
            IOrderedEnumerable <object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin);

            WXUser wx; string start_char;

            foreach (object o in list_all)
            {
                wx         = o as WXUser;
                start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1);
                if (!_contact_all.Contains(start_char.ToUpper()))
                {
                    _contact_all.Add(start_char.ToUpper());
                }
                _contact_all.Add(o);
            }


            JObject sync_flag;
            JObject sync_result;

            while (true)
            {
                sync_flag = wxs.WxSyncCheck();  //同步检查
                if (sync_flag == null)
                {
                    continue;
                }
                else if (sync_flag["retcode"].ToString() != "0")
                {
                    return;
                }
                //这里应该判断 sync_flag中selector的值
                else //有消息
                {
                    sync_result = wxs.WxSync();  //进行同步
                    if (sync_result != null)
                    {
                        if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")
                        {
                            Console.WriteLine(System.DateTime.Now.ToString() + sync_result["AddMsgCount"].ToString() + " Msg(s) Received");
                            foreach (JObject m in sync_result["AddMsgList"])
                            {
                                LiveClient.PrintData(m.ToString());
                                LiveClient.PrintData(",\n");
                            }
                        }
                    }
                    else
                    {
                        return;
                    }
                }
                System.Threading.Thread.Sleep(10);
            }
        }
示例#13
0
        /// <summary>
        ///
        /// </summary>
        private void DoMainLogic()
        {
            _lblWait.BringToFront();
            ((Action)(delegate()
            {
                JObject init_result = wxs.WxInit();  //初始化
                #region 初始化个人信息和最近聊天列表
                List <object> contact_all = new List <object>();
                if (init_result != null)
                {
                    _me = new WXUser();
                    _me.UserName = init_result["User"]["UserName"].ToString();
                    _me.City = "";
                    _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString();
                    _me.NickName = init_result["User"]["NickName"].ToString();
                    _me.Province = "";
                    _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString();
                    _me.RemarkName = init_result["User"]["RemarkName"].ToString();
                    _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString();
                    _me.Sex = init_result["User"]["Sex"].ToString();
                    _me.Signature = init_result["User"]["Signature"].ToString();
                    _me.Alias = init_result["Alias"]["Alias"].ToString();

                    foreach (JObject contact in init_result["ContactList"])  //部分好友名单
                    {
                        WXUser user = new WXUser();
                        user.UserName = contact["UserName"].ToString();
                        user.City = contact["City"].ToString();
                        user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                        user.NickName = contact["NickName"].ToString();
                        user.Province = contact["Province"].ToString();
                        user.PYQuanPin = contact["PYQuanPin"].ToString();
                        user.RemarkName = contact["RemarkName"].ToString();
                        user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                        user.Sex = contact["Sex"].ToString();
                        user.Signature = contact["Signature"].ToString();

                        _contact_latest.Add(user);
                    }
                }
                #endregion
                #region 初始化通讯录
                JObject contact_result = wxs.GetContact(); //通讯录
                if (contact_result != null)
                {
                    foreach (JObject contact in contact_result["MemberList"])  //完整好友名单
                    {
                        WXUser user = new WXUser();
                        user.UserName = contact["UserName"].ToString();
                        user.City = contact["City"].ToString();
                        user.HeadImgUrl = contact["HeadImgUrl"].ToString();
                        user.NickName = contact["NickName"].ToString();
                        user.Province = contact["Province"].ToString();
                        user.PYQuanPin = contact["PYQuanPin"].ToString();
                        user.RemarkName = contact["RemarkName"].ToString();
                        user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString();
                        user.Sex = contact["Sex"].ToString();
                        user.Signature = contact["Signature"].ToString();
                        user.VerifyFlag = contact["VerifyFlag"].ToString();
                        user.Alias = contact["Alias"].ToString();

                        contact_all.Add(user);
                    }
                }
                #endregion
                #region 将个人信息、聊天信息、通讯录信息填充到控件中
                IOrderedEnumerable <object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin);

                WXUser wx; string start_char;
                foreach (object o in list_all)
                {
                    wx = o as WXUser;
                    start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1);
                    if (!_contact_all.Contains(start_char.ToUpper()))
                    {
                        _contact_all.Add(start_char.ToUpper());
                    }
                    _contact_all.Add(o);
                }

                this.BeginInvoke((Action)(delegate()  //等待结束
                {
                    _lblWait.Visible = false;

                    wChatList1.Items.AddRange(_contact_latest.ToArray());  //近期联系人
                    wFriendsList1.Items.AddRange(_contact_all.ToArray());  //通讯录
                    wpersonalinfo.FriendUser = _me;
                }));
                #endregion
                #region 检查通讯录好友
                int.TryParse(System.Configuration.ConfigurationManager.AppSettings["GroupWaitTime"], out groupwaittime);
                var SpecialUsers = new string[] { "newsapp", "fmessage", "filehelper", "weibo", "qqmail", "tmessage", "qmessage", "qqsync", "floatbottle", "lbsapp", "shakeapp", "medianote", "qqfriend", "readerapp", "blogapp", "facebookapp", "masssendapp",
                                                  "meishiapp", "feedsapp", "voip", "blogappweixin", "weixin", "brandsessionholder", "weixinreminder", "wxid_novlwrv3lqwv11", "gh_22b87fa7cb3c", "officialaccounts", "notification_messages", "wxitil", "userexperience_alarm" };
                var persons = contact_all.Select(c => c as WXUser).Where(c => c.VerifyFlag == "0" &&
                                                                         !SpecialUsers.Contains(c.UserName) && !c.UserName.Contains("@@") && c.UserName != _me.UserName).ToList();
                int groupcount = 2, index = 0;
                string chatroomname = "";
                List <string> deletedlist = new List <string>(), blockedlist = new List <string>();
                Dictionary <string, string> addresult = new Dictionary <string, string>(), deleteresult = new Dictionary <string, string>();
                JObject temp;
                while (index < persons.Count)
                {
                    var groupperson = persons.Where((c, i) => i >= index && i < (index + groupcount)).Select(c => c.UserName);

                    if (chatroomname == "")
                    {
                        temp = wxs.CreateRoom(groupperson.ToList());
                        chatroomname = temp["ChatRoomName"].ToString();
                    }
                    else
                    {
                        temp = wxs.AddMember(chatroomname, groupperson.ToList());
                    }
                    foreach (JObject obj in temp["MemberList"])
                    {
                        if (obj["MemberStatus"].ToString() == "4")
                        {
                            deletedlist.Add(obj["UserName"].ToString());
                        }
                        else if (obj["MemberStatus"].ToString() == "3")
                        {
                            blockedlist.Add(obj["UserName"].ToString());
                        }
                    }
                    System.Threading.Thread.Sleep(groupwaittime);
                    var delres = wxs.DeleteMember(chatroomname, groupperson.ToList());
                    foreach (var p in groupperson)
                    {
                        addresult[p] = temp["BaseResponse"]["Ret"].ToString();
                        deleteresult[p] = delres["BaseResponse"]["Ret"].ToString();
                    }
                    index += groupcount;
                    System.Threading.Thread.Sleep(groupwaittime);
                }
                var deletednames = persons.Where(c => deletedlist.Contains(c.UserName))
                                   .Select(c => string.IsNullOrEmpty(c.RemarkName) ? c.NickName : c.RemarkName);
                var blockednames = persons.Where(c => blockedlist.Contains(c.UserName))
                                   .Select(c => string.IsNullOrEmpty(c.RemarkName) ? c.NickName : c.RemarkName);
                Helper.XmlHelper xh = new Helper.XmlHelper();
                xh.Root.SetAttribute("UserName", _me.UserName);
                xh.Root.SetAttribute("NickName", _me.NickName);
                xh.Root.SetAttribute("Alias", _me.Alias);
                xh.Root.SetAttribute("friendcount", persons.Count.ToString());
                xh.Root.SetAttribute("deletedcount", deletednames.Count().ToString());
                xh.Root.SetAttribute("blockedcount", blockednames.Count().ToString());
                xh.Root.SetAttribute("deletednames", string.Join(",", deletednames));
                xh.Root.SetAttribute("blockednames", string.Join(",", blockednames));
                xh.Root.SetAttribute("checktimesplit", groupwaittime.ToString());
                foreach (var p in persons)
                {
                    XmlElement ele = xh.Doc.CreateElement("Friend");
                    ele.SetAttribute("UserName", p.UserName);
                    ele.SetAttribute("NickName", p.NickName);
                    ele.SetAttribute("Alias", p.Alias);
                    ele.SetAttribute("Province", p.Province);
                    ele.SetAttribute("Sex", p.Sex);
                    ele.SetAttribute("HeadImgUrl", p.HeadImgUrl);
                    ele.SetAttribute("Province", p.Province);
                    ele.SetAttribute("City", p.City);
                    ele.SetAttribute("AddStatus", addresult[p.UserName]);
                    ele.SetAttribute("DeleteStatus", deleteresult[p.UserName]);
                    ele.SetAttribute("FriendStatus", deletedlist.Contains(p.UserName) ? "4" : blockednames.Contains(p.UserName) ? "3" : "0");
                    xh.AddEle(ele);
                }
                xh.Save(string.Format("{0}\\{1}{2}.xml", Environment.GetFolderPath(Environment.SpecialFolder.Desktop).TrimEnd('\\'), _me.UserName, DateTime.Now.ToString("yyyyMMddhhmmss")));
                //wxs.SendMsg(string.Format("删除名单有:{0} 拉黑名单有:{1}", string.Join(",", deletednames), string.Join(",", blockednames)), _me.UserName, chatroomname, 1);
                //MessageBox.Show(string.Format("删除名单有:{0} 拉黑名单有:{1}", string.Join(",", deletednames), string.Join(",", blockednames)));
                #endregion
                #region 保持和微信持续通讯
                System.Threading.Thread t1 = new System.Threading.Thread(new System.Threading.ThreadStart(cycletalk));
                t1.Start();
                #endregion
                #region 循环拉取微信消息
                //string sync_flag = "";
                //JObject sync_result;
                //while (true)
                //{
                //    sync_flag = wxs.WxSyncCheck();  //同步检查
                //    if (sync_flag == null)
                //    {
                //        continue;
                //    }
                //    //这里应该判断 sync_flag中selector的值
                //    else //有消息
                //    {
                //        sync_result = wxs.WxSync();  //进行同步
                //        if (sync_result != null)
                //        {
                //            if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0")
                //            {
                //                foreach (JObject m in sync_result["AddMsgList"])
                //                {
                //                    string from = m["FromUserName"].ToString();
                //                    string to = m["ToUserName"].ToString();
                //                    string content = m["Content"].ToString();
                //                    string type = m["MsgType"].ToString();

                //                    WXMsg msg = new WXMsg();
                //                    msg.From = from;
                //                    msg.Msg = type == "1" ? content : "请在其他设备上查看消息";  //只接受文本消息
                //                    msg.Readed = false;
                //                    msg.Time = DateTime.Now;
                //                    msg.To = to;
                //                    msg.Type = int.Parse(type);

                //                    if (msg.Type == 51)  //屏蔽一些系统数据
                //                    {
                //                        continue;
                //                    }
                //                    this.BeginInvoke((Action)delegate()
                //                    {
                //                        WXUser user; bool exist_latest_contact = false;
                //                        foreach (Object u in wChatList1.Items)
                //                        {
                //                            user = u as WXUser;
                //                            if (user != null)
                //                            {
                //                                if (user.UserName == msg.From && msg.To == _me.UserName)  //接收别人消息
                //                                {
                //                                    wChatList1.Items.Remove(user);
                //                                    wChatList1.Items.Insert(0, user);
                //                                    exist_latest_contact = true;
                //                                    user.ReceiveMsg(msg);
                //                                    break;
                //                                }
                //                                else if (user.UserName == msg.To && msg.From == _me.UserName)  //同步自己在其他设备上发送的消息
                //                                {
                //                                    wChatList1.Items.Remove(user);
                //                                    wChatList1.Items.Insert(0, user);
                //                                    exist_latest_contact = true;
                //                                    user.SendMsg(msg,true);
                //                                    break;
                //                                }
                //                            }
                //                        }
                //                        if (!exist_latest_contact)
                //                        {
                //                            foreach (object o in wFriendsList1.Items)
                //                            {
                //                                WXUser friend = o as WXUser;
                //                                if (friend != null && friend.UserName == msg.From && msg.To == _me.UserName)
                //                                {
                //                                    wChatList1.Items.Insert(0, friend);
                //                                    friend.ReceiveMsg(msg);
                //                                    break;
                //                                }
                //                                if (friend != null && friend.UserName == msg.To && msg.From == _me.UserName)
                //                                {
                //                                    wChatList1.Items.Insert(0, friend);
                //                                    friend.SendMsg(msg,true);
                //                                    break;
                //                                }
                //                            }
                //                        }
                //                        wChatList1.Invalidate();
                //                    });
                //                }
                //            }
                //        }
                //    }
                //    System.Threading.Thread.Sleep(10);
                //}
                #endregion
            })).BeginInvoke(null, null);
        }