private void OnInitGot(HttpWebRequest req, HttpWebResponse res) { StreamReader sr = new StreamReader(res.GetResponseStream()); string str_ret = sr.ReadToEnd(); sr.Close(); m_wx_init = (WXInit)Common.DecodeJson(str_ret, typeof(WXInit)); if (0 != m_wx_init.m_base_response.m_ret) { MessageBox.Show("获取初始化信息发生错误:" + m_wx_init.m_base_response.m_ret); Logout(false); return; } m_wx_msg = new Dictionary <string, List <WXMsg> >(); m_wx_names = new Dictionary <string, string>(); m_wx_contacts = new Dictionary <string, WXContact>(); m_wx_sync_check_key = m_wx_init.m_sync_key; EnableStatusNotify(); GetContacts(0); niTray.Text = m_wx_init.m_user.m_nick_name + "(" + m_wx_init.m_user.m_uin + ") 在线"; this.Text = niTray.Text; AddLog("已成功初始化微信!"); }
private string GetSyncKey(WXSyncKey sync_key) { StringBuilder sb_sync_key = new StringBuilder(); for (int i = 0; i < sync_key.m_count; i++) { sb_sync_key.Append(sync_key.m_list[i].m_key); sb_sync_key.Append("_"); sb_sync_key.Append(sync_key.m_list[i].m_val); sb_sync_key.Append("|"); } return(sb_sync_key.ToString().TrimEnd("|".ToCharArray())); }
private void OnSync(HttpWebRequest req, HttpWebResponse res) { SyncCheck(); StreamReader sr = new StreamReader(res.GetResponseStream()); string str_ret = sr.ReadToEnd(); sr.Close(); WXSync wxs = (WXSync)Common.DecodeJson(str_ret, typeof(WXSync)); if (null == wxs || 0 != wxs.m_base_response.m_ret) { MessageBox.Show("同步消息发生错误:" + wxs.m_base_response.m_ret); Logout(false); return; } AddLog("已成功获取消息!"); m_wx_sync_key = wxs.m_sync_key; m_wx_sync_check_key = wxs.m_sync_check_key; // 解析信息内容 lvwContacts.BeginUpdate(); if (wxs.m_add_msg_count > 0) { for (int i = 0; i < wxs.m_add_msg_count; i++) { //string to_user = wxs.m_add_msg_list[i].m_to_user_name; string from_user = wxs.m_add_msg_list[i].m_from_user_name; if (!lvwContacts.Items.ContainsKey(from_user)) { continue; } if (from_user == m_wx_init.m_user.m_user_name) // 自己在其他设备发给他人的信息,同步过来 { } if (!m_wx_msg.ContainsKey(from_user)) { m_wx_msg.Add(from_user, new List <WXMsg>()); } WXMsg msg = wxs.m_add_msg_list[i]; m_wx_msg[from_user].Add(msg); string now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss "); string from_nick_name = m_wx_names[from_user]; string show_title = "", content = ""; if (from_user.StartsWith("@@")) // 群组信息 { Regex re_content = new Regex(@"(?<=(@(?:[0-9a-f]{32}|[0-9a-f]{64})):\<br/\>)(.+)", RegexOptions.IgnoreCase | RegexOptions.Singleline); GroupCollection cc = re_content.Match(msg.m_content).Groups; if (3 != cc.Count) { continue; } string member_user_name = cc[1].Value; string member_name = m_wx_names[member_user_name]; content = cc[2].Value; show_title = member_name + "(" + from_nick_name + ")" + " 发来"; } else { content = msg.m_content; show_title = from_nick_name + " 发来"; } switch (msg.m_msg_type) { case 1: // 文本信息 rtbContent.Select(rtbContent.TextLength, 1); rtbContent.AppendText(now + show_title + "文本信息:\r\n"); rtbContent.AppendText(content + "\r\n\r\n"); break; case 3: // 图像 GetImage(msg.m_msg_id); rtbContent.Select(rtbContent.TextLength, 1); rtbContent.AppendText(now + show_title + "图片信息:\r\n"); System.Diagnostics.Debug.Print(now + show_title); break; case 34: // 语音 GetVoice(msg.m_msg_id); TimeSpan ts_voice = new TimeSpan(msg.m_voice_length * TimeSpan.TicksPerMillisecond); string str_voice = "播放语音(" + msg.m_msg_id + ")"; rtbContent.Select(rtbContent.TextLength, 1); rtbContent.AppendText(now + show_title + "语音信息:\r\n"); rtbContent.AppendText("语音长度:" + ts_voice.ToString(@"mm\:ss\.fff") + "\r\n"); rtbContent.AppendText(str_voice + "\r\n\r\n"); RichTextBoxLinkCreater.CreateLink(rtbContent, rtbContent.TextLength - str_voice.Length - 2, str_voice.Length); break; case 43: // 视频 GetVideo(msg.m_msg_id); TimeSpan ts_video = new TimeSpan(msg.m_play_length * TimeSpan.TicksPerSecond); string str_video = "播放视频(" + msg.m_msg_id + ")"; rtbContent.Select(rtbContent.TextLength, 1); rtbContent.AppendText(now + show_title + "视频信息:\r\n"); rtbContent.AppendText("视频长度:" + ts_video.ToString(@"hh\:mm\:ss") + "\r\n"); rtbContent.AppendText(str_video + "\r\n\r\n"); RichTextBoxLinkCreater.CreateLink(rtbContent, rtbContent.TextLength - str_video.Length - 2, str_video.Length); break; case 49: // 超链接 string url = WebUtility.UrlDecode(msg.m_url); rtbContent.Select(rtbContent.TextLength, 1); rtbContent.AppendText(now + show_title + "超链接:\r\n"); rtbContent.AppendText("标题:" + WebUtility.UrlDecode(msg.m_encry_file_name) + "\r\n"); rtbContent.AppendText("地址:" + url + "\r\n\r\n"); RichTextBoxLinkCreater.CreateLink(rtbContent, rtbContent.TextLength - url.Length - 2, url.Length); break; case 10000: // 红包!!! if ("收到红包,请在手机上查看" == msg.m_content) { niTray.BalloonTipIcon = ToolTipIcon.Info; niTray.BalloonTipTitle = "¥¥¥收到红包¥¥¥"; niTray.BalloonTipText = show_title + "红包!!!"; niTray.ShowBalloonTip(10000); } rtbContent.Select(rtbContent.TextLength, 1); rtbContent.AppendText(now + show_title + "系统信息:\r\n"); rtbContent.AppendText(content + "\r\n\r\n"); break; default: rtbContent.Select(rtbContent.TextLength, 1); rtbContent.AppendText(now + show_title + "未知信息:\r\n"); rtbContent.AppendText(Common.EncodeJson(msg) + "\r\n\r\n"); break; } m_sound.Play(); rtbContent.Select(rtbContent.TextLength, 0); } } if (wxs.m_mod_contact_count > 0) { GetContacts(0); } lvwContacts.EndUpdate(); }