/// <summary> /// This method is called when participant closes source. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event data.</param> private void Participant_SourceRemoved(object sender, RTP_SourceEventArgs e) { if (m_IsDisposed) { return; } // Get SSRC here, BeginInvoke is anynchronous and source may dispose at same time. uint ssrc = e.Source.SSRC; // Move processing to UI thread. BeginInvoke(new MethodInvoker(delegate { TreeNode nodeParticipant = FindParticipantNode((RTP_Participant)sender); if (nodeParticipant != null) { foreach ( TreeNode nodeSource in nodeParticipant.Nodes[0].Nodes) { if (nodeSource.Text == ssrc.ToString()) { nodeSource.Remove(); break; } } } })); }
/// <summary> /// This method is called when participant creates new source. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event data.</param> private void Participant_SourceAdded(object sender, RTP_SourceEventArgs e) { if (m_IsDisposed) { return; } e.Source.StateChanged += Source_StateChanged; // Move processing to UI thread. BeginInvoke(new MethodInvoker(delegate { TreeNode nodeParticipant = null; if (e.Source is RTP_Source_Remote) { nodeParticipant = FindParticipantNode( ((RTP_Source_Remote)e.Source).Participant); } else { nodeParticipant = FindParticipantNode( ((RTP_Source_Local)e.Source).Participant); } TreeNode nodeSource = nodeParticipant.Nodes[0].Nodes.Add( e.Source.SSRC.ToString()); nodeSource.Tag = new RTP_SourceInfo(e.Source); if (e.Source.State == RTP_SourceState.Active) { TreeNode nodeSourceStream = nodeSource.Nodes.Add("RTP Stream"); if (e.Source is RTP_Source_Local) { nodeSourceStream.Tag = new RTP_SendStreamInfo( ((RTP_Source_Local)e.Source).Stream); } else { nodeSourceStream.Tag = new RTP_ReceiveStreamInfo( ((RTP_Source_Remote)e.Source).Stream); } } })); }
/// <summary> /// This method is called when participant closes source. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event data.</param> private void Participant_SourceRemoved(object sender, RTP_SourceEventArgs e) { if (m_IsDisposed) { return; } // Get SSRC here, BeginInvoke is anynchronous and source may dispose at same time. uint ssrc = e.Source.SSRC; // Move processing to UI thread. BeginInvoke(new MethodInvoker(delegate { TreeNode nodeParticipant = FindParticipantNode((RTP_Participant) sender); if (nodeParticipant != null) { foreach ( TreeNode nodeSource in nodeParticipant.Nodes[0].Nodes) { if (nodeSource.Text == ssrc.ToString()) { nodeSource.Remove(); break; } } } })); }
/// <summary> /// This method is called when participant creates new source. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event data.</param> private void Participant_SourceAdded(object sender, RTP_SourceEventArgs e) { if (m_IsDisposed) { return; } e.Source.StateChanged += Source_StateChanged; // Move processing to UI thread. BeginInvoke(new MethodInvoker(delegate { TreeNode nodeParticipant = null; if (e.Source is RTP_Source_Remote) { nodeParticipant = FindParticipantNode( ((RTP_Source_Remote) e.Source).Participant); } else { nodeParticipant = FindParticipantNode( ((RTP_Source_Local) e.Source).Participant); } TreeNode nodeSource = nodeParticipant.Nodes[0].Nodes.Add( e.Source.SSRC.ToString()); nodeSource.Tag = new RTP_SourceInfo(e.Source); if (e.Source.State == RTP_SourceState.Active) { TreeNode nodeSourceStream = nodeSource.Nodes.Add("RTP Stream"); if (e.Source is RTP_Source_Local) { nodeSourceStream.Tag = new RTP_SendStreamInfo( ((RTP_Source_Local) e.Source).Stream); } else { nodeSourceStream.Tag = new RTP_ReceiveStreamInfo( ((RTP_Source_Remote) e.Source).Stream); } } })); }