示例#1
0
        public void OnIncoming(Proxy callback)
        {
            ExecuteAction.InState <AVModality>(client, ModalityTypes.AudioVideo, ModalityState.Notified, (conversation, modality) =>
            {
                var inviter = (Contact)conversation.Properties[ConversationProperty.Inviter];

#pragma warning disable 1998
                Proxy AcceptCall = Bindings.CreateAction((dynamic kwargs) =>
                {
                    modality.Accept();
                    if (kwargs.fullscreen)
                    {
                        CallWindow.ShowFullscreen(automation, conversation, kwargs.display);
                    }
                });

                Proxy RejectCall = Bindings.CreateAction((dynamic kwargs) => modality.Reject(ModalityDisconnectReason.Decline));
#pragma warning restore 1998

                callback(new
                {
                    inviter = new UserDetails(inviter),
                    actions = new
                    {
                        accept = AcceptCall,
                        reject = RejectCall
                    }
                });
            });
        }
示例#2
0
        private AppController(LyncClient client, Automation automation)
        {
            this.client     = client;
            this.automation = automation;

            // Always start video on AV modality connect
            ExecuteAction.InState <AVModality>(client, ModalityTypes.AudioVideo, ModalityState.Connected, (conversation, modality) =>
            {
                CallMedia.StartVideo(modality);
            });

            // Always end the conversation (and close the window) on AV modality disconnect
            ExecuteAction.InState <AVModality>(client, ModalityTypes.AudioVideo, ModalityState.Disconnected, (conversation, modality) =>
            {
                conversation.End();
            });
        }
示例#3
0
        public void JoinMeeting(string url, bool fullscreen = true, int display = 0)
        {
            automation.BeginStartConversation(
                url,
                0,
                ar =>
            {
                ConversationWindow window = automation.EndStartConversation(ar);

                if (fullscreen)
                {
                    var av = window.Conversation.Modalities[ModalityTypes.AudioVideo];
                    ExecuteAction.InState(av, ModalityState.Connected, (modality) =>
                    {
                        CallWindow.ShowFullscreen(automation, modality.Conversation, display);
                    });
                }
            },
                null);
        }
示例#4
0
        public static void StartVideo(AVModality av)
        {
            ExecuteAction.InState(av, ModalityState.Connected, modality =>
            {
                var video = modality.VideoChannel;

                Predicate <Channel> active = channel =>
                                             channel.State == ChannelState.Connecting ||
                                             channel.State == ChannelState.Send ||
                                             channel.State == ChannelState.SendReceive;

                if (!active(video))
                {
                    while (!video.CanInvoke(ChannelAction.Start))
                    {
                    }
                    StartMediaChannel(video);
                }
            });
        }
示例#5
0
        public void OnConnect(Proxy callback)
        {
            ExecuteAction.InState <AVModality>(client, ModalityTypes.AudioVideo, ModalityState.Connected, (conversation, modality) =>
            {
                var participants = conversation.Participants.Where(p => !p.IsSelf).Select(p => new UserDetails(p.Contact));

#pragma warning disable 1998
                Proxy Fullscreen = Bindings.CreateAction((dynamic kwargs) => CallWindow.ShowFullscreen(automation, conversation, kwargs.display));

                Proxy Show = Bindings.CreateAction((dynamic kwargs) => CallWindow.Show(automation, conversation));

                Proxy Hide = Bindings.CreateAction((dynamic kwargs) => CallWindow.Hide(automation, conversation));

                Proxy Mute = Bindings.CreateAction((dynamic kwargs) => SetMute(conversation, kwargs.state));

                Proxy StartVideo = Bindings.CreateAction((dynamic kwargs) => this.StartVideo(conversation));

                Proxy StopVideo = Bindings.CreateAction((dynamic kwargs) => this.StopVideo(conversation));

                Proxy End = Bindings.CreateAction((dynamic kwargs) => EndConversation(conversation));
#pragma warning restore 1998

                callback(new
                {
                    participants = participants,
                    actions      = new
                    {
                        fullscreen = Fullscreen,
                        show       = Show,
                        hide       = Hide,
                        mute       = Mute,
                        startVideo = StartVideo,
                        stopVideo  = StopVideo,
                        end        = End
                    }
                });
            });
        }