Пример #1
0
        public void IncomingMessage(CSS.IM.XMPP.protocol.client.Message msg)
        {
            try
            {
                if (msg.Type == MessageType.error)
                {
                    MsgBox.Show(this, "CSS&IM", "离线消息没有发送成功!", MessageBoxButtons.OK);
                    btn_close_Click(null, null);
                    //btn_close_Click(null, null);
                    //if (msg.To.Bare == _connection.MyJID.Bare && msg.From.Bare == to_Jid.Bare)
                    //{
                    //    MsgBox.Show(this, "CSS&IM", "在服务器中没有找到该用户,无法发送消息!", MessageBoxButtons.OK);
                    //    btn_close_Click(null, null);
                    //}
                }

                int m_type = msg.GetTagInt("m_type");

                switch (m_type)
                {
                    case 0://正常消息
                        //RTBRecord.AppendTextAsRtf(msg.From.User + " " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + "\n", new Font(this.Font, FontStyle.Underline | FontStyle.Bold), CSS.IM.Library.ExtRichTextBox.RtfColor.Red, CSS.IM.Library.ExtRichTextBox.RtfColor.White);
                        CSS.IM.UI.Util.Win32.FlashWindow(this.Handle, true);//闪烁

                        #region 显示我自己发送的消息
                        CSS.IM.XMPP.protocol.client.Message top_msg = new XMPP.protocol.client.Message();
                        top_msg.SetTag("FName", this.Font.Name);//获得字体名称
                        top_msg.SetTag("FSize", this.Font.Size);//字体大小
                        top_msg.SetTag("FBold", true);//是否粗体
                        top_msg.SetTag("FItalic", this.Font.Italic);//是否斜体
                        top_msg.SetTag("FStrikeout", this.Font.Strikeout);//是否删除线
                        top_msg.SetTag("FUnderline", true);//是否下划线

                        Color top_cl = Color.Red;//获取颜色
                        byte[] top_cby = BitConverter.GetBytes(top_cl.ToArgb());
                        top_msg.SetTag("CA", top_cby[0]);
                        top_msg.SetTag("CR", top_cby[1]);
                        top_msg.SetTag("CG", top_cby[2]);
                        top_msg.SetTag("CB", top_cby[3]);
                        top_msg.Body = (_NickName != "" ? _NickName : msg.From.User) + "(" + msg.From.User + "):" + DateTime.Now.ToString("HH:mm:ss");
                        top_msg.From = TO_Jid;
                        top_msg.To = TO_Jid;
                        RTBRecord_Show(top_msg, true);
                        #endregion

                        RTBRecord_Show(msg, false);

                        if (IsPlayMsg)
                        {
                            if (CSS.IM.UI.Util.Path.MsgSwitch)
                                CSS.IM.UI.Util.SoundPlayEx.MsgPlay(CSS.IM.UI.Util.Path.MsgPath);
                        }
                        break;
                    case 1://收到对方的请求要过行视频功能服务,初始化本地的视频
                        this.Invoke(AccepVideotInit, new object[] { msg });
                        break;
                    case 2://我发送视频请求后,对方告诉我视频初使化完成,进行自己本地的视频初使化
                        this.Invoke(ReturnAcceptVideoInit, new object[] { msg });
                        break;
                    case 3://对方给我发送视频请求,我初使化本地视频服务,告诉对方,对方也初使化视频服务了,我打开视频功能
                        this.Invoke(AcceptVideoOpen, new object[] { msg });
                        break;
                    case 4://去对方获取截图的功能
                        RemotBaseUDPPort = msg.GetTagInt("BPort");
                        RemotBaseUDPIP = IPAddress.Parse(msg.GetTag("BIP"));
                        bool isSend = msg.GetTagBool("isSend");

                        if (isSend)
                        {
                            CSS.IM.XMPP.protocol.client.Message fmsg = new CSS.IM.XMPP.protocol.client.Message();
                            fmsg.SetTag("m_type", 4);
                            fmsg.Type = MessageType.chat;
                            fmsg.To = TO_Jid;
                            fmsg.SetTag("BPort", ListenBasicUDPPort);
                            fmsg.SetTag("BIP", Program.LocalHostIP.ToString());
                            fmsg.SetTag("isSend", false);
                            XmppConn.Send(fmsg);
                        }

                        sendSelfImage();
                        break;
                    case 5://视频释放
                        if (RemotVideoUDPPort != -1)
                        {
                            //avForm.isBtn_hangup = true;
                            if (avForm != null && !avForm.IsDisposed)
                            {
                                avForm.isBtn_hangup = true;
                                avForm.AVClose();
                            }
                            if (ravForm != null && !ravForm.IsDisposed)
                            {
                                ravForm.isBtn_hangup = true;
                                ravForm.AVClose();
                            }
                        }
                        break;
                    case 6://传文件
                        RemotBaseUDPPort = msg.GetTagInt("BPort");
                        RemotBaseUDPIP = IPAddress.Parse(msg.GetTag("BIP"));

                        CSS.IM.XMPP.protocol.client.Message lmsg = new CSS.IM.XMPP.protocol.client.Message();
                        lmsg.SetTag("m_type", 7);//告诉对方要发送文件啦
                        lmsg.Type = MessageType.chat;
                        lmsg.To = TO_Jid;
                        lmsg.SetTag("BPort", udpReceiveFile.Port);
                        lmsg.SetTag("BIP", Program.LocalHostIP.ToString());
                        lmsg.SetTag("isSend", false);
                        lmsg.SetTag("File", msg.GetTag("File").ToString());
                        XmppConn.Send(lmsg);
                        break;
                    case 7:
                        RemotBaseUDPPort = msg.GetTagInt("BPort");
                        RemotBaseUDPIP = IPAddress.Parse(msg.GetTag("BIP"));
                        this.Invoke(FileSendInitEvent, msg.GetTag("File").ToString());
                        break;
                    case 8://ftp离线文件
                        this.Invoke(GetFtpFileEvent, new object[] { msg});
                        break;
                    case 9://对方拒绝接收主线文件
                        this.AppendSystemRtf("对方"+msg.Body);
                        break;
                    case 10://对方接收离线文件
                        //DownloadImage
                        try
                        {
                            FTPClient ftpClient = new FTPClient(Util.ServerAddress, Util.ftpPath, Util.ftpUser, Util.ftpPswd, Util.ftpPort);
                            ftpClient.FtpPath=msg.GetTag("Path");
                            DownloadImage downloadImage = new DownloadImage();
                            downloadImage.ftpClient = ftpClient;
                            downloadImage.remoteImageName = msg.GetTag("FileName");
                            downloadImage.parent = this;
                            Thread getFileThread = new Thread(downloadImage.Download);
                            getFileThread.Start();
                        }
                        catch (Exception)
                        {

                        }
                        break;
                    case 11://接收到red的视频请求
                        this.Invoke(Red5AccpetEvent, new object[] { msg });
                        break;
                    case 12://接收到red的视频请求
                        this.Invoke(Red5RefuseEvent, new object[] { msg });
                        break;
                    case 13:
                        //red5MsgSend_FormClosing
                        if (red5MsgReceive != null || !red5MsgReceive.IsDisposed)
                        {
                            red5MsgReceive.Close();
                            red5MsgReceive.Dispose();
                            red5MsgReceive = null;
                        }
                        this.AppendSystemRtf("对方" + msg.From.User + "关闭了视频通话");
                        break;
                    case 14:
                        //red5MsgReceive_FormClosing
                        if (red5MsgSend != null || !red5MsgSend.IsDisposed)
                        {
                            red5MsgSend.Close();
                            red5MsgSend.Dispose();
                            red5MsgSend = null;
                        }
                        this.AppendSystemRtf("对方" + msg.From.User + "关闭了视频通话");
                        break;

                }
            }
            catch (Exception)
            {

            }
        }
