/// <summary> /// ���ô����ļ����� /// </summary> /// <param name="isSend">��ʶ�ļ��Ƿ��ͻ��ǽ���</param> /// <param name="FullFileName">��������ļ���������Ҫ���ŵ��ļ�·��</param> /// <param name="FileName">�ļ���</param> /// <param name="FileLen">�ļ�����</param> /// <param name="fileExtension">�ļ���չ��</param> /// <param name="FileMD5Value">�ļ�MD5ֵ</param> /// <param name="ServerIP">������IP��ַ</param> /// <param name="ServerUDPPort">������UDP����˿�</param> /// <param name="ServerTCPPort">������TCP����˿�</param> /// <param name="selfUserInfo">�Լ��������û���Ϣ</param> /// <param name="OppositeUserInfo">�Է��������û���Ϣ</param> public void SetParameter(bool IsSend, string FullFileName, string FileName, int FileLen, string fileExtension, string FileMD5Value,UserInfo selfUserInfo, UserInfo OppositeUserInfo) { //�ļ�����ǰ����˫�����ӵIJ������ú��� this._IsSend = IsSend; //this._serverIp = ServerIP;//��ȡ������IP��ַ //this._serverUDPPort = ServerUDPPort;//��ȡ�ļ�������UDP����˿� //this._serverTCPPort = ServerTCPPort;//��ȡ�ļ�������TCP����˿� this.Extension = fileExtension;//��ȡ�ļ���չ�� this._FileLen = FileLen;//��ȡ�ļ����� this._fileName = FileName;//�ļ����� this.FileMD5Value = FileMD5Value;//��ȡ�ļ���MD5ֵ this._selfUserInfo = selfUserInfo;//��ȡ�Լ��������û���Ϣ this._OppositeUserInfo = OppositeUserInfo;//��ȡ�Է��������û���Ϣ this.FileLenStr = Calculate.GetSizeStr(FileLen);//����ļ��ߴ��ַ��� this.readFileCount = FileLen / this.maxReadWriteFileBlock;//����ļ���д���� if (FileLen % this.maxReadWriteFileBlock != 0) this.readFileCount++;//�����д�ļ����࣬�����д������1 if (_IsSend)//������ļ������� this._fullFileName = FullFileName;//���ļ��ľ���·�� }
/// <summary> /// 保存地址的地址 /// </summary> /// <param name="user"></param> public void SetLocalAddress(UserInfo user) { aVcommunicationEx1._selfUserInfo = user; }
/// <summary> /// 设置远程视频访问的端口和地址 /// </summary> /// <param name="user"></param> /// <param name="VideoRemotUDPPort"></param> public void SetRemoteAddress(UserInfo user, int VideoRemotUDPPort) { aVcommunicationEx1.OppositeUDPPort = VideoRemotUDPPort; aVcommunicationEx1._OppositeUserInfo = user; }
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { try { Util.ChatForms.Remove(TO_Jid.Bare); } catch (Exception) { } try { XmppConn.MessageGrabber.Remove(TO_Jid); } catch (Exception) { } try { udpReceiveFile.Dispose(); udpReceiveFile = null; } catch (Exception) { } try { udpSendFile.Dispose(); udpSendFile = null; } catch (Exception) { } RTBRecord.Dispose(); RTBRecord = null; rtfSend.Dispose(); rtfSend = null; if (QQcm_send_key != null) { QQcm_send_key.Dispose(); QQcm_send_key = null; } try { if (avForm != null) { avForm.AVClose(); avForm.Dispose(); avForm = null; } } catch (Exception) { } try { if (ravForm != null) { ravForm.AVClose(); ravForm.Dispose(); ravForm = null; } } catch (Exception) { } try { LB_sockUDP.CloseSock(); LB_sockUDP.Dispose(); LB_sockUDP = null; } catch (Exception) { } if (emotionDropdown != null) { emotionDropdown.Dispose(); } if (main_msg != null) { main_msg = null; } if (PicQueue != null) { PicQueue.Dispose(); PicQueue.Clear(); PicQueue = null; } if (Opposite != null) { Opposite = null; } if (imageP2Ps != null) { imageP2Ps.Dispose(); imageP2Ps.Clear(); imageP2Ps = null; } if (Close_Check!=null) { Close_Check.Enabled = false; Close_Check.Dispose(); Close_Check = null; } if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); System.GC.Collect(); }
/// <summary> /// ���ô����ļ����� /// </summary> /// <param name="isSend">��ʶ�ļ��Ƿ��ͻ��ǽ���</param> /// <param name="FullFileName">��������ļ���������Ҫ���ŵ��ļ�·��</param> /// <param name="FileName">�ļ���</param> /// <param name="FileLen">�ļ�����</param> /// <param name="fileExtension">�ļ���չ��</param> /// <param name="FileMD5Value">�ļ�MD5ֵ</param> /// <param name="ServerIP">������IP��ַ</param> /// <param name="ServerUDPPort">������UDP����˿�</param> /// <param name="ServerTCPPort">������TCP����˿�</param> /// <param name="selfUserInfo">�Լ��������û���Ϣ</param> /// <param name="OppositeUserInfo">�Է��������û���Ϣ</param> public void SetParameter(bool IsSend, string FullFileName, string FileName, int FileLen, string fileExtension, string fileMD5Value,UserInfo selfUserInfo, UserInfo OppositeUserInfo) { ///�����ļ�������� this.p2pFileTransmit1.SetParameter(IsSend, FullFileName, FileName, FileLen, fileExtension, fileMD5Value, selfUserInfo, OppositeUserInfo); this.PBar1.PositionMax = FileLen;//���������ֵΪ�ļ����� this.labProcess.Text = "(0/" + Calculate.GetSizeStr(FileLen) + ")";//�������ֽ��� this.labFileName.Text = FileName; this.FileMD5Value = fileMD5Value; if (IsSend) { this.linkSaveAs.Visible = false; this.labOr.Visible = false; this.labelState.Text = "�ȴ��Է������ļ�..."; } else { this.labelState.Text = "�Է��ڵȴ��������ļ�"; } }
/// <summary> /// 同意视频信息后,进行初使化本地视频服务 /// </summary> /// <param name="msg"></param> void AcceptVideoInitMethod(CSS.IM.XMPP.protocol.client.Message msg) { UserInfo user1; UserInfo user2; if (ravForm != null && !ravForm.IsDisposed) { try { ravForm.Dispose(); ravForm = null; } catch (Exception) { } } else { ravForm = new CSS.IM.App.Controls.AVForm(TO_Jid); ravForm.AVCloseEvent += new CSS.IM.App.Controls.AVForm.AVCloseDelegate(avForm_AVCloseEvent); } //保存本地视频的监听端口 ListenVideoUDPPort = ravForm.aVcommunicationEx1.selfUDPPort; RemotVideoUDPPort = msg.GetTagInt("UDPPort"); RemotVideoUDPIP = IPAddress.Parse(msg.GetTag("UDPIP")); user1 = new UserInfo(); user1.LocalPort = RemotVideoUDPPort; user1.LocalIP = RemotVideoUDPIP; ravForm.SetRemoteAddress(user1, RemotVideoUDPPort); user2 = new UserInfo(); user2.LocalIP = Program.LocalHostIP; user2.LocalPort = ListenVideoUDPPort; ravForm.SetLocalAddress(user2); ravForm.AgreeEvent += new CSS.IM.App.Controls.AVForm.AgreeDelegate(ravForm_AgreeEvent);//接收视频会话事件 ravForm.btn_hangup.Visible = false;//挂断不可用 ravForm.btn_agree.Visible = true;//接受可用 ravForm.btn_refuse.Visible = true;//拒绝可用 try { ravForm.Show(); } catch (Exception) { } //if (ravForm.callSoundPlayer != null) // ravForm.callSoundPlayer.Stop(); }
/// <summary> /// 对方同意视频,并初使化视频后,本地也进行视频初使化 /// </summary> /// <param name="msg"></param> void ReturnAcceptVideoInitMethod(XMPP.protocol.client.Message msg) { UserInfo user1; UserInfo user2; CSS.IM.XMPP.protocol.client.Message res_msg; RemotVideoUDPPort = msg.GetTagInt("UDPPort"); RemotVideoUDPIP = IPAddress.Parse(msg.GetTag("UDPIP")); user1 = new UserInfo(); user1.LocalIP = RemotVideoUDPIP; user1.LocalPort = RemotVideoUDPPort; avForm.SetRemoteAddress(user1, RemotVideoUDPPort); user2 = new UserInfo(); user2.LocalIP = Program.LocalHostIP; user2.LocalPort = ListenBasicUDPPort; avForm.SetLocalAddress(user2); avForm.iniAV(CSS.IM.Library.AV.VideoSizeModel.W320_H240); res_msg = new CSS.IM.XMPP.protocol.client.Message(); res_msg.Type = MessageType.chat; res_msg.To = TO_Jid; res_msg.SetTag("m_type", 3); XmppConn.Send(res_msg);//告诉对我准备好了 if (avForm.callSoundPlayer != null) avForm.callSoundPlayer.Stop(); }
/// <summary> /// 同意视频信息后,进行初使化本地视频服务 /// </summary> /// <param name="msg"></param> void AcceptInitMethod(CSS.IM.XMPP.protocol.client.Message msg) { UserInfo user1; UserInfo user2; if (ravForm != null && !ravForm.IsDisposed) { try { ravForm.Dispose(); ravForm = null; } catch (Exception) { } } else { ravForm = new AVForm(to_Jid); ravForm.AVCloseEvent += new AVForm.AVCloseDelegate(avForm_AVCloseEvent); } LocalVideoUDPPort = ravForm.aVcommunicationEx1.selfUDPPort.ToString(); VideoRemotUDPPort = msg.GetTagInt("UDPPort"); VideoRemotUDPIP = IPAddress.Parse(msg.GetTag("UDPIP")); user1 = new UserInfo(); user1.LocalIP = VideoRemotUDPIP; user1.LocalPort = VideoRemotUDPPort; ravForm.SetRemoteAddress(user1, VideoRemotUDPPort); user2 = new UserInfo(); user2.LocalIP = Program.LocalHostIP; user2.LocalPort = int.Parse(LocalVideoUDPPort); ravForm.SetLocalAddress(user2); ravForm.AgreeEvent += new AVForm.AgreeDelegate(ravForm_AgreeEvent);//接收视频会话事件 ravForm.btn_hangup.Visible = false;//挂断不可用 ravForm.btn_agree.Visible = true;//接受可用 ravForm.btn_refuse.Visible = true;//拒绝可用 try { ravForm.Show(); } catch (Exception) { } }
//public void sendFileTransfers(object pathob) //{ // FileInfo f = new FileInfo(pathob.ToString()); // this.FileTransfers(true, f.FullName, f.Name, (int)f.Length, f.Extension, Hasher.GetMD5Hash(f.FullName)); //} /// <summary> /// 发送或接收文件 /// </summary> /// <param name="IsSend">true是发送者,false是接收者</param> /// <param name="fullFileName">要发送的文件的绝对路径,如果接收则传空字符串</param> /// <param name="FileName">文件名</param> /// <param name="FileLen">文件的长度</param> /// <param name="fileExtension">文件扩展名</param> /// <param name="FileMD5Value">文件的MD5值</param> public void FileTransfers(bool IsSend, string fullFileName, string FileName, int FileLen, string fileExtension, string FileMD5Value) { if (IsSend && IsTransfers(FileMD5Value)) { this.AppendSystemRtf(FileName + " 已在传输队列中,请不要重复发送!"); return;//如果要发送的文件已经在传输队列,则退出 } p2pFile fSend = new p2pFile();//创建一个P2P文件传输组件用于传送文件 fSend.Name = FileMD5Value; TabPage tab = new TabPage(FileName); tab.Controls.Add(fSend); tab.Tag = fSend; filelistfrom.tabControl1.TabPages.Add(tab); if (IsSend) { string fileInfo = FileName + "|" + FileLen.ToString() + "|" + fileExtension + "|" + FileMD5Value;//初次请求发送文件时要先发送“控件参数”到对方,请求对方创建“文件发送控件”并建立连接 Msg msg = new Msg((byte)ProtocolClient.FileTransmitRequest, TextEncoder.textToBytes(fileInfo)); this.sockUDP1.Send(BaseRemotUDPIP, BaseRemotUDPPort, msg.getBytes()); AppendSystemRtf("请等待对方接收文件 " + FileName + ") 。请等待回应或取消传输。"); //this.infoMessage1.showMsg("请等待对方接收文件 " + FileName + ") 。请等待回应或取消传输。"); } else { AppendSystemRtf("对方要传送文件 " + FileName + "(" + Calculate.GetSizeStr(FileLen) + ")" + " 给您,请接收或取消传输。"); } UserInfo self = new UserInfo();//将自己的在线基本信息告诉文件传输组件,使传输组件中的套接字确定文件数据包的网络传输协议 self.LocalIP = Program.LocalHostIP; self.IP = Program.LocalHostIP; UserInfo Opposite = new UserInfo();//将对方的在线基本信息告诉文件传输组件,使传输组件中的套接字确定文件数据包的网络传输协议 Opposite.LocalIP = BaseRemotUDPIP; Opposite.IP = BaseRemotUDPIP; fSend.SetParameter(IsSend, fullFileName, FileName, FileLen, fileExtension, FileMD5Value, self, Opposite);//设置文件传输组件相关参数 fSend.fileTransmitBefore += new p2pFile.fileTransmitBeforeEventHandler(fSend_fileTransmitBefore);//文件开始传输事件 fSend.fileTransmitCancel += new p2pFile.fileTransmitCancelEventHandler(fSend_fileTransmitCancel);//文件传输取消事件 fSend.fileTransmitError += new p2pFile.fileTransmitErrorEventHandler(fSend_fileTransmitError);//文件传输错误事件 fSend.fileTransmitted += new p2pFile.fileTransmittedEventHandler(fSend_fileTransmitted);//文件传输完成事件 fSend.getFileProxyID += new p2pFile.getFileProxyIDEventHandler(fSend_getFileProxyID);//文件传输获取中转服务ID fSend.fileTransmitGetUDPPort += new p2pFile.GetUDPPortEventHandler(fSend_fileTransmitGetUdpLocalPort);//获得文件传输套接字UDP侦听端口 fSend.fileTransmitConnected += new p2pFile.ConnectedEventHandler(fSend_fileTransmitConnected);//当文件传输与对方建立传输通道事件 fSend.Dock = System.Windows.Forms.DockStyle.Fill; this.filelistfrom.tabControl1.SelectedTab = tab; try { filelistfrom.TopMost = true; filelistfrom.Show(); } catch (Exception) { } filelistfrom.Activate(); }
/// <summary> /// 对方同意视频,并初使化视频后,本地也进行视频初使化 /// </summary> /// <param name="msg"></param> void ReturnAcceptMethod(XMPP.protocol.client.Message msg) { UserInfo user1; UserInfo user2; CSS.IM.XMPP.protocol.client.Message res_msg; VideoRemotUDPPort = msg.GetTagInt("UDPPort"); VideoRemotUDPIP = IPAddress.Parse(msg.GetTag("UDPIP")); user1 = new UserInfo(); user1.LocalIP = VideoRemotUDPIP; user1.LocalPort = VideoRemotUDPPort; avForm.SetRemoteAddress(user1, VideoRemotUDPPort); user2 = new UserInfo(); user2.LocalIP = Program.LocalHostIP; user2.LocalPort = int.Parse(LocalVideoUDPPort); avForm.SetLocalAddress(user2); avForm.iniAV(VideoSizeModel.W320_H240); res_msg = new CSS.IM.XMPP.protocol.client.Message(); res_msg.Type = MessageType.chat; res_msg.To = to_Jid; res_msg.SetTag("m_type", 3); res_msg.Body = "falg"; _connection.Send(res_msg);//告诉对我准备好了 }
/// <summary> /// �������û�������ɾ��һ���û� /// </summary> /// <param name="_UserInfo">Ҫɾ�����û�</param> public void Romove(UserInfo _UserInfo) { base.InnerList.Remove(_UserInfo); }
/// <summary> /// �������û����������һ���û� /// </summary> /// <param name="_UserInfo">Ҫ��ӵ��û�</param> public void add(UserInfo _UserInfo) { base.InnerList.Add(_UserInfo); _UserInfo.Index = this.Count-1; }