summaryrefslogtreecommitdiff
path: root/pjsip-apps/src/pjsua/winrt/gui/uwp/VoipTasks/AppService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip-apps/src/pjsua/winrt/gui/uwp/VoipTasks/AppService.cs')
-rw-r--r--pjsip-apps/src/pjsua/winrt/gui/uwp/VoipTasks/AppService.cs152
1 files changed, 152 insertions, 0 deletions
diff --git a/pjsip-apps/src/pjsua/winrt/gui/uwp/VoipTasks/AppService.cs b/pjsip-apps/src/pjsua/winrt/gui/uwp/VoipTasks/AppService.cs
new file mode 100644
index 00000000..87607733
--- /dev/null
+++ b/pjsip-apps/src/pjsua/winrt/gui/uwp/VoipTasks/AppService.cs
@@ -0,0 +1,152 @@
+//*********************************************************
+//
+// Copyright (c) Microsoft. All rights reserved.
+// This code is licensed under the MIT License (MIT).
+// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
+// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
+// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
+// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
+//
+//*********************************************************
+using System;
+using VoipTasks.BackgroundOperations;
+using VoipTasks.Helpers;
+using Windows.ApplicationModel.AppService;
+using Windows.ApplicationModel.Background;
+using Windows.ApplicationModel.Calls;
+using Windows.Foundation.Collections;
+using VoipBackEnd;
+
+namespace VoipTasks
+{
+ public sealed class AppService : IBackgroundTask
+ {
+ AppServiceConnection _connection;
+ BackgroundTaskDeferral _deferral;
+
+ public void Run(IBackgroundTaskInstance taskInstance)
+ {
+ AppServiceTriggerDetails triggerDetail = taskInstance.TriggerDetails as AppServiceTriggerDetails;
+ _deferral = taskInstance.GetDeferral();
+
+ // Register for Task Cancel callback
+ taskInstance.Canceled += TaskInstance_Canceled;
+
+ AppServiceConnection connection = triggerDetail.AppServiceConnection;
+ _connection = connection;
+
+ connection.RequestReceived += Connection_RequestReceived;
+ Current.AppConnection = connection;
+ }
+
+ private async void Connection_RequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
+ {
+ var deferral = args.GetDeferral();
+ var response = new ValueSet();
+ bool stop = false;
+ try
+ {
+ var request = args.Request;
+ var message = request.Message;
+ if (message.ContainsKey(BackgroundOperation.NewBackgroundRequest))
+ {
+ switch ((BackgroundRequest)message[BackgroundOperation.NewBackgroundRequest])
+ {
+ case BackgroundRequest.NewOutgoingCall:
+ Current.AppRequest = args.Request;
+ Current.Request = BackgroundRequest.NewOutgoingCall;
+ Current.AppRequestDeferal = deferral;
+ await Current.RequestNewCallAsync(message[NewCallArguments.DstURI.ToString()] as String);
+ break;
+
+ case BackgroundRequest.EndCall:
+ Current.AppRequest = args.Request;
+ Current.Request = BackgroundRequest.EndCall;
+ Current.AppRequestDeferal = deferral;
+ Current.EndCallAsync();
+ break;
+
+ case BackgroundRequest.StartService:
+ Current.AppRequest = args.Request;
+ Current.Request = BackgroundRequest.StartService;
+ Current.AppRequestDeferal = deferral;
+ Current.StartService();
+
+ break;
+ case BackgroundRequest.StopService:
+ Current.AppRequest = args.Request;
+ Current.Request = BackgroundRequest.StopService;
+ Current.AppRequestDeferal = deferral;
+ Current.StopService();
+ break;
+
+ case BackgroundRequest.GetAccountInfo:
+ Current.AppRequest = args.Request;
+ Current.Request = BackgroundRequest.GetAccountInfo;
+ Current.AppRequestDeferal = deferral;
+
+ Current.GetAccountInfo();
+ break;
+
+ case BackgroundRequest.ModifyAccount:
+ Current.AppRequest = args.Request;
+ Current.Request = BackgroundRequest.ModifyAccount;
+ Current.AppRequestDeferal = deferral;
+ Current.ModifyAccount(message[ModifyAccountArguments.id.ToString()] as String,
+ message[ModifyAccountArguments.registrar.ToString()] as String,
+ message[ModifyAccountArguments.proxy.ToString()] as String,
+ message[ModifyAccountArguments.username.ToString()] as String,
+ message[ModifyAccountArguments.password.ToString()] as String);
+
+ break;
+
+ default:
+ stop = true;
+ break;
+ }
+ }
+ }
+ finally
+ {
+
+ if (stop)
+ {
+ _deferral.Complete();
+ }
+ }
+ }
+
+ private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
+ {
+ if (_deferral != null)
+ {
+ _deferral.Complete();
+ }
+ }
+
+ private static void Call_ResumeRequested(VoipPhoneCall sender, CallStateChangeEventArgs args)
+ {
+ sender.NotifyCallActive();
+ }
+
+ private static void Call_RejectRequested(VoipPhoneCall sender, CallRejectEventArgs args)
+ {
+ sender.NotifyCallEnded();
+ }
+
+ private static void Call_HoldRequested(VoipPhoneCall sender, CallStateChangeEventArgs args)
+ {
+ sender.NotifyCallHeld();
+ }
+
+ private static void Call_EndRequested(VoipPhoneCall sender, CallStateChangeEventArgs args)
+ {
+ sender.NotifyCallEnded();
+ }
+
+ private static void Call_AnswerRequested(VoipPhoneCall sender, CallAnswerEventArgs args)
+ {
+ sender.NotifyCallActive();
+ }
+ }
+}