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 { } }
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 { } }