Exemple #1
0
 public AppServiceClientConnection(
     string appServiceName,
     string appIdentifier,
     RemoteSystemConnectionRequest request) :
     this(appServiceName, appIdentifier, request, GetAppServiceClientConnectionListener(), GetAppServiceResponseListener())
 {
 }
Exemple #2
0
        private async Task <bool> InitializeAppService()
        {
            try
            {
                _appService = new AppServiceConnection()
                {
                    AppServiceName    = "com.adventure",
                    PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName
                };
                RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(RemoteSystem);
                var status = await _appService.OpenRemoteAsync(connectionRequest).AsTask().ConfigureAwait(false);

                if (status == AppServiceConnectionStatus.Success)
                {
                    _appService.RequestReceived += AppService_RequestReceived;
                    _appService.ServiceClosed   += AppService_ServiceClosed;
                }
                else
                {
                    CleanUpAppService();
                }

                return(status == AppServiceConnectionStatus.Success);
            }
            catch (Exception) {}

            return(false);
        }
        private async Task ConnectToRemoteAppServiceAsync()
        {
            RemoteSystem selectedDevice = DeviceListComboBox.SelectedItem as RemoteSystem;
            if (selectedDevice != null)
            {
                // Create a remote system connection request.
                RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(selectedDevice);

                // Set up a new app service connection. The following app service name and package family name
                // are used in this sample to work with AppServices provider SDK sample on a remote system.
                using (AppServiceConnection connection = new AppServiceConnection
                {
                    AppServiceName = "com.microsoft.randomnumbergenerator",
                    PackageFamilyName = "Microsoft.SDKSamples.AppServicesProvider.CS_8wekyb3d8bbwe"
                })
                {
                    UpdateStatus("Opening connection to remote app service...", NotifyType.StatusMessage);
                    AppServiceConnectionStatus status = await connection.OpenRemoteAsync(connectionRequest);

                    if (status == AppServiceConnectionStatus.Success)
                    {
                        UpdateStatus("Successfully connected to remote app service.", NotifyType.StatusMessage);
                        await SendMessageToRemoteAppServiceAsync(connection);
                    }
                    else
                    {
                        UpdateStatus("Attempt to open a remote app service connection failed with error - " + status.ToString(), NotifyType.ErrorMessage);
                    }
                }
            }
            else
            {
                UpdateStatus("Select a device for remote connection.", NotifyType.ErrorMessage);
            }
        }
        public async Task <RomeRemoteLaunchUriStatus> LaunchUri(Uri uri, object remoteSystemOverride)
        {
            RemoteSystem rs = null;

            if (remoteSystemOverride != null)
            {
                rs = remoteSystemOverride as RemoteSystem;
                if (rs == null)
                {
                    throw new InvalidCastException();
                }
            }

            var request         = new RemoteSystemConnectionRequest(rs);
            var launchUriStatus = await RemoteLauncher.LaunchUriAsync(request, uri);

            var result = launchUriStatus.ConvertToRomeRemoteLaunchUriStatus();

            if (result == RomeRemoteLaunchUriStatus.ProtocolUnavailable)
            {
                await LaunchStoreForApp(rs);
            }

            return(result);
        }
Exemple #5
0
        // Summary:
        //     Check if the device is connected, if not send a request to launch the application on the remote device
        public virtual async System.Threading.Tasks.Task <bool> CheckCompanionDeviceConnected(CompanionDevice cd)
        {
            if ((listCompanionDevices.ContainsKey(cd.Id)) && (listRemoteSystems.ContainsKey(cd.Id)))
            {
                if (listCompanionDevices[cd.Id].Status != CompanionDeviceStatus.Connected)
                {
                    RemoteSystemConnectionRequest rscr = new RemoteSystemConnectionRequest(listRemoteSystems[cd.Id]);
                    if (rscr != null)
                    {
                        Uri uri;
                        if (Uri.TryCreate(ApplicationUri, UriKind.Absolute, out uri))
                        {
                            RemoteLaunchUriStatus launchUriStatus = await Windows.System.RemoteLauncher.LaunchUriAsync(rscr, uri);

                            if (launchUriStatus == RemoteLaunchUriStatus.Success)
                            {
                                listCompanionDevices[cd.Id].Status = CompanionDeviceStatus.Connected;
                            }
                        }
                    }
                }
                if (listCompanionDevices[cd.Id].Status == CompanionDeviceStatus.Connected)
                {
                    return(true);
                }
            }
            return(false);
        }
        private async void RemoteActivated(object sender, RoutedEventArgs e)
        {
            var fw = sender as FrameworkElement;

            if (fw == null)
            {
                return;
            }
            var remote = fw.DataContext as RemoteSystem;

            if (remote == null)
            {
                return;
            }


            var res = await RemoteSystem.RequestAccessAsync();

            if (res != RemoteSystemAccessStatus.Allowed)
            {
                return;
            }

            bool isRemoteSystemLaunchUriCapable = await remote.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.LaunchUri);

            bool isRemoteSystemAppServiceCapable = await remote.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.AppService);

            bool isRemoteSystemRemoteSessionCapable = await remote.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.RemoteSession);

            bool isRemoteSystemSpatialEntityCapable = await remote.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.SpatialEntity);

            var rscr   = new RemoteSystemConnectionRequest(remote);
            var uri    = new Uri("http://www.google.co.uk");
            var status = await RemoteLauncher.LaunchUriAsync(rscr, uri);
        }
