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);
Console.WriteLine("Iniciando cliente, configurando canal seguro 8443. . .");
using var channel = GrpcChannel.ForAddress("https://localhost:8443", 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.getListProfiles(new GetProfilesRequest()
);
//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
);
}
}
}
}