Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Last active August 29, 2015 14:02
Show Gist options
  • Save Fhernd/fe4c79a32e01b9520a7d to your computer and use it in GitHub Desktop.
Save Fhernd/fe4c79a32e01b9520a7d to your computer and use it in GitHub Desktop.
Ejemplo de eventos con aplicación de Caldera en C#.
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