Exemple #7
0
        public async static Task <AdventureRemoteSystem> CreateAdventureRemoteSystem(RemoteSystem system)
        {
            if (system == null)
            {
                return(null);
            }

            var appService = new AppServiceConnection()
            {
                AppServiceName    = "com.adventure",
                PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName
            };

            RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(system);
            var status = await appService.OpenRemoteAsync(connectionRequest);

            if (status != AppServiceConnectionStatus.Success)
            {
                return(null);
            }

            var message = new ValueSet();

            message.Add("ping", "");
            var response = await appService.SendMessageAsync(message).AsTask().ConfigureAwait(false);

            if (response.Status != AppServiceResponseStatus.Success)
            {
                return(null);
            }

            return(new AdventureRemoteSystem(system, appService));
        }
Exemple #8
0
 private void Initialize(string appServiceName, string packageFamilyName)
 {
     appService = new AppServiceConnection()
     {
         AppServiceName    = appServiceName,
         PackageFamilyName = packageFamilyName
     };
     connectionRequest = null;
 }
        public async Task <RomeAppServiceConnectionStatus> Connect(object _remoteSystem, bool keepAlive, Uri wakeUri)
        {
            var rs = _remoteSystem as RemoteSystem;

            if (rs == null)
            {
                throw new InvalidCastException();
            }

            remoteSystem = rs;

            if ((wakeUri != null) && (!rs.IsAvailableByProximity) && (rs.Kind.Value == RemoteSystemKinds.Phone.Value))
            {
                //Wake device first
                var wakeResult = await LaunchUri(wakeUri, rs);

                if (wakeResult == RomeRemoteLaunchUriStatus.Success)
                {
                    RemoteSystem rsNew = await RediscoverRemoteSystem(rs);

                    System.Diagnostics.Debug.WriteLine(rsNew.IsAvailableByProximity);
                    if (rsNew == null)
                    {
                        return(RomeAppServiceConnectionStatus.RemoteSystemUnavailable);
                    }
                    else
                    {
                        rs = rsNew;
                    }
                }
            }

            try
            {
                if (sendSemaphore.CurrentCount == 0)
                {
                    sendSemaphore.Release();
                }
            }
            catch
            { }

            connectionRequest = new RemoteSystemConnectionRequest(rs);
            appService        = new AppServiceClientConnection(appServiceName, appIdentifier, connectionRequest);
            var result = await appService.OpenRemoteAsync();

            var finalResult = result.ConvertToRomeAppServiceConnectionStatus();

            if (finalResult == RomeAppServiceConnectionStatus.AppNotInstalled)
            {
                await LaunchStoreForApp(_remoteSystem);
            }

            return(finalResult);
        }
        private async Task <RemoteLaunchUriStatus> LaunchAppOnDeviceAsync(RemoteSystem device, string args)
        {
            if (!IsSupported)
            {
                return(RemoteLaunchUriStatus.Unknown);
            }

            RemoteSystemConnectionRequest request = new RemoteSystemConnectionRequest(device);

            return(await RemoteLauncher.LaunchUriAsync(request, new Uri("nep:" + args)));
        }
