void ConversationManager_ConversationAdded(object sender, ConversationManagerEventArgs e) { try { // this sample will only handle one conversation if (_conversation == null) { _conversation = e.Conversation; if (_conversation.Modalities[ModalityTypes.ContentSharing].State == ModalityState.Notified) { // Conversation orignated with remote SIP user. Lets set the modality. // Accept will happen when user clicks Accept button in UI. _contentModality = (ContentSharingModality)_conversation.Modalities[ModalityTypes.ContentSharing]; // Following event will help maintain the Content Bin _contentModality.ContentAdded += new EventHandler <ContentCollectionChangedEventArgs>(_contentModality_ContentAdded); } else { // lets add a participant if (_conversation.CanInvoke(ConversationAction.AddParticipant)) { _conversation.ParticipantAdded += new EventHandler <ParticipantCollectionChangedEventArgs>(Conversation_ParticipantAdded); _conversation.AddParticipant(_lyncClient.ContactManager.GetContactByUri(targetUri)); // above call will result in ParticipantAdded event. // In that event handler, lets Connect the ContentModality. } } } } catch (ArgumentException) { dispatcher.BeginInvoke(new Action <string>(Log), "Argument Exception: Is the SIP address a valid URI?"); } }
void ConversationManager_ConversationAdded(object sender, ConversationManagerEventArgs e) { // this sample will only handle one conversation if (_conversation == null) { _conversation = e.Conversation; if (_conversation.Modalities[ModalityTypes.ContentSharing].State == ModalityState.Notified) { // Conversation orignated with remote SIP user. Lets set the modality. // Accept will happen when user clicks Accept button in UI. _contentModality = (ContentSharingModality)_conversation.Modalities[ModalityTypes.ContentSharing]; } else { // lets add a participant if (_conversation.CanInvoke(ConversationAction.AddParticipant)) { _conversation.ParticipantAdded += new EventHandler <ParticipantCollectionChangedEventArgs>(Conversation_ParticipantAdded); _conversation.AddParticipant(_lyncClient.ContactManager.GetContactByUri(targetUri)); // above call will result in ParticipantAdded event. // In that event handler, lets Connect the ContentModality. } } } }
void Conversation_ParticipantAdded(object sender, ParticipantCollectionChangedEventArgs e) { // if this is the remote participant then lets connect the ContentSharing modality. if (e.Participant.IsSelf != true) { _contentModality = (ContentSharingModality)((Conversation)sender).Modalities[ModalityTypes.ContentSharing]; if (_contentModality.CanInvoke(ModalityAction.Connect)) { try { _contentModality.BeginConnect(HandleCallBacks, "Connect"); } catch (Exception ec) { dispatcher.BeginInvoke(new Action <string>(Log), ec.ToString()); } } } }
void Conversation_ParticipantAdded(object sender, ParticipantCollectionChangedEventArgs e) { // if this is the remote participant then lets connect the ContentSharing modality. if (e.Participant.IsSelf != true) { _contentModality = (ContentSharingModality)((Conversation)sender).Modalities[ModalityTypes.ContentSharing]; // Following events will help maintain the Content Bin _contentModality.ContentAdded += new EventHandler <ContentCollectionChangedEventArgs>(_contentModality_ContentAdded); if (_contentModality.CanInvoke(ModalityAction.Connect)) { try { // This will send a notification to remote party. _contentModality.BeginConnect(HandleCallBacks, "Connect"); } catch (Exception ec) { dispatcher.BeginInvoke(new Action <string>(Log), ec.ToString()); } } } }
/// <summary> /// 共享电子白板 /// </summary> public static void ShareWhiteboard(ConversationWindow conversationWindow, string selfName, Action callBack) { try { if (conversationWindow != null) { DispatcherTimer timer1 = null; TimerJob.StartRun(new Action(() => { if (conversationWindow.Conversation == null) { timer1.Stop(); return; } //获取电子白板启动模型实例 ContentSharingModality contentShareingModality = (ContentSharingModality)conversationWindow.Conversation.Modalities[ModalityTypes.ContentSharing]; DispatcherTimer timer2 = null; //查看是否可以共享白板 var canShareWhiteboard = contentShareingModality.CanInvoke(ModalityAction.CreateShareableWhiteboardContent); if (canShareWhiteboard) { if (contentShareingModality.CanInvoke(ModalityAction.Connect)) { contentShareingModality.BeginConnect(null, null); } //获取共享白板的名称 string whiteShareName = GetWhiteShareName(selfName, whiteBoardShareName); if (contentShareingModality.CanInvoke(ModalityAction.CreateShareableWhiteboardContent)) { //创建一个默认的电子白板 IAsyncResult result = contentShareingModality.BeginCreateContent(ShareableContentType.Whiteboard, whiteShareName, null, null); //结束提交 ShareableContent whiteBoardContent = contentShareingModality.EndCreateContent(result); TimerJob.StartRun(new Action(() => { int reason; //【在此可监控异常】 if (whiteBoardContent.CanInvoke(ShareableContentAction.Upload, out reason)) { //电子白板上传 whiteBoardContent.Upload(); } if (whiteBoardContent.State == ShareableContentState.Online) { timer2.Stop(); //当前呈现(电子白板) whiteBoardContent.Present(); if (callBack != null) { callBack(); } } }), 10, out timer2); timer1.Stop(); } } }), 400, out timer1); } else { MessageBox.Show("使用电子白板共享之前先选择一个会话", "操作提示", MessageBoxButton.OK, MessageBoxImage.Information); } } catch (Exception ex) { LogManage.WriteLog(typeof(LyncHelper), ex); } }
/// <summary> /// 设置会话窗体 /// </summary> protected static void SettingConversationWindowEvent(ConversationWindow conversationWindow) { try { if (conversationWindow != null) { if (conversationWindow.Conversation != null) { Conversation conversation = conversationWindow.Conversation; IDictionary <ModalityTypes, Modality> dicModality = conversation.Modalities; //会话模型 ContentSharingModality contentSharingModality = ((ContentSharingModality)dicModality[ModalityTypes.ContentSharing]); Modality ContentModal = (dicModality[ModalityTypes.ContentSharing]); ApplicationSharingModality applicationSharingModality = ((ApplicationSharingModality)(dicModality[ModalityTypes.ApplicationSharing])); Modality ApplicationModal = (dicModality[ModalityTypes.ApplicationSharing]); AVModality AudioVideoModal = ((AVModality)dicModality[ModalityTypes.AudioVideo]); //联系人添加事件 conversation.ParticipantAdded -= Conversation_ParticipantAdded; //联系人添加事件 conversation.ParticipantAdded += Conversation_ParticipantAdded; //联系人移除事件 conversation.ParticipantRemoved -= Conversation_ParticipantRemoved; //联系人移除事件 conversation.ParticipantRemoved += Conversation_ParticipantRemoved; if (contentSharingModality != null) { //电子白板、ppt共享内容添加事件 contentSharingModality.ContentAdded -= ConversationCard_ContentAdded; //电子白板、ppt共享内容添加事件 contentSharingModality.ContentAdded += ConversationCard_ContentAdded; //电子白板、ppt共享内容移除事件 contentSharingModality.ContentRemoved -= ConversationCard_ContentRemoved; //电子白板、ppt共享内容移除事件 contentSharingModality.ContentRemoved += ConversationCard_ContentRemoved; } if (ContentModal != null) { //电子白板、ppt共享 ContentModal.ActionAvailabilityChanged -= ConversationCard_ActionAvailabilityChanged; //电子白板、ppt共享 ContentModal.ActionAvailabilityChanged += ConversationCard_ActionAvailabilityChanged; } if (ApplicationModal != null) { //应用程序共享 ApplicationModal.ActionAvailabilityChanged -= ConversationCard_ActionAvailabilityChanged; //应用程序共享 ApplicationModal.ActionAvailabilityChanged += ConversationCard_ActionAvailabilityChanged; if (applicationSharingModality != null) { applicationSharingModality.LocalSharedResourcesChanged -= applicationSharingModality_LocalSharedResourcesChanged; applicationSharingModality.LocalSharedResourcesChanged += applicationSharingModality_LocalSharedResourcesChanged; applicationSharingModality.ControllerChanged -= applicationSharingModality_ControllerChanged; applicationSharingModality.ControllerChanged += applicationSharingModality_ControllerChanged; applicationSharingModality.ParticipationStateChanged -= applicationSharingModality_ParticipationStateChanged; applicationSharingModality.ParticipationStateChanged += applicationSharingModality_ParticipationStateChanged; } } //音视频 AudioVideoModal.ActionAvailabilityChanged -= ConversationCard_ActionAvailabilityChanged; //音视频 AudioVideoModal.ActionAvailabilityChanged += ConversationCard_ActionAvailabilityChanged; //实时获取会话窗体信息 conversationWindow.InformationChanged -= ConversationWindow_InformationChanged; //实时获取会话窗体信息 conversationWindow.InformationChanged += ConversationWindow_InformationChanged; } } } catch (Exception ex) { LogManage.WriteLog(typeof(LyncHelper), ex); } }
/// <summary> /// 通道响应(accept) /// </summary> /// <param name="conversationWindow">会话窗体</param> private static void Modality_Response_Accept(ConversationWindow conversationWindow) { try { var modalities = conversationWindow.Conversation.Modalities; //视频通道 VideoChannel videoChannel = null; //音频通道 AudioChannel audioChannel = null; AVModality avModality = ((AVModality)modalities[ModalityTypes.AudioVideo]); if (avModality != null) { //视频通道 videoChannel = avModality.VideoChannel; //音频通道 audioChannel = avModality.AudioChannel; } //内容共享 ContentSharingModality shareContent = (ContentSharingModality)modalities[ModalityTypes.ContentSharing]; //程序共享 ApplicationSharingModality applicationSharing = (ApplicationSharingModality)modalities[ModalityTypes.ApplicationSharing]; //视频 if (videoChannel != null && videoChannel.State == ChannelState.Receive) { Application.Current.Dispatcher.BeginInvoke(new Action(() => { try { if (avModality.CanInvoke(ModalityAction.Accept)) { //接受 avModality.Accept(); if (videoChannel.CanInvoke(ChannelAction.Start)) { videoChannel.BeginStart(null, null); } } } catch (Exception ex) { LogManage.WriteLog(typeof(LyncHelper), ex); }; })); } //语音 else if (audioChannel != null && audioChannel.State == ChannelState.Receive) { if (avModality.CanInvoke(ModalityAction.Accept)) { //接受 avModality.Accept(); } } //共享ppt、电子白板 else if (shareContent != null && shareContent.State == ModalityState.Notified) { shareContent.Accept(); } //共享应用程序 else if (applicationSharing != null && applicationSharing.State == ModalityState.Notified) { applicationSharing.Accept(); if (AddContent_Type_CallBack != null) { AddContent_Type_CallBack(SharingType.Application); } } } catch (Exception ex) { LogManage.WriteLog(typeof(LyncHelper), ex); } finally { } }
/// <summary> /// 电子白板、ppt共享【音视频、应用程序共享】 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected static void ConversationCard_ActionAvailabilityChanged(object sender, ModalityActionAvailabilityChangedEventArgs e) { try { if (MainConversationInCallBack != null) { MainConversationInCallBack(new Action <ConversationWindow>((conversationWindow) => { if (conversationWindow != null) { switch (e.Action) { case ModalityAction.Accept: var modalities = conversationWindow.Conversation.Modalities; //视频通道 VideoChannel videoChannel = ((AVModality)modalities[ModalityTypes.AudioVideo]).VideoChannel; //音频通道 AudioChannel audioChannel = ((AVModality)modalities[ModalityTypes.AudioVideo]).AudioChannel; //内容共享 ContentSharingModality shareContent = (ContentSharingModality)modalities[ModalityTypes.ContentSharing]; //程序共享 ApplicationSharingModality applicationSharing = (ApplicationSharingModality)modalities[ModalityTypes.ApplicationSharing]; //视频 if (videoChannel != null && videoChannel.State == ChannelState.Notified) { App.Current.Dispatcher.BeginInvoke(new Action(() => { try { //接受 ((AVModality)modalities[ModalityTypes.AudioVideo]).Accept(); } catch (Exception ex) { LogManage.WriteLog(typeof(LyncHelper), ex); }; })); } //语音 else if (audioChannel != null && audioChannel.State == ChannelState.Notified) { ((AVModality)modalities[ModalityTypes.AudioVideo]).Accept(); } //共享ppt、电子白板 else if (shareContent != null && shareContent.State == ModalityState.Notified) { shareContent.Accept(); } //共享应用程序 else if (applicationSharing != null && applicationSharing.State == ModalityState.Notified) { applicationSharing.Accept(); } break; default: break; } } })); } } catch (Exception ex) { LogManage.WriteLog(typeof(LyncHelper), ex); } finally { } }
//public static ApplicationSharingModality ApplicationSharingModality = null; /// <summary> /// 设置会话窗体的事件 /// </summary> protected static void SettingConversationWindowEvent(ConversationWindow conversationWindow) { try { if (conversationWindow != null) { //监控会话窗体的行为(启动共享白板,ppt,音视频) //conversationWindow.ActionAvailabilityChanged += ConversationWindow_ActionAvailabilityChanged; if (conversationWindow.Conversation != null) { //会话模型 ContentSharingModality contentSharingModality = ((ContentSharingModality)(conversationWindow.Conversation.Modalities[ModalityTypes.ContentSharing])); var ContentModal = (conversationWindow.Conversation.Modalities[ModalityTypes.ContentSharing]); ApplicationSharingModality applicationSharingModality = ((ApplicationSharingModality)(conversationWindow.Conversation.Modalities[ModalityTypes.ApplicationSharing])); var ApplicationModal = (conversationWindow.Conversation.Modalities[ModalityTypes.ApplicationSharing]); var AudioVideoModal = ((AVModality)conversationWindow.Conversation.Modalities[ModalityTypes.AudioVideo]); if (contentSharingModality != null) { //电子白板、ppt共享内容添加事件 contentSharingModality.ContentAdded += ConversationCard_ContentAdded; //电子白板、ppt共享内容移除事件 contentSharingModality.ContentRemoved += ConversationCard_ContentRemoved; } if (ContentModal != null) { //电子白板、ppt共享 ContentModal.ActionAvailabilityChanged += ConversationCard_ActionAvailabilityChanged; } if (ApplicationModal != null) { //应用程序共享 ApplicationModal.ActionAvailabilityChanged += ConversationCard_ActionAvailabilityChanged; //ApplicationModal.ModalityStateChanged += ApplicationModal_ModalityStateChanged; if (applicationSharingModality != null) { //applicationSharingModality.View.DisplayMode = ApplicationSharingViewDisplayMode.FitToParent; applicationSharingModality.LocalSharedResourcesChanged += applicationSharingModality_LocalSharedResourcesChanged; //applicationSharingModality.SharerChanged += applicationSharingModality_SharerChanged; applicationSharingModality.ControllerChanged += applicationSharingModality_ControllerChanged; //applicationSharingModality.ControlRequestReceived += applicationSharingModality_ControlRequestReceived; //applicationSharingModality.ApplicationSharingModalityPropertyChanged += applicationSharingModality_ApplicationSharingModalityPropertyChanged; //applicationSharingModality.ModalityStateChanged += applicationSharingModality_ModalityStateChanged; applicationSharingModality.ParticipationStateChanged += applicationSharingModality_ParticipationStateChanged; } } //音视频 AudioVideoModal.ActionAvailabilityChanged += ConversationCard_ActionAvailabilityChanged; //实时获取会话窗体信息 conversationWindow.InformationChanged += ConversationWindow_InformationChanged; } } } catch (Exception ex) { LogManage.WriteLog(typeof(LyncHelper), ex); } }