日期:2014-05-18 浏览次数:20793 次
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Timers; namespace DetectorAlarm { /// <summary> /// 温湿度报警程序 /// </summary> class Program { static void Main(string[] args) { Detector detector = new Detector(); SMSAlert sms = new SMSAlert(); DeviceAlert device = new DeviceAlert(); ServerAlert server = new ServerAlert(); detector.MonitorFaild += sms.SendSMS; detector.MonitorFaild += device.DoAlert; detector.MonitorFaild += server.DoAlert; detector.DoMonitor(); Console.ReadLine(); } } /// <summary> /// 枚举类型 /// </summary> enum DetectorEventType { Normal = 0, TemperatureHigh = 2, TemperatureLow = 4, HumidityHigh = 8, HumidityLow= 16 } /// <summary> /// 探头对象 /// </summary> class Detector { #region 内部成员 //探头参数:绑定的设备号,设备IP,通道号,楼层,所在地点 private int _detectorID = 0; private int _deviceNo; private string _deviceIP; private int _channel; private string _floor; private string _place; //内部参数:温/湿度当前值,报警上下限 private double _temperature; private double _humidity; private double _minTemperature; private double _maxTemperature; private double _minHumidity; private double _maxHumidity; #endregion #region 只读属性 public int DeviceNo { get { return _deviceNo; } } public string DeviceIP { get { return _deviceIP; } } public int Channel { get { return _channel; } } public double Temperature { get { return _temperature; } } public double Humidity { get { return _humidity; } } #endregion #region 事件与委托定义 //声明委托 public delegate void MonitorEventHandler(Object sender, MonitorEventArgs e); //声明事件 public event MonitorEventHandler MonitorFaild; /// <summary> /// MonitorEventArgs类,用于传递参数 /// </summary> public class MonitorEventArgs:EventArgs { public readonly double temperature; public readonly double humidity; public readonly int eventType; public MonitorEventArgs(int eventType, double temperature, double humidity) { this.eventType = eventType; this.temperature = temperature; this.humidity = humidity; } } #endregion #region 自定义事件 /// <summary> /// 温度过高 /// </summary> /// <param name="e"></param> protected virtual void OnMonitorFaild(MonitorEventArgs e) { if (MonitorFaild != null) { MonitorFaild(this, e); } } #endregion #region 公共方法 public void DoMonitor() { //从数据库读取探头信息 if(_detectorID==0) { GetDetectorInfo(); } System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 6000; timer.Enabled = true; timer.Elapsed += new ElapsedEventHandler(GetDetectorInfoByID); timer.Start(); } #endregion #region 私有方法 /// <summary> /// 获取探头信息 /// </summary>