Exemple #11
0
        // This method returns an open connection to a particular app service on a remote system.
        // param "remotesys" is a RemoteSystem object representing the device to connect to.
        public async Task <ValueSet> RequestRemoteResponseAsync(ValueSet querys, bool rollOver = false)
        {
            if (m_deviceList.Count == 0)
            {
                return(null);
            }
            // Set up a new app service connection. The app service name and package family name that
            // are used here correspond to the AppServices UWP sample.
            var connection = new AppServiceConnection
            {
                AppServiceName    = Consts.ProjectRomeService,
                PackageFamilyName = Consts.PackageFamilyName
            };

            foreach (var remotesys in m_deviceList)
            {
                // a valid RemoteSystem object is needed before going any further
                if (remotesys == null)
                {
                    continue;
                }

                // Create a remote system connection request for the given remote device
                var connectionRequest = new RemoteSystemConnectionRequest(remotesys);

                // "open" the AppServiceConnection using the remote request
                var status = await connection.OpenRemoteAsync(connectionRequest);

                // only continue if the connection opened successfully
                if (status != AppServiceConnectionStatus.Success)
                {
                    continue;
                }

                // send input and receive output in a variable
                var response = await connection.SendMessageAsync(querys);

                // check that the service successfully received and processed the message
                if (response.Status == AppServiceResponseStatus.Success)
                {
                    if (!rollOver)
                    {
                        // Get the data that the service returned:
                        return(response.Message);
                    }
                    else
                    {
                        continue;
                    }
                }
            }
            return(null);
        }
        //<SnippetAppService>
        // This method returns an open connection to a particular app service on a remote system.
        // param "remotesys" is a RemoteSystem object representing the device to connect to.
        private async void openRemoteConnectionAsync(RemoteSystem remotesys)
        {
            // Set up a new app service connection. The app service name and package family name that
            // are used here correspond to the AppServices UWP sample.
            AppServiceConnection connection = new AppServiceConnection
            {
                AppServiceName    = "com.microsoft.randomnumbergenerator",
                PackageFamilyName = "Microsoft.SDKSamples.AppServicesProvider.CS_8wekyb3d8bbwe"
            };

            //</SnippetAppService>

            //<SnippetRemoteConnection>
            // a valid RemoteSystem object is needed before going any further
            if (remotesys == null)
            {
                return;
            }

            // Create a remote system connection request for the given remote device
            RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(remotesys);

            // "open" the AppServiceConnection using the remote request
            AppServiceConnectionStatus status = await connection.OpenRemoteAsync(connectionRequest);

            // only continue if the connection opened successfully
            if (status != AppServiceConnectionStatus.Success)
            {
                return;
            }
            //</SnippetRemoteConnection>

            //<SnippetSendMessage>
            // create the command input
            ValueSet inputs = new ValueSet();

            // min_value and max_value vars are obtained somewhere else in the program
            inputs.Add("minvalue", min_value);
            inputs.Add("maxvalue", max_value);

            // send input and receive output in a variable
            AppServiceResponse response = await connection.SendMessageAsync(inputs);

            string result = "";

            // check that the service successfully received and processed the message
            if (response.Status == AppServiceResponseStatus.Success)
            {
                // Get the data that the service returned:
                result = response.Message["Result"] as string;
            }
        }
Exemple #13
0
        public virtual async Task OpenConnectionRemotelyAsync(RemoteSystem remoteSystem)
        {
            if (!ConnectionAlive)
            {
                var connectionRequest             = new RemoteSystemConnectionRequest(remoteSystem);
                AppServiceConnectionStatus status = await Connection.OpenRemoteAsync(connectionRequest);

                if (status == AppServiceConnectionStatus.Success)
                {
                    ConnectionAlive = true;
                }
            }
        }
