/// <summary> /// Conversation event handler. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ConversationStateChanged(object sender, Microsoft.Rtc.Signaling.StateChangedEventArgs <ConversationState> e) { Conversation conversation = sender as Conversation; if (e.State == ConversationState.Terminating) { this.UnregisterConversationEventHandlers(conversation); this.Terminate(); } }
/// <summary> /// Ucma conversation state changed handler. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event args.</param> private void UcmaConversation_StateChanged(object sender, Microsoft.Rtc.Signaling.StateChangedEventArgs <ConversationState> e) { if (e.State == ConversationState.Terminating) { Conversation conversation = sender as Conversation; WebConversation webConversation = null; //If conversation is terminating remove it from local dictionary. lock (m_conversationDictionary) { conversation.StateChanged -= this.UcmaConversation_StateChanged; if (!m_conversationDictionary.TryGetValue(conversation.Id, out webConversation)) { webConversation = null; } m_conversationDictionary.Remove(conversation.Id); } if (webConversation != null) { ConversationTerminationNotification conversationTerminationNotification = new ConversationTerminationNotification(); conversationTerminationNotification.Conversation = webConversation; IConversationCallback convCallback = WebConversationManager.GetActiveConversationCallback(webConversation); if (convCallback != null) { try { convCallback.ConversationTerminated(conversationTerminationNotification); } catch (System.TimeoutException) { } } } } }