Last active
August 29, 2015 14:02
-
-
Save Fhernd/fe4c79a32e01b9520a7d to your computer and use it in GitHub Desktop.
Ejemplo de eventos con aplicación de Caldera en C#.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
namespace Articulos.Cap04 | |
{ | |
///<summary> | |
/// Representa la entidad caldera. Mide la temperatura y la presión. | |
///</summary> | |
class Caldera | |
{ | |
private int temperatura; | |
private int presion; | |
// Obtiene la temperatura actual de la caldera: | |
public int Temperatura | |
{ | |
get | |
{ | |
return temperatura; | |
} | |
} | |
// Obtiene la presión actual de la caldera: | |
public int Presion | |
{ | |
get | |
{ | |
return presion; | |
} | |
} | |
// Crea una instancia de `Caldera` con la temperatura | |
// y la presión actuales. | |
public Caldera (int temp, int presion) | |
{ | |
temperatura = temp; | |
this.presion = presion; | |
} | |
} | |
///<summary> | |
/// Clase controladora del estado de la calderea. | |
///</summary> | |
class ControladorCaldera | |
{ | |
public delegate void RegistroCalderaEventHandler(string estado); | |
public event RegistroCalderaEventHandler RegistroCaldera; | |
// Se encarga de llevar el control de la caldera. | |
// Avisa cuando se debe realizar un mantenimiento: | |
public void ProcesoRegistro() | |
{ | |
string comentario = "O.K."; | |
Caldera c = new Caldera(100, 12); | |
int t = c.Temperatura; | |
int p = c.Presion; | |
if (t> 150 || t > 80 || p < 12 || p > 15) | |
{ | |
comentario = "Se requiere mantenimiento"; | |
} | |
OnEventoRegistro("Información de Registro:\n"); | |
OnEventoRegistro("\tTemperatura: " + t.ToString() + "\n\tPresión: " + p.ToString() ); | |
OnEventoRegistro("\n\tMensaje: " + comentario); | |
} | |
// Invoca indirectamente a los listeners interesados | |
// en los mensajes de mantenimiento de la caldera: | |
protected void OnEventoRegistro(string message) | |
{ | |
if (RegistroCaldera != null) | |
{ | |
RegistroCaldera(message); | |
} | |
} | |
} | |
///<summary> | |
/// Control de registro del estado de la caldera a archivo de texto plano. | |
///</summary> | |
class RegistroArchivo | |
{ | |
FileStream fs; | |
StreamWriter sw; | |
public RegistroArchivo(string nombreArchivo) | |
{ | |
fs = new FileStream(nombreArchivo, FileMode.Append, FileAccess.Write); | |
sw = new StreamWriter(fs); | |
} | |
public void Registrar(string info) | |
{ | |
sw.WriteLine(info); | |
} | |
public void CerrarArchivo() | |
{ | |
sw.Close(); | |
fs.Close(); | |
} | |
} | |
public class Aplicacion | |
{ | |
static void Registrar(string info) | |
{ | |
Console.WriteLine(info); | |
} | |
public static void Main() | |
{ | |
// Creación de instancia de registro en archivo de texto: | |
RegistroArchivo registroArchivo = new RegistroArchivo("registrocaldera.txt"); | |
ControladorCaldera eventoControladorCaldera = new ControladorCaldera(); | |
// Agrega event handler para mensajería sobre la salida estándar: | |
eventoControladorCaldera.RegistroCaldera += new ControladorCaldera.RegistroCalderaEventHandler(Registrar); | |
// Agrega event handler para mensajería sobre archivo de texto plano: | |
eventoControladorCaldera.RegistroCaldera += new ControladorCaldera.RegistroCalderaEventHandler(registroArchivo.Registrar); | |
eventoControladorCaldera.ProcesoRegistro(); | |
registroArchivo.CerrarArchivo(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment