Exemple #1
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            taskInstance.Canceled += Canceled;

            var backend = Runtime.Instance;

            if (backend != null)
            {
                backend.OnBackgroundTaskRunning(taskInstance);
            }

            try
            {
                IControlChannelTriggerEventDetails channelEventArgs = (IControlChannelTriggerEventDetails)taskInstance.TriggerDetails;
                ControlChannelTrigger channel = channelEventArgs.ControlChannelTrigger;
                channel.FlushTransport();
            }
            catch
            { }
        }
Exemple #2
0
        public async void OnBackgroundTaskRunning(IBackgroundTaskInstance instance)
        {
            ControlChannelTrigger channelTrigger = null;

            try
            {
                // Get channel trigger
                var channelEventArgs = (IControlChannelTriggerEventDetails)instance.TriggerDetails;
                if (channelEventArgs != null)
                {
                    channelTrigger = channelEventArgs.ControlChannelTrigger;
                }

                // Push notification
                if (instance.Task.Name.StartsWith("PN"))
                {
                    var serverId = instance.Task.Name.Substring(2);

                    if (_connections != null)
                    {
                        _connections.WaitProcessing(serverId);
                    }
                }
                // Keep alive
                else if (instance.Task.Name.StartsWith("KA"))
                {
                    var serverId = instance.Task.Name.Substring(2);

                    if (_connections != null)
                    {
                        _connections.CheckKeepAlive(serverId, channelTrigger);
                    }
                }
                // Everything else
                else
                {
                    switch (instance.Task.Name)
                    {
                    case "ControlChannelReset":
                        await Task.Delay(_eventDelayMS);

                        PushEvent(WindowsType.ControlChannelReset);
                        _connections.Update();
                        break;

                    case "InternetAvailable":
                        await Task.Delay(_eventDelayMS);

                        PushEvent(WindowsType.InternetAvailable);
                        _connections.Update();
                        break;

                    case "InternetNotAvailable":
                        await Task.Delay(_eventDelayMS);

                        PushEvent(WindowsType.InternetNotAvailable);
                        _connections.Update();
                        break;

                    case "ServicingComplete":
                        PushEvent(WindowsType.ServicingComplete);
                        break;

                    case "SessionConnected":
                        await Task.Delay(_eventDelayMS);

                        PushEvent(WindowsType.SessionConnected);
                        _connections.Update();
                        break;

                    case "UserAway":
                        PushEvent(WindowsType.UserAway);
                        break;

                    case "UserPresent":
                        PushEvent(WindowsType.UserPresent);
                        break;

                    case "LockScreenApplicationAdded":
                        PushEvent(WindowsType.LockScreenApplicationAdded);
                        OnBackgroundStatusChanged();
                        break;

                    case "LockScreenApplicationRemoved":
                        PushEvent(WindowsType.LockScreenApplicationRemoved);
                        OnBackgroundStatusChanged();
                        break;

                    case "TimeZoneChange":
                        PushEvent(WindowsType.TimeZoneChange);
                        break;
                    }
                }
            }
            catch {}

            //if (defferal != null)
            //    defferal.Complete();

            try
            {
                if (channelTrigger != null)
                {
                    channelTrigger.FlushTransport();
                }
            }
            catch { }
        }