예제 #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
                    }
                });
            });
        }
예제 #6
0
        public void OnMuteChange(Proxy callback)
        {
            ExecuteAction.OnAllConversations(client, conversation =>
            {
                var self = conversation.SelfParticipant;
                var av   = (AVModality)conversation.Modalities[ModalityTypes.AudioVideo];

                // The client raises multiple property changed events during call setup. Squash these so we one raise events on change.
                var previousState = (bool)av.Properties[ModalityProperty.AVModalityAudioCaptureMute];

                av.AVModalityPropertyChanged += (o, e) =>
                {
                    if (e.Property == ModalityProperty.AVModalityAudioCaptureMute)
                    {
                        var newState = (bool)e.Value;
                        if (newState != previousState)
                        {
                            callback(newState);
                        }
                        previousState = newState;
                    }
                };
            });
        }
예제 #7
0
 public void OnDisconnect(Proxy callback)
 {
     ExecuteAction.OnConversationEnd(client, conversation => callback(null));
 }