Пример #2
0
        /// <summary>
        /// 拒绝视频请求
        /// </summary>
        /// <param name="msg"></param>
        private void Red5RefuseMethod(XMPP.protocol.client.Message msg)
        {
            if (InvokeRequired)
            {
                this.Invoke(Red5RefuseEvent, new object[] { msg });
            }

            if (red5MsgSend != null || red5MsgSend.IsDisposed)
             {
                 red5MsgSend.Close();
                 red5MsgSend.Dispose();
                 red5MsgSend = null;
             }

            this.AppendSystemRtf("对方" + msg.From.User + "拒绝了你的视频请求");
        }
Пример #3
0
        /// <summary>
        /// 窗体关闭的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ChatFromMsg_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult result;
            if (avForm != null)
            {
                if (avForm.IsDisposed == false)
                {
                    result = MsgBox.Show(this, "CSS&IM", "当前正在视频是否结束聊天?", MessageBoxButtons.YesNo);

                    if (result == DialogResult.Yes)
                    {
                        avForm.isBtn_hangup = true;
                        avForm.AVClose();
                        avForm_AVCloseEvent();
                        e.Cancel = false;

                    }
                    else
                    {
                        e.Cancel = true;
                        return;
                    }
                }
            }

            if (ravForm != null)
            {
                if (ravForm.IsDisposed == false)
                {
                    result = MsgBox.Show(this, "CSS&IM", "当前正在视频是否结束聊天?", MessageBoxButtons.YesNo);

                    if (result == DialogResult.Yes)
                    {
                        ravForm.isBtn_hangup = true;
                        ravForm.AVClose();
                        avForm_AVCloseEvent();
                        e.Cancel = false;

                    }
                    else
                    {
                        e.Cancel = true;
                        return;
                    }
                }
            }

            if (red5MsgSend != null)
            {
                if (red5MsgSend.IsDisposed == false)
                {
                    red5MsgSend.Close();
                    red5MsgSend.Dispose();
                    red5MsgSend = null;
                }
            }

            if (red5MsgReceive != null)
            {
                if (red5MsgReceive.IsDisposed == false)
                {
                    red5MsgReceive.Close();
                    red5MsgReceive.Dispose();
                    red5MsgReceive = null;
                }
            }

            if (fileTansfersContainer.Controls.Count> 0)
            {

                result = MsgBox.Show(this, "CSS&IM", "当前有正在发送的文件是否取消发送?", MessageBoxButtons.YesNo);

                if (result == DialogResult.Yes)
                {

                    List<FileTransfersItem> FTIList = new List<FileTransfersItem>();
                    foreach (Control citem in fileTansfersContainer.Controls)
                    {
                        FileTransfersItem item = citem as FileTransfersItem;
                        FTIList.Add(item);
                    }

                    foreach (FileTransfersItem item in FTIList)
                    {
                        if (item.Style==FileTransfersItemStyle.Send)
                        {
                            SendFileManager sendFileManager = item.Tag as SendFileManager;
                            udpSendFile.CancelSend(sendFileManager.MD5);
                            fileTansfersContainer.RemoveItem(item);
                            item.Dispose();
                        }
                        else if (item.Style == FileTransfersItemStyle.Cancel)
                        {
                            SendFileManager sendFileManager = item.Tag as SendFileManager;
                            sendFileManager.ftpClient.DisConnect(true);
                        }
                        else if (item.Style == FileTransfersItemStyle.ReadyReceive)
                        {
                            RequestSendFileEventArgs rse = item.Tag as RequestSendFileEventArgs;
                            if (rse != null)
                            {
                                rse.Cancel = true;
                                fileTansfersContainer.RemoveItem(item);
                                item.Dispose();
                                udpReceiveFile.AcceptReceive(rse);
                            }
                        }
                        else if (item.Style == FileTransfersItemStyle.Receive)
                        {
                            ControlTag tag = item.Tag as ControlTag;
                            if (tag != null)
                            {
                                udpReceiveFile.CancelReceive(tag.MD5, tag.RemoteIP);
                                fileTansfersContainer.RemoveItem(item);
                                item.Dispose();
                            }
                        }
                        Thread.Sleep(500);
                    }

                    if (panel_function.Visible)
                    {
                        panel_function.Visible = false;
                        this.Width = this.Width - panel_function.Width;
                        panel_msg.Width = panel_msg.Width + panel_function.Width + 2;

                    }
                    e.Cancel = false;

                }
                else
                {
                    e.Cancel = true;
                    return;
                }

            }

            if(!Close_Check.Enabled)
            {
                Close_Check.Enabled=true;
            }
            else
            {
                this.Dispose();
            }
            //= Close_Check.Enabled == false ? true : false;
        }
