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();
            }
        }
示例#2
0
        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);
            }
        }
示例#5
0
        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);
        }
示例#8
0
        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);
            }
        }
示例#9
0
        private void CreateBgTask()
        {
            IBackgroundTrigger socketTrigger = new SocketActivityTrigger();

            _bgSocketask = BackgroundTaskHelper.Register(BgTaskName, BgEntryPoint, socketTrigger);
        }