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 } }); }); }
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(); }); }
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); }
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); } }); }
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 } }); }); }
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; } }; }); }
public void OnDisconnect(Proxy callback) { ExecuteAction.OnConversationEnd(client, conversation => callback(null)); }