Пример #4
0
        /// <summary>
        /// red5视频请求
        /// </summary>
        /// <param name="msg"></param>
        private void Red5AccpetMethod(XMPP.protocol.client.Message msg)
        {
            if (InvokeRequired)
            {
                this.Invoke(Red5AccpetEvent, new object[]{msg});
            }

            if (red5MsgReceive != null)
                if (!red5MsgReceive.IsDisposed)
                    return;

            DialogResult result=MsgBox.Show(this, "CSS&IM", "好友" + NickName + "向您发送视频请求,是否接受!", MessageBoxButtons.YesNo);

            if (result==DialogResult.Yes)
            {
                string serUrl = @"http://"+Program.ServerIP+":7070/redfire/video/redfire_2way.html?me={0}&you={1}&key={2}";
                red5MsgReceive = new Red5Msg();
                red5MsgReceive.FriendName = "正在与[" + msg.GetTag("me").ToString() + "]视频通话中";
                red5MsgReceive.FormClosing += new FormClosingEventHandler(red5MsgReceive_FormClosing);
                red5MsgReceive.Accept(string.Format(serUrl, msg.GetTag("you").ToString(), msg.GetTag("me").ToString(), msg.GetTag("key").ToString()));
                red5MsgReceive.Show();
                this.AppendSystemRtf("开始与" + msg.GetTag("me").ToString() + "进行视频通话");
            }
            else
            {
                CSS.IM.XMPP.protocol.client.Message emsg = new CSS.IM.XMPP.protocol.client.Message();
                emsg.Type = MessageType.chat;
                emsg.To = TO_Jid;
                emsg.SetTag("m_type", 12);
                emsg.SetTag("me", msg.GetTag("me").ToString());
                emsg.SetTag("you", msg.GetTag("you").ToString());
                emsg.SetTag("key", msg.GetTag("key").ToString());
                XmppConn.Send(emsg);
                this.AppendSystemRtf("拒绝了" + msg.GetTag("me").ToString() + "视频通话");
            }
        }
