internal void OnSubConversationRemoved(Conversation subConversation, MediaTranscriptRecorder removingTranscriptRecorder) { // Terminate conversation recorder on sub conversation if no calls left under this sub conv ConversationTranscriptRecorder subConvRecorder = null; foreach (ConversationTranscriptRecorder c in _conversationToCallTranscriptMapping.Keys) { if (c.Conversation.Equals(subConversation)) { subConvRecorder = c; break; } } if (subConvRecorder != null) { if (_conversationToCallTranscriptMapping[subConvRecorder].Contains(removingTranscriptRecorder)) { _conversationToCallTranscriptMapping[subConvRecorder].Remove(removingTranscriptRecorder); if (_conversationToCallTranscriptMapping[subConvRecorder].Count == 0) { _conversationToCallTranscriptMapping.Remove(subConvRecorder); _transcriptRecorders.Remove(subConvRecorder); } } } }
internal void OnConversationTerminated(Conversation conversation, ConversationTranscriptRecorder terminatedRecorder) { _transcriptRecorders.Remove(terminatedRecorder); if (!terminatedRecorder.IsSubConversation) { _waitForConversationTerminated.Set(); this.Shutdown(); } }
private void ConferenceInvitation_AcceptCompleted(IAsyncResult result) { try { ConferenceInvitation invite = result.AsyncState as ConferenceInvitation; invite.EndAccept(result); if (_conversation == null) { _conversation = invite.Conversation; _conversationTranscriptRecorder = new ConversationTranscriptRecorder(this, _conversation); _transcriptRecorders.Add(_conversationTranscriptRecorder); _conversationToCallTranscriptMapping.Add(_conversationTranscriptRecorder, new List <MediaTranscriptRecorder>()); // TODO: Handle case where we're already joined into a different meeting for this conv? ConferenceTranscriptRecorder conferenceTranscriptRecorder = new ConferenceTranscriptRecorder(this, _conversation); _transcriptRecorders.Add(conferenceTranscriptRecorder); _conversationToCallTranscriptMapping[_conversationTranscriptRecorder].Add(conferenceTranscriptRecorder); conferenceTranscriptRecorder.ConferenceInviteAccepted(result); } else { NonBlockingConsole.WriteLine("Warn: Already have a Conference/active conversation"); // Treat this as a sub conversation? /* * subConvRecorder = new ConversationTranscriptRecorder(this, subConversation, true); * _transcriptRecorders.Add(subConvRecorder); * _conversationToCallTranscriptMapping.Add(subConvRecorder, new List<MediaTranscriptRecorder>()); * _conversationToCallTranscriptMapping[subConvRecorder].Add(addingTranscriptRecorder); */ } } catch (Exception e) { NonBlockingConsole.WriteLine("Error: Exception occurred during conference invite acceptance: " + e.ToString()); } }
internal void OnSubConversationAdded(Conversation subConversation, MediaTranscriptRecorder addingTranscriptRecorder) { // Start conversation recorder on sub conversation ConversationTranscriptRecorder subConvRecorder = null; foreach (ConversationTranscriptRecorder c in _conversationToCallTranscriptMapping.Keys) { if (c.Conversation.Equals(subConversation)) { subConvRecorder = c; break; } } if (subConvRecorder == null) { subConvRecorder = new ConversationTranscriptRecorder(this, subConversation, true); _transcriptRecorders.Add(subConvRecorder); _conversationToCallTranscriptMapping.Add(subConvRecorder, new List <MediaTranscriptRecorder>()); _conversationToCallTranscriptMapping[subConvRecorder].Add(addingTranscriptRecorder); } }
public TranscriptRecorderSession(CallReceivedEventArgs <InstantMessagingCall> e, CancellationTokenSource cts = null) { _sessionId = Constants.NextGuid(); _transcriptRecorders = new List <MediaTranscriptRecorder>(); _conversationToCallTranscriptMapping = new Dictionary <ConversationTranscriptRecorder, List <MediaTranscriptRecorder> >(); _messages = new List <Message>(); _state = TranscriptRecorderState.Active; _conversation = e.Call.Conversation; _conversationTranscriptRecorder = new ConversationTranscriptRecorder(this, _conversation); _transcriptRecorders.Add(_conversationTranscriptRecorder); _conversationToCallTranscriptMapping.Add(_conversationTranscriptRecorder, new List <MediaTranscriptRecorder>()); ConversationParticipant caller = e.RemoteParticipant; // Log IM conversation started Message m = new Message("InstantMessaging Conversation/Conference Started.", caller.DisplayName, caller.UserAtHost, caller.Uri, DateTime.Now, _conversation.Id, (_conversation.ConferenceSession == null) ? "null" : _conversation.ConferenceSession.ConferenceUri, MessageType.ConferenceInfo, MessageDirection.Outgoing); this.OnMessageReceived(m); AddIMIncomingCall(e); }