Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
 public void SendMessage(Message message)
 {
     try
     {
         if (IsConnectionOk())
         {
             ClientInstance.SendMessage(message);
         }
     }
     catch (Exception ex)
     {
         HandleException();
     }
 }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        /// <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);
            }
        }
Ejemplo n.º 5
0
        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;
                }
            }
        }