Exemple #14
0
        public virtual async System.Threading.Tasks.Task <bool> Send(CompanionDevice cd, string Message)
        {
            if (cd != null)
            {
                if (await CheckCompanionDeviceConnected(cd))
                {
                    if (listRemoteSystems.ContainsKey(cd.Id))
                    {
                        RemoteSystemConnectionRequest rscr = new RemoteSystemConnectionRequest(listRemoteSystems[cd.Id]);
                        if (rscr != null)
                        {
                            using (var connection = new AppServiceConnection())
                            {
                                //Set up a new app service connection
                                connection.AppServiceName    = AppServiceName;
                                connection.PackageFamilyName = PackageFamilyName;


                                AppServiceConnectionStatus status = await connection.OpenRemoteAsync(rscr);

                                if (status == AppServiceConnectionStatus.Success)
                                {
                                    //Set up the inputs and send a message to the service
                                    var inputs = new ValueSet();
                                    inputs.Add(CompanionServiceMessage.ATT_TYPE, CompanionServiceMessage.TYPE_DATA);
                                    inputs.Add(CompanionServiceMessage.ATT_SOURCEID, GetSourceId());
                                    inputs.Add(CompanionServiceMessage.ATT_SOURCENAME, GetSourceName());
                                    inputs.Add(CompanionServiceMessage.ATT_SOURCEIP, GetSourceIP());
                                    inputs.Add(CompanionServiceMessage.ATT_SOURCEKIND, GetSourceKind());
                                    inputs.Add(CompanionServiceMessage.ATT_MESSAGE, Message);
                                    AppServiceResponse response = await connection.SendMessageAsync(inputs);

                                    if ((response != null) && (response.Status == AppServiceResponseStatus.Success))
                                    {
                                        if ((response.Message != null) && (response.Message.ContainsKey(CompanionServiceMessage.ATT_TYPE)))
                                        {
                                            string s = (string)response.Message[CompanionServiceMessage.ATT_TYPE];
                                            if (string.Equals(s, CompanionServiceMessage.TYPE_RESULT))
                                            {
                                                return(true);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(false);
        }
        public async void OnInvokeRemoteSystemByUriAsync(object sender, RoutedEventArgs e)
        {
            if (currentRemoteSystem == null)
            {
                return;
            }

            // 檢查設備是否支援需要的特性
            //await currentRemoteSystem.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.LaunchUri)
            var launchRequest = new RemoteSystemConnectionRequest(currentRemoteSystem);
            var result        = await RemoteLauncher.LaunchUriAsync(launchRequest, new Uri("https://poumason.blogspot.com"));

            Debug.WriteLine(result.ToString());
        }
        public async Task LaunchUriAsync()
        {
            using (await _launchUriAsyncLock.LockAsync())
            {
                LaunchRemoteUriResult = string.Empty;

                var target = SelectedRemoteSystem;
                if (target == null)
                {
                    LaunchRemoteUriResult = "Il faut sélectionner une cible...";
                    return;
                }

                if (!string.IsNullOrEmpty(TargetLaunchHost))
                {
                    // construct a HostName object
                    Windows.Networking.HostName deviceHost = new Windows.Networking.HostName(TargetLaunchHost);

                    // create a RemoteSystem object with the HostName
                    var remotesys = await RemoteSystem.FindByHostNameAsync(deviceHost);

                    if (remotesys != null)
                    {
                        LaunchRemoteUriResult = "Cible trouvée";

                        target = remotesys;
                    }
                }
                var targetRs = RemoteSystems
                               .FirstOrDefault(r => r.Status == RemoteSystemStatus.Available);
                var request = new RemoteSystemConnectionRequest(targetRs);
                var uri     = new Uri(TargetLaunchUri);

                var launchUriTask = RemoteLauncher.LaunchUriAsync(request, uri);

                LaunchRemoteUriResult = "Appel en cours...";
                var timeout = Task.Delay(13000);
                await Task.WhenAny(timeout, launchUriTask.AsTask());

                if (timeout.IsCompleted)
                {
                    LaunchRemoteUriResult = "Timeout.... ";
                }
                else
                {
                    var result = await launchUriTask;
                    LaunchRemoteUriResult = "Appel effectué : " + result;
                }
            }
        }
        internal async void OnTransfer()
        {
            var errorString = string.Empty;

            this.IsTransferring = true;
            this.TransferStatus = "connecting...";

            using (var connection = new AppServiceConnection())
            {
                connection.PackageFamilyName = App.PackageFamilyName;
                connection.AppServiceName    = App.AppServiceName;

                var remoteRequest = new RemoteSystemConnectionRequest(this.SelectedRemoteSystem);

                var result = await connection.OpenRemoteAsync(remoteRequest);

                if (result == AppServiceConnectionStatus.Success)
                {
                    this.TransferStatus = "Connected, calling...";

                    var message = new ValueSet();
                    var content = this.Serialize();
                    message[App.AppServiceParameterKey] = content;

                    var response = await connection.SendMessageAsync(message);

                    if (response.Status != AppServiceResponseStatus.Success)
                    {
                        this.TransferStatus = $"Failed to call - status was [{response.Status}]";
                    }
                    this.TransferStatus = "Succeeded";
                }
                else
                {
                    this.TransferStatus = $"Failed to open connection with status {result}";
                }
                this.transferStatus = "Closing";
            }
            // time for the display of errors etc. to be seen.
            await Task.Delay(2000);

            this.IsTransferring = false;
        }
Exemple #18
0
        public static Task <RemoteLaunchUriStatus> LaunchUriAsync(RemoteSystemConnectionRequest connectionRequest, Uri uri)
        {
            var tcs = new TaskCompletionSource <RemoteLaunchUriStatus>();

            try
            {
                var launchUriListener = new LaunchURIListener();
                launchUriListener.LaunchCompleted += (r) =>
                {
                    tcs.TrySetResult(r);
                };

                RemoteLauncher.LaunchUriAsync(connectionRequest, SystemUriToAndroidUri(uri), launchUriListener);
            }
            catch (Exception e)
            {
                tcs.TrySetException(e);
            }

            return(tcs.Task);
        }
Exemple #19
0
        public static async void CreateAppService(RemoteSystem remoteSystem)
        {
            AppServiceConnection connection = new AppServiceConnection();

            connection.AppServiceName    = "com.microsoft.test.cdppingpongservice";
            connection.PackageFamilyName = Package.Current.Id.FamilyName;

            RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(remoteSystem);
            var status = await connection.OpenRemoteAsync(connectionRequest);

            if (SuccessfulAppServiceClientConnectionStatus(status, connection, remoteSystem) == true)
            {
                connection.RequestReceived += PingPongConnection.OnRequestReceived;

                NotifyAppServiceConnected(connection);
            }
            else
            {
                DebugWrite($"Failed to create app service connection to ({remoteSystem.DisplayName}, {remoteSystem.Id})");
            }
        }
Exemple #20
0
        private static async Task <AppServiceConnectionStatus> OpenAppServiceConnectionAsync(RemoteSystem remoteSystem)
        {
            //Connect App Service
            var connectionRequest = new RemoteSystemConnectionRequest(remoteSystem);

            if (_appServiceConnection == null)
            {
                _appServiceConnection = new AppServiceConnection()
                {
                    AppServiceName    = "com.project-rome.echo",
                    PackageFamilyName = Package.Current.Id.FamilyName
                };

                _appServiceConnection.ServiceClosed += async(sender, args) =>
                {
                    StatusWrite("AppServiceConnection closed to: " + remoteSystem.DisplayName + ", reason: " + args.Status);

                    if (--_connectionRetryCount > 0)
                    {
                        await OpenAppServiceConnectionAsync(remoteSystem);
                    }
                };

                var status = await _appServiceConnection.OpenRemoteAsync(connectionRequest);

                if (status != AppServiceConnectionStatus.Success)
                {
                    StatusWrite("Error: " + status);
                    _appServiceConnection = null;
                }

                StatusWrite("AppServiceConnection opened to: " + remoteSystem.DisplayName);
                _connectionRetryCount = 5;

                return(status);
            }

            return(AppServiceConnectionStatus.Success);
        }
Exemple #21
0
        public static async Task LaunchRemoteUriAsync(RemoteSystem remoteSystem, Uri uri)
        {
            if (remoteSystem != null)
            {
                var connection = new RemoteSystemConnectionRequest(remoteSystem);

                Events.TrackEvent(Events.LaunchUriAsyncStart);
                var result = await RemoteLauncher.LaunchUriAsync(connection, uri);

                if (result == RemoteLaunchUriStatus.Success)
                {
                    Events.TrackEvent(Events.LaunchUriAsyncSuccess);
                }
                switch (result)
                {
                case RemoteLaunchUriStatus.Success:
                    Events.TrackEvent(Events.LaunchUriAsyncSuccess);
                    break;

                case RemoteLaunchUriStatus.DeniedByRemoteSystem:
                    Events.TrackEvent(Events.LaunchUriAsyncErrorDeniedByRemoteSystem);
                    break;

                case RemoteLaunchUriStatus.ProtocolUnavailable:
                    Events.TrackEvent(Events.LaunchUriAsyncErrorProtocolUnavailable);
                    break;

                case RemoteLaunchUriStatus.RemoteSystemUnavailable:
                    Events.TrackEvent(Events.LaunchUriAsyncErrorRemoteSystemUnavailable);
                    break;

                default:
                    Events.TrackEvent(Events.LaunchUriAsyncErrorOther);
                    break;
                }
            }
        }
Exemple #22
0
        private async Task ConnectToRemoteAppServiceAsync()
        {
            RemoteSystem selectedDevice = DeviceListComboBox.SelectedItem as RemoteSystem;

            if (selectedDevice != null)
            {
                // Create a remote system connection request.
                RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(selectedDevice);

                // Set up a new app service connection. The following app service name and package family name
                // are used in this sample to work with AppServices provider SDK sample on a remote system.
                using (AppServiceConnection connection = new AppServiceConnection
                {
                    AppServiceName = "com.microsoft.randomnumbergenerator",
                    PackageFamilyName = "Microsoft.SDKSamples.AppServicesProvider.CS_8wekyb3d8bbwe"
                })
                {
                    UpdateStatus("Opening connection to remote app service...", NotifyType.StatusMessage);
                    AppServiceConnectionStatus status = await connection.OpenRemoteAsync(connectionRequest);

                    if (status == AppServiceConnectionStatus.Success)
                    {
                        UpdateStatus("Successfully connected to remote app service.", NotifyType.StatusMessage);
                        await SendMessageToRemoteAppServiceAsync(connection);
                    }
                    else
                    {
                        UpdateStatus("Attempt to open a remote app service connection failed with error - " + status.ToString(), NotifyType.ErrorMessage);
                    }
                }
            }
            else
            {
                UpdateStatus("Select a device for remote connection.", NotifyType.ErrorMessage);
            }
        }
        public async void OnInvokeRemoteSystemByAppServiceAsync(object sender, RoutedEventArgs e)
        {
            if (currentRemoteSystem == null)
            {
                return;
            }

            // 檢查設備是否支援需要的特性
            if (await currentRemoteSystem.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.AppService))
            {
                AppServiceConnection connection = new AppServiceConnection();
                connection.AppServiceName    = "com.pou.MyApService";
                connection.PackageFamilyName = "f9842749-e4c8-4c15-bac8-bc018db1b2ea_s1mb6h805jdtj";

                RemoteSystemConnectionRequest appServiceRequest = new RemoteSystemConnectionRequest(currentRemoteSystem);

                AppServiceConnectionStatus status = await connection.OpenRemoteAsync(appServiceRequest);

                if (status == AppServiceConnectionStatus.Success)
                {
                    var message = new ValueSet();
                    message.Add("cmd", "Query");
                    message.Add("id", "1234");

                    AppServiceResponse response = await connection.SendMessageAsync(message);

                    if (response.Status == AppServiceResponseStatus.Success)
                    {
                        if (response.Message["status"] as string == "OK")
                        {
                            Debug.WriteLine(response.Message["name"] as string);
                        }
                    }
                }
            }
        }
Exemple #24
0
 public AppServiceConnection(string appServiceName, string appIdentifier, RemoteSystemConnectionRequest request)
 {
     appServiceConnection = new AppServiceConnectionInternal(appServiceName, appIdentifier, request, GetAppServiceConnectionListener(), GetAppServiceRequestListener(this));
 }
        public async Task LauncAppServiceAsync(object sender, ItemClickEventArgs e)
        {
            using (await _launchAppServiceAsyncLock.LockAsync())
            {
                LaunchRemoteAppServiceResult = string.Empty;

                var target = SelectedRemoteSystem;
                if (target == null)
                {
                    LaunchRemoteAppServiceResult = "Il faut sélectionner une cible...";
                    return;
                }

                // Création d'une reqûete
                var connectionRequest = new RemoteSystemConnectionRequest(target);

                // création d'une connexion
                var connection = new AppServiceConnection
                {
                    AppServiceName    = "com.infinitesquare.CustomRain",
                    PackageFamilyName = Package.Current.Id.FamilyName
                };

                // ouverture de la connexion
                var openRemoteTask = connection.OpenRemoteAsync(connectionRequest);

                LaunchRemoteAppServiceResult = "Connexion en cours...";
                var timeout = Task.Delay(13000);
                await Task.WhenAny(timeout, openRemoteTask.AsTask());

                if (timeout.IsCompleted)
                {
                    LaunchRemoteAppServiceResult = "Timeout...";
                    return;
                }

                var result = await openRemoteTask;
                if (result == AppServiceConnectionStatus.Success)
                {
                    LaunchRemoteAppServiceResult = "Connecté, envoi du message";

                    var inputs = new ValueSet();

                    // min_value and max_value vars are obtained somewhere else in the program
                    inputs.Add("targetUri", e.ClickedItem.ToString());

                    // send input and receive output in a variable
                    var response = await connection.SendMessageAsync(inputs);

                    if (response.Status != AppServiceResponseStatus.Success)
                    {
                        LaunchRemoteAppServiceResult = "Message envoyé ";
                    }
                    else
                    {
                        LaunchRemoteAppServiceResult = "Echec de l'envoi : " + result;
                    }
                }
                else
                {
                    LaunchRemoteAppServiceResult = "Echec de connexion : " + result;
                }
            }
        }
Exemple #26
0
        public async Task <RomeRemoteLaunchUriStatus> LaunchUri(Uri uri, object remoteSystemOverride)
        {
            RemoteSystem rs = remoteSystem as RemoteSystem;

            if (remoteSystemOverride != null)
            {
                rs = remoteSystemOverride as RemoteSystem;
                if (rs == null)
                {
                    throw new InvalidCastException();
                }
            }

            RemoteLaunchUriStatus launchStatus = RemoteLaunchUriStatus.RemoteSystemUnavailable;

            bool workDone = false;
            int  tryCount = getTryCount();

            for (int i = 0; i < tryCount; i++)
            {
                Task launch = Common.DispatcherEx.RunOnCoreDispatcherIfPossible(async() =>
                {
                    /*var options = new Windows.System.RemoteLauncherOptions()
                     *              {
                     *                  FallbackUri = new Uri(@"http://google.com")
                     *              };*/

                    RemoteSystemConnectionRequest req = connectionRequest;
                    if (rs != null)
                    {
                        req = new RemoteSystemConnectionRequest(rs);
                    }

                    launchStatus = await Windows.System.RemoteLauncher.LaunchUriAsync(req, uri /*, options*/);
                    workDone     = true;
                }, false);

                Task delay = SetTimeoutTask(remoteSystem ?? rs, i);

                await Task.WhenAny(new Task[] { launch, delay });

                if (workDone)
                {
                    break;
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("Launch timeout");
                    if (i >= 2)
                    {
                        await ReconnectIfEnabled();
                    }
                }
            }

            if (launchStatus == RemoteLaunchUriStatus.ProtocolUnavailable)
            {
                await LaunchStoreForApp(rs);
            }

            return((RomeRemoteLaunchUriStatus)launchStatus);
        }
        public static async Task <RemoteLaunchUriStatus> TrySharetext(RemoteSystem device, string text)
        {
            RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(device);

            return(await RemoteLauncher.LaunchUriAsync(connectionRequest, new Uri("share-app:?Text=" + Uri.EscapeDataString(text))));
        }
        public static async Task <RemoteLaunchUriStatus> TryShareURL(RemoteSystem device, string url)
        {
            RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(device);

            return(await RemoteLauncher.LaunchUriAsync(connectionRequest, new Uri(url)));
        }
        public static async Task <RemoteLaunchUriStatus> TryOpenStoreToApp(RemoteSystem device, String appTarget)
        {
            RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(device);

            return(await RemoteLauncher.LaunchUriAsync(connectionRequest, new Uri(appTarget)));
        }
        public static async Task <RemoteLaunchUriStatus> TryBeginShareFile(RemoteSystem device, string fileName, string ipAddress)
        {
            RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(device);

            return(await RemoteLauncher.LaunchUriAsync(connectionRequest, new Uri("share-app:?FileName=" + fileName + "&IpAddress=" + ipAddress)));
        }
        private async void ConnectAppService(string appService, string appIdentifier, RemoteSystemConnectionRequest connectionRequest)
        {
            this.appServiceConnection = new AppServiceConnection(appService, appIdentifier, connectionRequest);
            this.appServiceConnection.RequestReceived += AppServiceConnectionRequestReceived;

            this.id = connectionRequest.RemoteSystem.Id;

            try
            {
                this.LogMessage("Sending AppServices connection request. Waiting for connection response");
                var status = await this.appServiceConnection.OpenRemoteAsync();

                if (status == AppServiceConnectionStatus.Success)
                {
                    this.LogMessage("App Service connection successful!");
                    this.pingBtn.Enabled = true;
                }
                else
                {
                    this.LogMessage("App Service connection failed, returning status " + status.ToString());
                }
            }
            catch (ConnectedDevicesException e)
            {
                Console.WriteLine("Failed during attempt to create AppServices connection");
                e.PrintStackTrace();
            }
        }