示例#1
0
        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?");
            }
        }
示例#2
0
        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.
                    }
                }
            }
        }
示例#3
0
        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());
                    }
                }
            }
        }
示例#4
0
        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());
                    }
                }
            }
        }
示例#5
0
        /// <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
            {
            }
        }
示例#8
0
        /// <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
            {
            }
        }
示例#9
0
        //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);
            }
        }