예제 #1
0
            public bool PopValveParameters(out ValveParameters result)
            {
                var firstPath = _list.Count == 0 ? null : _list.First.Value.RelativePath;

                var properties = new LinkedList <CandidateProperty>();
                var first      = _list.First;

                while (first != null && first.Value.RelativePath.CompareTo(firstPath) == 0)
                {
                    _list.RemoveFirst();
                    properties.AddLast(first);
                    first = _list.First;
                }

                var relativeProperties = new BinderState();

                while (_list.Count > 0)
                {
                    var rebased = _list.First.Value.RelativeTo(firstPath);
                    if (!rebased.HasValue)
                    {
                        break;
                    }

                    relativeProperties._list.AddLast(rebased.Value);
                    _list.RemoveFirst();
                }

                if (_list.Count > 0 && properties.Count < 2 && relativeProperties._list.Count == 0)
                {
                    return(PopValveParameters(out result));
                }
                result = new ValveParameters(properties, relativeProperties);
                return(properties.Count >= 2 || relativeProperties._list.Count > 0);
            }
예제 #2
0
        /// <summary>
        /// Inicializa un hilo dentro del cual se realiza constantemente llamdas al servidor
        /// para obtener en tiempo real el goteo y el
        /// </summary>
        private void iniciarConexion()
        {
            daServer.serverIP = tbServerIP.Text;
            Thread listener = new Thread(() =>
            {
                ValveParameters data = new ValveParameters();
                //Previene que otro hilo ejecute el codigo delegado al hilo padre mientras este haciendose una solicitud
                bool requestFlag = false;
                do
                {
                    if (!requestFlag)
                    {
                        this.BeginInvoke(new MethodInvoker(delegate
                        {
                            //Se levanta la bandera para evitar accesos de otros hilos
                            requestFlag = true;

                            data = daServer.tomarDatosActuales(); //Se solicitan datos del servidor

                            //Si se desconecto el servidor, se muestra un mensaje de error
                            if (data.success)
                            {
                                showValues(data); //Si hubo respuesta del servidor, se muestra en pantalla
                            }
                            //Se marca el servidor como desconectado
                            setConnectionStatus(data.success);

                            //Si ocurrio un error al hacer la conexion, se muestra en pantalla
                            if (!data.success)
                            {
                                MessageBox.Show("Error al conectarse con el servidor. Detalles: " + data.errorMsg,
                                                "Error de Conexión", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }

                            //Al terminar la solicitud, se desbloquea el codigo delegado
                            requestFlag = false;
                        }));
                    }
                    Thread.Sleep(800);
                } while (conectado);
            });

            listener.IsBackground = true;
            listener.Start();
        }
        /// <summary>
        /// Metodo generico para comunicarse con el servidor, recibiendo parametros get
        /// para enviarlos al server y recibir respuesta.
        /// </summary>
        /// <param name="urlParams">Cadena de caracteres con el query string para enviarse al server.</param>
        /// <returns>Respuesta del servidor en forma de objeto.</returns>
        private ValveParameters getValveData(String urlParams)
        {
            ValveParameters valveData = new ValveParameters();
            String          serverIP  = "http://" + this.serverIP + "/";

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverIP + urlParams);
                request.Timeout = 3000;
                HttpWebResponse response   = (HttpWebResponse)request.GetResponse();
                string          tempString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                valveData         = JsonConvert.DeserializeObject <ValveParameters>(tempString);
                valveData.success = true;
            }
            catch (WebException exc)
            {
                valveData.success  = false;
                valveData.errorMsg = exc.Message;
            }
            return(valveData);
        }
예제 #4
0
 private void showValues(ValveParameters data)
 {
     tbGPMObjActual.Text = decimal.Parse(data.GPM).ToString();
     tbGPMM.Text         = data.GPMM;
     printInLog(data.ToString());
 }