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); }
/// <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); }
private void showValues(ValveParameters data) { tbGPMObjActual.Text = decimal.Parse(data.GPM).ToString(); tbGPMM.Text = data.GPMM; printInLog(data.ToString()); }