public MainPage() { this.InitializeComponent(); UpdateStatusMessage("Looking for devices..."); StartListener(); _ = BackgroundExecutionManager.RequestAccessAsync(); // prep the background tasks foreach (var current in BackgroundTaskRegistration.AllTasks) { if (current.Value.Name == "SocketActivityBackgroundTask") { BkTask = current.Value; break; } } // If there is no task allready created, create a new one if (BkTask == null) { var socketTaskBuilder = new BackgroundTaskBuilder(); socketTaskBuilder.Name = "SocketActivityBackgroundTask"; // moved to inproc so no task entry point //socketTaskBuilder.TaskEntryPoint = "SocketActivityBackgroundTask.SocketActivityTask"; var trigger = new SocketActivityTrigger(); socketTaskBuilder.SetTrigger(trigger); BkTask = socketTaskBuilder.Register(); } }
public override async void Connect() { try { foreach (var current in BackgroundTaskRegistration.AllTasks) { if (current.Value.Name == BackgroundTaskName) { task = current.Value; break; } } if (task == null) { var socketTaskBuilder = new BackgroundTaskBuilder(); socketTaskBuilder.Name = "WinIRCBackgroundTask." + server.name; var trigger = new SocketActivityTrigger(); socketTaskBuilder.SetTrigger(trigger); task = socketTaskBuilder.Register(); } } catch { // empty catch } streamSocket = new StreamSocket(); streamSocket.Control.KeepAlive = true; dataStreamLineReader = new SafeLineReader(); try { if (task != null) { streamSocket.EnableTransferOwnership(task.TaskId, SocketActivityConnectedStandbyAction.Wake); } var protectionLevel = server.ssl ? SocketProtectionLevel.Tls12 : SocketProtectionLevel.PlainSocket; Debug.WriteLine("Attempting to connect..."); await streamSocket.ConnectAsync(new Windows.Networking.HostName(server.hostname), server.port.ToString(), protectionLevel); Debug.WriteLine("Connected!"); reader = new DataReader(streamSocket.InputStream); writer = new DataWriter(streamSocket.OutputStream); IsConnected = true; ConnectionHandler(); } catch (Exception e) { Debug.WriteLine(e.Message); Debug.WriteLine(e.StackTrace); return; } }
private async void buttonRegister_Click(object sender, RoutedEventArgs e) { try { //タスクがすでに登録されている場合は解除する foreach (var t in BackgroundTaskRegistration.AllTasks) { t.Value.Unregister(true); } //バックグラウンドタスクを登録する //NameはなんでもいいけどTaskEntryPointはバックグランドタスクの {名前空間}.{クラス名} にしないとだめ var socketTaskBuilder = new BackgroundTaskBuilder(); socketTaskBuilder.Name = "MySocketBackgroundTask"; socketTaskBuilder.TaskEntryPoint = "BackgroundSocketComponent.SocketListenTask"; //バックグラウンドタスクでSocketを待ち受けるためのトリガー //これのおかげでバックグラウンドタスクがSocketに反応できる var trigger = new SocketActivityTrigger(); socketTaskBuilder.SetTrigger(trigger); var task = socketTaskBuilder.Register(); //ソケットリスナー var socketListener = new StreamSocketListener(); var hostname = NetworkInformation.GetHostNames().Where(q => q.Type == HostNameType.Ipv4).First(); var port = textPort.Text; //バックグラウンドタスクとポート番号を合わせるためにローカル設定に入れておく ApplicationData.Current.LocalSettings.Values["SocketPort"] = port; //バックグラウンドタスクとソケットIDを合わせるためにローカル設定に入れておく ApplicationData.Current.LocalSettings.Values["SocketId"] = socketId; //バックグラウンドタスクにソケットリスナーの権限を渡すことを許可 //第2引数はDoNotWakeにしないとBind時にエラーになる socketListener.EnableTransferOwnership(task.TaskId, SocketActivityConnectedStandbyAction.DoNotWake); //ホスト名とポート番号でバインドする await socketListener.BindEndpointAsync(hostname, port); //ここから下はSuspendingイベントに入れてもいい //ソケットリスナーをバックグランドタスクに渡すためにIOを止める await socketListener.CancelIOAsync(); //バックグランドタスクに権限を渡す socketListener.TransferOwnership(socketId); var dialog = new MessageDialog("Complete to register backgroundtask and to start listen socket!"); await dialog.ShowAsync(); }catch (Exception ex) { var dialog = new MessageDialog(ex.Message); await dialog.ShowAsync(); } }
protected override void OnNavigatedTo(NavigationEventArgs e) { rootPage = MainPage.Current; try { foreach (var current in BackgroundTaskRegistration.AllTasks) { if (current.Value.Name == "SocketActivityBackgroundTask") { task = current.Value; break; } } // If there is no task allready created, create a new one if (task == null) { var socketTaskBuilder = new BackgroundTaskBuilder(); socketTaskBuilder.Name = "SocketActivityBackgroundTask"; socketTaskBuilder.TaskEntryPoint = "SocketActivityBackgroundTask.SocketActivityTask"; var trigger = new SocketActivityTrigger(); socketTaskBuilder.SetTrigger(trigger); task = socketTaskBuilder.Register(); } SocketActivityInformation socketInformation; if (SocketActivityInformation.AllSockets.TryGetValue(socketId, out socketInformation)) { // Application can take ownership of the socket and make any socket operation // For sample it is just transfering it back. socket = socketInformation.StreamSocket; socket.TransferOwnership(socketId); socket = null; rootPage.NotifyUser("Connected. You may close the application", NotifyType.StatusMessage); TargetServerTextBox.IsEnabled = false; ConnectButton.IsEnabled = false; } } catch (Exception exception) { rootPage.NotifyUser(exception.Message, NotifyType.ErrorMessage); } }
protected override async void OnNavigatedTo(NavigationEventArgs e) { var registration = BackgroundTaskRegistration.AllTasks.FirstOrDefault(x => x.Value.Name == TaskName); if (registration.Value == null) { var socketTaskBuilder = new BackgroundTaskBuilder(); socketTaskBuilder.Name = TaskName; socketTaskBuilder.TaskEntryPoint = "SocketTask.ReceiveMessagesTask"; var trigger = new SocketActivityTrigger(); socketTaskBuilder.SetTrigger(trigger); var status = await BackgroundExecutionManager.RequestAccessAsync(); if (status != BackgroundAccessStatus.Denied) { task = socketTaskBuilder.Register(); } } else { task = registration.Value; } }
public static Guid Register() { foreach (var current in BackgroundTaskRegistration.AllTasks) { if (current.Value.Name == nameof(MulticastServerBackgroundTask)) { return(current.Value.TaskId); } } BackgroundTaskBuilder socketTaskBuilder = new BackgroundTaskBuilder { Name = nameof(MulticastServerBackgroundTask), TaskEntryPoint = typeof(MulticastServerBackgroundTask).FullName }; SocketActivityTrigger trigger = new SocketActivityTrigger(); socketTaskBuilder.SetTrigger(trigger); var task = socketTaskBuilder.Register(); return(task.TaskId); }
public override async void Connect() { var autoReconnect = Config.GetBoolean(Config.AutoReconnect, true); if (Server == null) { return; } try { foreach (var current in BackgroundTaskRegistration.AllTasks) { if (current.Value.Name == BackgroundTaskName) { task = current.Value; break; } } if (task == null) { var socketTaskBuilder = new BackgroundTaskBuilder(); socketTaskBuilder.Name = "WinIRCBackgroundTask." + Server.Name; var trigger = new SocketActivityTrigger(); socketTaskBuilder.SetTrigger(trigger); //task = socketTaskBuilder.Register(); } } catch (Exception e) { Debug.WriteLine(e); } IsAuthed = false; ReadOrWriteFailed = false; if (!ConnCheck.HasInternetAccess) { var msg = autoReconnect ? "We'll try to connect once a connection is available." : "Please try again once your connection is restored"; var error = IrcUWPBase.CreateBasicToast("No connection detected.", msg); error.ExpirationTime = DateTime.Now.AddDays(2); ToastNotificationManager.CreateToastNotifier().Show(error); if (!autoReconnect) { DisconnectAsync(attemptReconnect: autoReconnect); } return; } streamSocket = new StreamSocket(); streamSocket.Control.KeepAlive = true; if (Config.GetBoolean(Config.IgnoreSSL)) { streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted); streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired); } if (task != null) { streamSocket.EnableTransferOwnership(task.TaskId, SocketActivityConnectedStandbyAction.Wake); } dataStreamLineReader = new SafeLineReader(); try { var protectionLevel = Server.Ssl ? SocketProtectionLevel.Tls12 : SocketProtectionLevel.PlainSocket; Debug.WriteLine("Attempting to connect..."); await streamSocket.ConnectAsync(new Windows.Networking.HostName(Server.Hostname), Server.Port.ToString(), protectionLevel); Debug.WriteLine("Connected!"); reader = new DataReader(streamSocket.InputStream); writer = new DataWriter(streamSocket.OutputStream); IsConnected = true; IsConnecting = false; ConnectionHandler(); } catch (Exception e) { var msg = autoReconnect ? "Attempting to reconnect..." : "Please try again later."; AddError("Error whilst connecting: " + e.Message + "\n" + msg); AddError(e.StackTrace); AddError("If this error keeps occuring, ensure your connection settings are correct."); DisconnectAsync(attemptReconnect: autoReconnect); Debug.WriteLine(e.Message); Debug.WriteLine(e.StackTrace); } }
private void CreateBgTask() { IBackgroundTrigger socketTrigger = new SocketActivityTrigger(); _bgSocketask = BackgroundTaskHelper.Register(BgTaskName, BgEntryPoint, socketTrigger); }