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); } }
internal void OnConversationTerminated(Conversation conversation, ConversationTranscriptRecorder terminatedRecorder) { _transcriptRecorders.Remove(terminatedRecorder); if (!terminatedRecorder.IsSubConversation) { _waitForConversationTerminated.Set(); this.Shutdown(); } }
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); }