private void WindowLoaded(object sender, RoutedEventArgs e) { userNameLabel.Content = _userName; _clientInstance = TcpHandler.GetInstance(); //获取当前登录用户的图标 var imagePath = "pack://application:,,,/images/" + _userName + ".jpg"; var iamgeUri = new Uri(imagePath); try { loginUserImage.Source = new BitmapImage(iamgeUri); } catch { imagePath = "pack://application:,,,/images/user.jpg"; iamgeUri = new Uri(imagePath); loginUserImage.Source = new BitmapImage(iamgeUri); } //获取好友列表 var commond = TcpHelper.PackCommmond(_userName, TcpHelper.TalkCommond.UpdateUserList); _clientInstance.SendMessage(commond); //新建线程接收服务端数据 th1 = new Thread(ReceiveData); th1.Start(); //新建线程,用于更新消息提示 th2 = new Thread(ScanEmptyMsgTip); th2.Start(); }
public void SendMessage(Message message) { try { if (IsConnectionOk()) { ClientInstance.SendMessage(message); } } catch (Exception ex) { HandleException(); } }
private void SendMessage() { var msg = sendMsgTextBox.Text; if (string.IsNullOrEmpty(msg)) { MessageBox.Show("不能发送空内容"); return; } var talkMsg = TcpHelper.PackCommmond(_talktoUserName + "," + msg, TcpHelper.TalkCommond.Talk); _clientInstance.SendMessage(talkMsg); ShowMessage(_loginUserName, msg, true); ScrollMessageToBottom(); sendMsgTextBox.Text = string.Empty; }
/// <summary> /// 登录连接到服务器 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void loginButton_Click(object sender, RoutedEventArgs e) { //获取服务器IP var serverIP = serverIPTextBox.Text; if (string.IsNullOrEmpty(serverIP)) { MessageBox.Show("请填写正确的服务器地址"); return; } try { var serverIPs = serverIP.Split(':'); TcpHandler._serverHostName = serverIPs[0]; ToString(); TcpHandler._serverPort = System.Convert.ToInt32(serverIPs[1]); }catch (Exception ex) { MessageBox.Show("服务器地址格式不正确"); return; } var userName = userNameTextBox.Text; if (string.IsNullOrEmpty(userName)) { MessageBox.Show("请输入用户名"); return; } try { clientInstance = TcpHandler.GetInstance(); var sendMsg = TcpHelper.PackCommmond(userName, TcpHelper.TalkCommond.Login); //发送登录命令 clientInstance.SendMessage(sendMsg); //创建新线程接收服务端消息 Thread th = new Thread(ReceiveData); th.Start(); }catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void ReceiveData() { while (true) { try { var getMsg = _clientInstance.br.ReadString(); var unPackMsg = TcpHelper.UnPackCommond(getMsg); var commond = unPackMsg.Item1; switch (commond) { case TcpHelper.TalkCommond.Logout: //获取好友列表 var sendCommond = TcpHelper.PackCommmond(_userName, TcpHelper.TalkCommond.UpdateUserList); _clientInstance.SendMessage(sendCommond); break; case TcpHelper.TalkCommond.UpdateUserList: try { //获取用户列表 var userList = JsonHandler.UnJson <List <TalkUser> >(unPackMsg.Item2); //线程中不能操作UI System.Windows.Application.Current.Dispatcher.Invoke((Action)(() => { CleanUserList(); userList = userList.OrderByDescending(v => v.IsOnline).ToList(); foreach (var user in userList) { AddUserToList(user); } })); }catch (Exception e) { MessageBox.Show(e.Message); } break; case TcpHelper.TalkCommond.Talk: var talkMsgs = unPackMsg.Item2.Split(','); var talkFromUserName = talkMsgs[0]; var talkContent = unPackMsg.Item2.Substring(talkMsgs[0].Length + 1, unPackMsg.Item2.Length - talkMsgs[0].Length - 1); //将消息存入临时列表 StoreTalkMessage(talkFromUserName, talkContent); //判断聊天窗口是否打开 TalkWindow tw = IsTalkWindowOpen(talkFromUserName); if (tw == null) { //如果聊天窗口没有打开,则将显示消息条数提示 var messageCount = MessageList.memory[talkFromUserName].Count(); MessageList.SetMessageTipList(talkFromUserName, messageCount); MessageList.resetMessageTip = true; } break; default: MessageBox.Show(getMsg); break; } }catch (Exception e) { _clientInstance.CloseConnect(); return; } } }