Пример #5
0
        /// <summary>
        /// 视频发送请求
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_videoOpen_Click(object sender, EventArgs e)
        {
            if (!OnLine)
                return;

            string keyValue=Guid.NewGuid().ToString().Replace("-","");

            try
            {
                //if (avForm != null)
                //    if (!avForm.IsDisposed)
                //        return;

                //if (ravForm != null)
                //    if (!ravForm.IsDisposed)
                //        return;

                //avForm = new CSS.IM.App.Controls.AVForm(TO_Jid);
                //avForm.AVCloseEvent += new CSS.IM.App.Controls.AVForm.AVCloseDelegate(avForm_AVCloseEvent);
                //ListenVideoUDPPort = avForm.aVcommunicationEx1.selfUDPPort;

                //avForm.Show();

                if (red5MsgSend != null)
                    if (!red5MsgSend.IsDisposed)
                        return;

                if (red5MsgReceive != null)
                    if (!red5MsgReceive.IsDisposed)
                        return;

                string serUrl = @"http://" + Program.ServerIP + ":7070/redfire/video/redfire_2way.html?me={0}&you={1}&key={2}";
                red5MsgSend = new Red5Msg();
                red5MsgSend.FriendName = "正在与[" + TO_Jid.User + "]视频通话中";
                red5MsgSend.FormClosing += new FormClosingEventHandler(red5MsgSend_FormClosing);
                red5MsgSend.Cell(string.Format(serUrl, XmppConn.MyJID.User, TO_Jid.User, keyValue));
                red5MsgSend.Show();

                CSS.IM.XMPP.protocol.client.Message msg = new CSS.IM.XMPP.protocol.client.Message();
                msg.Type = MessageType.chat;
                msg.To = TO_Jid;
                msg.SetTag("m_type", 11);
                msg.SetTag("me", XmppConn.MyJID.User);
                msg.SetTag("you", TO_Jid.User);
                msg.SetTag("key", keyValue);
                XmppConn.Send(msg);

                this.AppendSystemRtf("向" + TO_Jid.User+"发送了视频请求,等待回应");

            }
            catch (Exception)
            {

            }

            //CSS.IM.XMPP.protocol.client.Message msg = new CSS.IM.XMPP.protocol.client.Message();
            //msg.Type = MessageType.chat;
            //msg.To = TO_Jid;
            //msg.SetTag("m_type", 1);
            //msg.SetTag("UDPPort", ListenVideoUDPPort);
            //msg.SetTag("UDPIP", Program.LocalHostIP.ToString());
            //XmppConn.Send(msg);

            ////callSoundPlayer.PlayLooping();
            ////SoundPlayEx.MsgPlay("call");
        }