private async void InstanceOnItemClicked(object sender, HostSelectionDataSource.ServerDataItem e) { var endpointAddress = new HostEndpointAddress(e.EndPoint.Address.ToString(), e.HttpsPorts[0]); try { var portOpen = await SocketHelper.IsPortOpenAsync(endpointAddress.IpAddress, endpointAddress.Port, TimeSpan.FromSeconds(1)); if (!portOpen) { ToastHelper.Display($"Failed to connect to {endpointAddress.FullAddress}", ToastLength.Long); return; } using (var agent = GrpcApplicationAgentFactory.Create(GrpcChannelHub.GetChannelFor(endpointAddress))) { var authenticated = await CheckIsAuthenticatedAsync(agent); if (!authenticated) { if (!await TryUpdateAuthenticationAsync(agent, endpointAddress)) { return; } } NavigateToHost(e); } } catch (Exception exception) { ToastHelper.Display($"Failed to connect to {endpointAddress.FullAddress}", ToastLength.Long); Log.Error(exception); } }
private void NavigateToHost(HostSelectionDataSource.ServerDataItem e) { var fragment = new HostControlFragment(); fragment.WithAgent(e.EndPoint.Address.ToString(), e.MachineName, e.HttpsPorts[0]); fragment.DisplayListHeader = true; var bundle = new Bundle(); bundle.PutInt(HostControlFragment.ArgumentTargetPort, e.HttpsPorts[0]); bundle.PutString(HostControlFragment.ArgumentTargetAddress, e.EndPoint.Address.ToString()); bundle.PutString(HostControlFragment.ArgumentTargetMachineName, e.MachineName); fragment.Arguments = bundle; if (Activity?.SupportFragmentManager == null) { Log.Error("-------------------------------- ERROR HAPPENED"); } using (var transaction = Activity.SupportFragmentManager.BeginTransaction()) { transaction.SetStatusBarTitle(e.MachineName); transaction.ReplaceContentAnimated(fragment); transaction.Commit(); } }