Esempio n. 1
0
        /// <summary>
        /// No envia ninguna petición, solo espera la siguiente respuesta del servidor
        /// </summary>
        /// <returns>Alguna respuesta del servidor</returns>
        public async Task <Response> Wait()
        {
            try
            {
                if (TcpClient == null || !TcpClient.Connected)
                {
                    return(new Response()
                    {
                        Key = "error",
                        Value = "No hay conexión disponible con el servidor",
                        IsValueJson = false
                    });
                }

                string   strRes         = string.Empty;
                string   decryptedValue = string.Empty;
                Response res            = null;

                strRes = await TcpReader.ReadLineAsync();

                res = JsonConvert.DeserializeObject <Response>(strRes);

                if (res.IsEncripted)
                {
                    decryptedValue = Encriptado.Decrypt(Convert.ToString(res.Value), true);
                }
                else
                {
                    decryptedValue = Convert.ToString(res.Value);
                }

                res.Value = decryptedValue;

                return(res);
            }
            catch (Exception ex)
            {
                return(new Response()
                {
                    Key = "error",
                    Value = ex.Message,
                    IsValueJson = false
                });
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Envia una petición al servidor y SI espera una respuesta
        /// </summary>
        /// <typeparam name="T">Tipo de valor a enviar</typeparam>
        /// <param name="key">Comando</param>
        /// <param name="value">Valor que se desea enviar junto al comando</param>
        /// <param name="applyFormatJsonToValue">Indica si al valor se formateara a json</param>
        /// <returns>Retorna una instancia tipo Response con los datos recibidos del servidor</returns>
        public async Task <Response> SendWait <T>(string key, T value, bool applyFormatJsonToValue = true)
        {
            try
            {
                if (TcpClient == null || !TcpClient.Connected)
                {
                    return(new Response()
                    {
                        Key = "error",
                        Value = "No hay conexión disponible con el servidor",
                        IsValueJson = false
                    });
                }

                Request req = new Request();
                req.Key         = key;
                req.IsValueJson = applyFormatJsonToValue;
                req.IsEncripted = true;

                if (applyFormatJsonToValue)
                {
                    req.Value = JsonConvert.SerializeObject(value);
                }
                else
                {
                    req.Value = value;
                }

                string encryptedValue = Encriptado.Encrypt(Convert.ToString(req.Value), true);
                req.Value = encryptedValue;

                string reqJson = JsonConvert.SerializeObject(req);

                await TcpWritter.WriteLineAsync(reqJson);

                await TcpWritter.FlushAsync();

                string   strRes         = string.Empty;
                string   decryptedValue = string.Empty;
                Response res            = null;

                int intentos           = 3;
                int intentosRealizados = 0;

                do
                {
                    strRes = await TcpReader.ReadLineAsync();

                    res = JsonConvert.DeserializeObject <Response>(strRes);

                    if (res.IsEncripted)
                    {
                        decryptedValue = Encriptado.Decrypt(Convert.ToString(res.Value), true);
                    }
                    else
                    {
                        decryptedValue = Convert.ToString(res.Value);
                    }

                    res.Value = decryptedValue;

                    intentosRealizados++;
                } while (res.Key != key && intentosRealizados < intentos);

                return(res);
            }
            catch (Exception ex)
            {
                return(new Response()
                {
                    Key = "error",
                    Value = ex.Message,
                    IsValueJson = false
                });
            }
        }