using Grpc.Core; using System; using System.Threading.Tasks; using Grpc.Net.Client; using System.Security.Cryptography.X509Certificates; using CloudServiceDAO; using Google.Protobuf; using Google.Protobuf.Reflection; using Google.Protobuf.WellKnownTypes; using Google.Protobuf.Collections; using System.Collections; namespace client { static class Program { static async Task Main(string[] args) { #region clientv1 //Console.WriteLine("\nIniciando cliente canal inseguro . . ."); //Channel insecurechannel = new Channel("localhost", 50051, ChannelCredentials.Insecure); //await insecurechannel.ConnectAsync().ContinueWith((task) => //{ // if (task.Status == TaskStatus.RanToCompletion) // { // Console.WriteLine("Cliente conectado satisfactoriamente \n\n\n"); // } //}); //var insecureclient = new servicioDAOService.servicioDAOServiceClient(insecurechannel); //try //{ // //Prueba de guardado de licencia de axway // /* var response = insecureclient.getSaveLicensesService(new SaveLicensesRequest() // { // Specs = @"[ // { // ""nombre"": ""TestAuto"", // ""correo"": ""testamcoq@triara.com"", // ""telefono"": ""1234567890"", // ""descripcion"": ""Prueba Automatizada ORG"" // }, // { // ""usuario"": ""amcoadmin12"", // ""nombre"": ""Amco Org Admin"", // ""correo"": ""testamco12@triara.com"", // ""telefono"": ""1234567890"", // ""telefonocelular"": ""1234567890"", // ""descripcion"": ""Prueba Automatizada Admin"" // }, // { // ""usuario"": ""amcoconsulta12222"", // ""nombre"": ""Amco Org User"", // ""correo"": ""testamco1s6@triara.com"", // ""telefono"": ""12345267890"", // ""telefonocelular"": ""12345678290"", // ""descripcion"": ""Prueba Automatizada User"" // } // ]", // ContractedServicesId="0", Name= "TestAuto" // });*/ // //Prueba de consulta de usuario RepeatedField // /*var response = insecureclient.getUserVCD(new GetUserVCDRequest() // { // UserName = "IleanaG" // });*/ // //Prueba de consulta de organización Repeated Field // /* var response = insecureclient.getOrgVCD(new GetOrgVCDRequest() // { // Name = "", OrgId= "1" // });*/ // var response = insecureclient.setContractedServicesService(new SetContractedServicesRequest() // { // BackupScheduledId=0, // FirewallId=0, // PlanId=1, // UserId=7 // }); // //Prueba para obtener tipos de productos // //var response = insecureclient.getProductType(new GetProductTypeRequest()) ; // //Prueba para obtener tipos de planes // /* var response = insecureclient.getPlansService(new GetPlansServiceRequest() // { // IdService = "1" // });*/ // //Prueba de guardado de usuario // /*var response = insecureclient.SetUserVCD(new SetUserVCDRequest() // { // Userid = new Random().Next(999).ToString(), // Username = "IleanaG", // Email = "igarza@xyz.com", // Orgid = "712" // }) ;*/ // //prueba de guardado de organización // /*var response = insecureclient.setOrgVCD(new setOrgVCDRequest() // { // Orgid = new Random().Next(999).ToString(), // Name = "Org01", // Host = "xyz.com", // ApiVersion = String.Format("v{0}.0{1}", new Random().Next(10).ToString(), // new Random().Next(99).ToString()) // });*/ // /*----------------------------------------------*/ // /**Para imprimir métodos que usan RepeatedFields**/ // //Imprimir Message para RepeatedFields // IMessage message = response; // PrintProtobufMessage(message); // /*----------------------------------------------*/ // /*----------------------------------------------*/ // /*Para imprimir resultados normales sin repeated fields*/ // //Console.WriteLine(response.user.ToString()); //} //catch (RpcException ex) //{ // Console.WriteLine(ex.Status.Detail); //} //insecurechannel.ShutdownAsync().Wait(); //Console.WriteLine("\n\n\nFin cliente canal inseguro . . ."); /*----------------------------------------------*/ /*Canal seguro*/ /*----------------------------------------------*/ Console.WriteLine("\nIniciando cliente canal seguro . . .\n\n\n"); Console.WriteLine("Iniciando cliente, cargando certificados . . ."); var cert = X509Certificate2.CreateFromPem(File.ReadAllText(@"ca.pem")); var HttpClientHandler = new HttpClientHandler(); HttpClientHandler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; using HttpClient httpClient = new(HttpClientHandler); using var channel = GrpcChannel.ForAddress("https://localhost:443", new GrpcChannelOptions { HttpClient = httpClient }); var client = new servicioDAOService.servicioDAOServiceClient(channel); Console.WriteLine("Iniciando conexion a servidor ..."); //Timer de 1 segundo, para que esperar a que inice servidor. Solo para pruebas locales. System.Threading.Thread.Sleep(1000); try { var response = client.getServicesAllContracted(new GetAllContractedServicesRequest() { ContractedServicesId=1 }); //var response = client.getGenericInformation(new GetGenericInformationRequest() //{ // TabName= "cloud_services.licenses\r\nINNER JOIN cloud_services.contracted_services ON contracted_services.ContractedServicesID=licenses.contracted_services_id", // WcolNameFilter= "idlicenses", // WParam="1" //}); // /*----------------------------------------------*/ // /**Para imprimir métodos que usan RepeatedFields**/ // //Imprimir Message para RepeatedFields IMessage message = response; PrintProtobufMessage(message); // /*----------------------------------------------*/ } catch (RpcException ex) { Console.WriteLine(ex.Status.Detail); } channel.ShutdownAsync().Wait(); Console.WriteLine("\n\n\nFin cliente canal seguro . . ."); Console.WriteLine(DateTime.Now.ToString()); #endregion #region clientv2 /* var x509 = X509Certificate2.CreateFromPem(File.ReadAllText(@"ca.pem")); var handler = new HttpClientHandler(); handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls; handler.ClientCertificateOptions = ClientCertificateOption.Manual; handler.ClientCertificates.Add(x509); handler.UseProxy = false; System.Threading.Thread.Sleep(1000); using var channel = GrpcChannel.ForAddress("http://localhost:5001", new GrpcChannelOptions() { HttpHandler = handler, DisposeHttpClient = true }); System.Threading.Thread.Sleep(1000); var client = new servicioDAOService.servicioDAOServiceClient(channel); var reply = client.getGenericInformation(new GetGenericInformationRequest() { TabName = "cloud_services.licenses\r\nINNER JOIN cloud_services.contracted_services ON contracted_services.ContractedServicesID=licenses.contracted_services_id", WcolNameFilter = "idlicenses", WParam = "1" }); IMessage message = reply; PrintProtobufMessage(message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();*/ #endregion } /// /// Método para depurar mensajes si contiene repeated fields, obtiene keys y values e imprime valores /// De otro modo imprime el mensaje /// /// Mesaje de respuesta del server tipo IMessage public static void PrintProtobufMessage(IMessage protobufMessage) { if (protobufMessage == null) { return; } foreach (var field in protobufMessage.Descriptor.Fields.InFieldNumberOrder()) { if (field.IsMap) { // for map fields, the field type is always a MapField, inside of which are contained a keyField and valueField //var keyField = field.MessageType.Fields.InFieldNumberOrder()[0]; var valueField = field.MessageType.Fields.InFieldNumberOrder()[1]; IDictionary mapFields = field.Accessor.GetValue(protobufMessage) as IDictionary; if (mapFields != null) { foreach (DictionaryEntry mapField in mapFields) { Console.WriteLine("Iterating Map, Field {0} ({1}): Key {2}:", field.FieldNumber, field.Name, mapField.Key); if (valueField.FieldType == Google.Protobuf.Reflection.FieldType.Message) { PrintProtobufMessage(mapField.Value as IMessage); } else { PrintProtobufField(valueField, mapField.Value); } } } } else if (field.IsRepeated) { IList repeatedFieldValues = field.Accessor.GetValue(protobufMessage) as IList; if (repeatedFieldValues != null) { foreach (var repeatedFieldValue in repeatedFieldValues) { // for repeated fields, the field type represents each element in the list, handle them accordingly if (field.FieldType == Google.Protobuf.Reflection.FieldType.Message) { PrintProtobufMessage(repeatedFieldValue as IMessage); } else { PrintProtobufField(field, repeatedFieldValue); } } } } else { if (field.FieldType == Google.Protobuf.Reflection.FieldType.Message) { var fieldValue = field.Accessor.GetValue(protobufMessage); PrintProtobufMessage(fieldValue as IMessage); } else { PrintProtobufField(field, protobufMessage); } } } } public static void PrintProtobufField(FieldDescriptor field, IMessage protobufMessage) { var fieldValue = field.Accessor.GetValue(protobufMessage); PrintProtobufField(field, fieldValue); } public static void PrintProtobufField(FieldDescriptor field, object fieldValue) { if (fieldValue != null) { Console.WriteLine( "Field {0} ({1}): {2}", field.FieldNumber, field.Name, fieldValue ); } } } }