示例#1
0
        private void AudioIcon_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            string srcId    = App.user.userName;
            string destId   = chatViewModel.selectedChatRoom.id;
            string targetIP = chatViewModel.selectedChatRoom.addressInfo.IPAddress;

            byte[] data = AppProtocol.PackControl(AppProtocol.ControlType.QAUDIO, srcId, destId);

            P2PSender.getInstance().SendData(data, targetIP, P2PListener.GENERALLISTENPORT);
            var audio = new Audio(targetIP);

            audioWindow = new audioWindow(audio);
            audioWindow.Show();
        }
示例#2
0
        // 发送文字消息,调用应用层AppProtocol的接口封包,调用传输层P2PSender/UDPSender发送
        private void SendWordMsg()
        {
            if (chatRoomList.SelectedIndex == -1)
            {
                MessageBox.Show("请选择聊天对象");
                return;
            }
            if (msgTbx.Text == "")
            {
                MessageBox.Show("所发消息不能为空");
                return;
            }


            string targetIP = chatViewModel.selectedChatRoom.addressInfo.IPAddress;

            int    targetPort = P2PListener.GENERALLISTENPORT;
            string srcId      = App.user.userName;
            string destId     = chatViewModel.selectedChatRoom.id;

            if (groupChat.isGroupChatMsg(destId))
            {
                // 群聊消息单独处理
                groupChat.SendGroupWord(msgTbx.Text, destId);
            }
            else
            {
                byte[] data = AppProtocol.PackWord(msgTbx.Text, srcId, destId);
                if (isUDPCbx.IsChecked == true)
                {
                    UDPSender.getInstance().ReliableSendData(data, targetIP); // udp 发送不支持指定端口
                }
                else
                {
                    P2PSender.getInstance().SendData(data, targetIP, targetPort);
                }
            }


            // 本地显示自己的话
            chatViewModel.selectedChatRoom.msgList.Add(new Model.Message {
                description = msgTbx.Text, src = "我"
            });

            updateUI();

            msgTbx.Text = "";
        }
示例#3
0
        // 发送图片消息,调用应用层AppProtocol的接口封包,调用传输层P2PSender发送
        private void SendPhoto()
        {
            // 选择表情包
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter = "图片文件|*.jpg;*.gif;*.bmp;*.png";
            Nullable <bool> result   = dlg.ShowDialog();
            string          filename = null;

            if (result != true)
            {
                return;
            }
            filename = dlg.FileName;
            System.Drawing.Bitmap bitmap;
            try {
                bitmap = new System.Drawing.Bitmap(filename);
            } catch (Exception ex) {
                MessageBox.Show(ex.Message, "图片不存在");
                return;
            }

            // 封包发送
            string srcId      = App.user.userName;
            string destId     = chatViewModel.selectedChatRoom.id;
            string targetIP   = chatViewModel.selectedChatRoom.addressInfo.IPAddress;
            int    targetPort = P2PListener.GENERALLISTENPORT;

            byte[] data = AppProtocol.PackPhoto(bitmap, srcId, destId);

            P2PSender.getInstance().SendData(data, targetIP, targetPort);

            chatViewModel.selectedChatRoom.msgList.Add(new Model.Message {
                src = "我", msg = bitmap
            });

            updateUI();
        }
示例#4
0
        // 发送文件消息,调用应用层AppProtocol的接口封包,调用传输层P2PSender发送
        private void SendFileMsg()
        {
            // 选择文件
            OpenFileDialog  dlg      = new OpenFileDialog();
            Nullable <bool> result   = dlg.ShowDialog();
            string          filename = null;

            if (result != true)
            {
                return;
            }
            filename = dlg.FileName;
            FileStream fstream = null;

            try {
                fstream = new FileStream(filename, FileMode.Open, FileAccess.Read);
            } catch (Exception e) {
                MessageBox.Show(e.Message, "文件不存在");
                return;
            }

            // 调用应用层封包,调用传输层发送
            string srcId      = App.user.userName;
            string destId     = chatViewModel.selectedChatRoom.id;
            string targetIP   = chatViewModel.selectedChatRoom.addressInfo.IPAddress;
            int    targetPort = P2PListener.FILELISTENPORT;

            byte[][] dataGroup = AppProtocol.PackFile(fstream, srcId, destId);
            fstream.Close();
            P2PSender.getInstance().SendDataGroup(dataGroup, targetIP, targetPort);

            chatViewModel.selectedChatRoom.msgList.Add(new Model.Message {
                description = $"文件:{filename.Substring(filename.LastIndexOf('\\') + 1)}", src = "我"
            });

            updateUI();
        }
示例#5
0
        // 控制报文的发送散落于音视频会话,群聊创建等有需要的过程中
        // --------------------------- 收到控制报文 -------------------------

        private void RecvControl(byte[] newData)
        {
            string srcId    = null;
            string destId   = null;
            string optional = null;
            var    ctype    = AppProtocol.UnPackControl(newData, ref srcId, ref destId, ref optional);

            if (ctype == AppProtocol.ControlType.NEWGROUP)
            {
                App.addressBook.items.Add(new Model.AddressBook.Item()
                {
                    UserName = srcId, GroupUserName = optional.Split(';'), Alias = srcId, isGroup = true
                });
                return;
            }

            string targetIP = null;

            foreach (var item in chatViewModel.chatRoomViewModels)
            {
                if (item.addressInfo.UserName == srcId)
                {
                    targetIP = item.addressInfo.IPAddress;
                }
            }
            targetIP = chatViewModel.chatRoomViewModels[0].addressInfo.IPAddress; // debugTemp
            if (targetIP == null)                                                 // 收到非好友视频邀请不处理
            {
                return;
            }

            switch (ctype)
            {
            case AppProtocol.ControlType.QAUDIO:
                var result = MessageBox.Show($"{srcId}邀请您进行音频聊天,是否接受?", "新音频邀请", MessageBoxButton.YesNo);
                if (result == MessageBoxResult.No)
                {
                    P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.RAUDIO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT);
                }
                else
                {
                    P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.AAUDIO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT);
                    var audio = new Audio(targetIP);
                    audioWindow = new audioWindow(audio);
                    audioWindow.Show();
                }
                break;

            case AppProtocol.ControlType.AAUDIO:

                break;

            case AppProtocol.ControlType.RAUDIO:
                audioWindow.audio.isChatting = false;
                audioWindow.Close();
                break;

            case AppProtocol.ControlType.QVIDEO:
                result = MessageBox.Show($"{srcId}邀请您进行视频聊天,是否接受?", "新视频邀请", MessageBoxButton.YesNo);
                if (result == MessageBoxResult.No)
                {
                    P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.RVIDEO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT);
                }
                else
                {
                    P2PSender.getInstance().SendData(AppProtocol.PackControl(AppProtocol.ControlType.AVIDEO, destId, srcId), targetIP, P2PListener.GENERALLISTENPORT);
                    var video       = new Video(targetIP);
                    var videoWindow = new videoWindow(video);
                    videoWindow.Show();
                }
                break;

            case AppProtocol.ControlType.AVIDEO:

                break;

            case AppProtocol.ControlType.RVIDEO:
                videoWindow.video.isReject = true;
                videoWindow.Close();
                MessageBox.Show("对方拒绝了你的视频邀请");
                break;

            default:
                break;
            }
        }