/// <summary> /// 接收消息 /// </summary> private void ReceiveMsg() { while (true) { // 定义一个缓冲区保存接收的消息 byte[] arrMsg = new byte[1024 * 1024 * 2]; // 保存数据长度 int length = -1; try { // 获取信息 length = socketClient.Receive(arrMsg); // 解析字符串 string msgReceive = Encoding.UTF8.GetString(arrMsg, 0, length); // 消息 if (arrMsg[0] == IS_LOGIN) { userData = (UserData)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(UserData)); Application.Current.Dispatcher.Invoke(new Action(delegate { LoginSuccess(); })); } else if (arrMsg[0] == IS_NOT_LOGIN) { //Application.Current.Dispatcher.Invoke(new Action(delegate { AddText(); })); this.hint.Dispatcher.Invoke(new Action(() => { this.hint.Content = "输入的账号或密码有错误!"; })); this.accountTextBox.Dispatcher.Invoke(new Action(() => { this.accountTextBox.Text = ""; })); this.passwordTextBox.Dispatcher.Invoke(new Action(() => { this.passwordTextBox.Password = ""; })); } else if (arrMsg[0] == IS_REGISTER) { UserData userdata = (UserData)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(UserData)); Application.Current.Dispatcher.Invoke(new Action(delegate { RegisterSuccess(userdata); })); } else if (arrMsg[0] == IS_NOT_REGISTER) { MessageBox.Show("注册失败!"); } else if (arrMsg[0] == IS_UPDATE) { userData = (UserData)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(UserData)); Application.Current.Dispatcher.Invoke(new Action(delegate { UpdateInfoSuccess(); })); } else if (arrMsg[0] == IS_NOT_UPDATE) { MessageBox.Show("更新信息失败!"); } else if (arrMsg[0] == IS_EDIT_FRIEND) { Application.Current.Dispatcher.Invoke(new Action(delegate { if (addFriendFlag && !subFriendFlag) MessageBox.Show("添加好友成功!"); else MessageBox.Show("删除好友成功!"); })); } else if (arrMsg[0] == IS_NOT_EDIT_FRIEND) { Application.Current.Dispatcher.Invoke(new Action(delegate { if (addFriendFlag && !subFriendFlag) MessageBox.Show("添加好友失败!"); else MessageBox.Show("删除好友失败!"); })); } else if (arrMsg[0] == UPDATE_FRIENDLIST) { FriendlistHandler friendlistHandler = (FriendlistHandler)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(FriendlistHandler)); if (friendlistHandler.type == ADD_ONLINE_FRIEND) { bool flag = true; foreach (onlineFriendType oFT in onlineFriendlist) { if (oFT.userData.userId != null && oFT.userData.userId.Equals(friendlistHandler.friendInfo.userId)) { flag = false; } } if (flag) { onlineFriendType newFriend = new onlineFriendType(friendlistHandler.friendInfo); try { Application.Current.Dispatcher.Invoke(new Action(delegate { // 新增一条在线好友信息 onlineFriendlist.Add(newFriend); // 为新上线的好友分配一个聊天框 List<Paragraph> paragraph = new List<Paragraph>(); dictParagraph.Add(newFriend.userData.userId, paragraph); IntPtr activeForm = GetActiveWindow(); // 先得到当前的活动窗体 Prompt test = new Prompt(newFriend.userData.userName+"("+newFriend.userData.userId+")"+" 已上线", 0); cnt = (cnt + 1) % 6; test.Show(); SetActiveWindow(activeForm); // 在把焦点还给之前的活动窗体 })); } catch (Exception e) { MessageBox.Show(e.Message); } } } else if (friendlistHandler.type == REMOVE_ONLINE_FRIEND) { foreach (onlineFriendType oFT in onlineFriendlist) { if (oFT.userData.userId != null && oFT.userData.userId.Equals(friendlistHandler.friendInfo.userId)) { try { Application.Current.Dispatcher.Invoke(new Action(delegate { onlineFriendType sendTo = (onlineFriendType)onlineFriendlistListBox.SelectedItem; if (sendTo.nameAndId.Equals("所有人") == false && sendTo.userData.userId.Equals(oFT.userData.userId)) { onlineFriendlistListBox.SelectedIndex = 0; chatRichTextBox.Document.Blocks.Clear(); foreach (Paragraph p in dictParagraph["AllUsers"]) chatRichTextBox.Document.Blocks.Add(p); } IntPtr activeForm = GetActiveWindow(); // 先得到当前的活动窗体 Prompt test = new Prompt(oFT.userData.userName + "(" + oFT.userData.userId + ")" + " 已下线", 0); cnt = (cnt + 1) % 6; test.Show(); SetActiveWindow(activeForm); // 在把焦点还给之前的活动窗体 // 将下线好友的聊天框移除 dictParagraph.Remove(oFT.userData.userId); // 将下线好友从在线好友列表中移除 onlineFriendlist.Remove(oFT); })); break; } catch (Exception e) { MessageBox.Show(e.Message); } } } } } else if (arrMsg[0] == MSG_TO_ALL) { MsgHandler msgHandler = (MsgHandler)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(MsgHandler)); Application.Current.Dispatcher.Invoke(new Action(delegate { ReceiveMsgForAll(msgHandler); })); } else if (arrMsg[0] == MSG_TO_INDIVIDULAL) { MsgHandler msgHandler = (MsgHandler)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(MsgHandler)); Application.Current.Dispatcher.Invoke(new Action(delegate { ReceiveMsgForIndividual(msgHandler); })); } else if (arrMsg[0] == FILE_TO_ALL) { FileHandler msgHandler = (FileHandler)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(FileHandler)); Application.Current.Dispatcher.Invoke(new Action(delegate { ReceiveFileForAll(msgHandler); })); } else if (arrMsg[0] == FILE_TO_INDIVIDUAL) { FileHandler msgHandler = (FileHandler)JsonConvert.DeserializeObject(msgReceive.Substring(1, msgReceive.Length - 1), typeof(FileHandler)); Application.Current.Dispatcher.Invoke(new Action(delegate { ReceiveFileForIndividual(msgHandler); })); } else { MessageBox.Show(Encoding.UTF8.GetString(arrMsg)); } } catch (SocketException se) { //MessageBox.Show("【错误】接收消息异常:" + se.Message); return; } catch (Exception e) { //MessageBox.Show("【错误】接收消息异常:" + e.Message); return; } } }
/// <summary> /// 代理更新登录画布显示的元素(跨线程更改) /// </summary> private void LoginSuccess() { mainWindow.Title = "U信 - " + userData.userName + "(" + userData.userId + ")"; InitFriendList(); addFriendFlag = subFriendFlag = false; userLoginCanvas.Visibility = Visibility.Hidden; userInfoCanvas.Visibility = Visibility.Visible; userId.Content = userData.userId; userName.Content = userData.userName; userGender.Content = userData.userGender; userAge.Content = userData.userAge; friendListName.Foreground = new SolidColorBrush(Colors.Black); inputTextBox.IsEnabled = true; fileTextBox.IsEnabled = true; chooseFile.IsEnabled = true; sendFile.IsEnabled = true; sendMsg.IsEnabled = true; addFriend.IsEnabled = true; subFriend.IsEnabled = true; chatRichTextBox.IsEnabled = true; onlineFriendlistListBox.IsEnabled = true; onlineFriendlistListBox.SelectedIndex = 0; chatFriendName.Content = "所有人"; chatRichTextBox.Document.Blocks.Clear(); foreach (Paragraph p in dictParagraph["AllUsers"]) chatRichTextBox.Document.Blocks.Add(p); onlineFriendType All = new onlineFriendType("所有人"); onlineFriendlist.Add(All); }