WarningSystem.cs 4.16 KB
Newer Older
潘栩锋's avatar
潘栩锋 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
using FLY.OBJComponents.Common;
using FLY.OBJComponents.IService;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FLY.OBJComponents.Server
{
    /// <summary>
    /// 报警管理系统
    /// </summary>
    public class WarningSystem : INotifyPropertyChanged, IWarningService
    {
        #region IWarningService

        /// <summary>
        /// 使能
        /// </summary>
        public bool Enable { get; set; }
23 24 25 26
        /// <summary>
        /// 正在响铃
        /// </summary>
        public bool IsRinging { get; private set; }
潘栩锋's avatar
潘栩锋 committed
27 28 29
        /// <summary>
        /// 当前正在报警的!!!!!!
        /// </summary>
潘栩锋's avatar
潘栩锋 committed
30
        public IBuffer<FlyData_WarningHistory> ReasonList { get; private set; }
潘栩锋's avatar
潘栩锋 committed
31 32 33 34

        /// <summary>
        /// 最近报警列表
        /// </summary>
潘栩锋's avatar
潘栩锋 committed
35
        public IBuffer<FlyData_WarningHistory> NewestList { get; private set; }
潘栩锋's avatar
潘栩锋 committed
36 37 38 39 40 41 42 43 44

        #endregion



        public WarningSystem()
        {
            Enable = true;
            ReasonList = new Buffer<FlyData_WarningHistory>();
潘栩锋's avatar
潘栩锋 committed
45 46 47
        }
        public void Init() 
        {
潘栩锋's avatar
潘栩锋 committed
48 49
            NewestList = new BufferStorage<FlyData_WarningHistory>("warning_newest.csv");
        }
潘栩锋's avatar
潘栩锋 committed
50
        public void Init(IBufferAdd<FlyData_WarningHistory> newestList) 
51 52 53
        {
            NewestList = newestList;
        }
潘栩锋's avatar
潘栩锋 committed
54 55
        public void Reset()
        {
潘栩锋's avatar
潘栩锋 committed
56
            ReasonList.Reset();
57 58 59 60 61 62 63
            IsRinging = false;
        }


        public void Silence()
        {
            IsRinging = false;
潘栩锋's avatar
潘栩锋 committed
64
        }
潘栩锋's avatar
潘栩锋 committed
65

潘栩锋's avatar
潘栩锋 committed
66 67 68
        #region IWarningServiceSimple


69
        public void Add(int errcode, string description, ERR_STATE state)
潘栩锋's avatar
潘栩锋 committed
70
        {
71 72 73 74 75 76 77 78
            Add(errcode, description, state, "");
        }

        public void Add(int errcode, string description, ERR_STATE state, string accessory)
        {
            if (!Enable)
                return;

潘栩锋's avatar
潘栩锋 committed
79 80 81 82 83 84
            FlyData_WarningHistory reason = new FlyData_WarningHistory();
            reason.Time = DateTime.Now;

            reason.ErrCode = errcode;
            reason.Description = description;
            reason.State = state;
85
            reason.Accessory = accessory;
潘栩锋's avatar
潘栩锋 committed
86 87 88

            FlyData_WarningHistory error = null;
            Buffer<FlyData_WarningHistory> reasonList = ReasonList as Buffer<FlyData_WarningHistory>;
89
            int error_id = 0;
潘栩锋's avatar
潘栩锋 committed
90 91 92 93 94 95 96 97 98 99 100 101 102 103
            if (reasonList.Count > 0)
            {
                int idx = reasonList.list.FindIndex(e => e.ErrCode == errcode);
                if (idx >= 0)
                {
                    error_id = reasonList.GetID(idx);
                    error = reasonList.list[idx];
                }
            }
            switch (state)
            {
                case ERR_STATE.ON:
                    if (error == null)
                    {
104
                        reasonList.Add(reason.Clone());
潘栩锋's avatar
潘栩锋 committed
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

                    }
                    else
                    {
                        //已经有了,再发生,不管它。
                        return;
                    }
                    break;
                case ERR_STATE.OFF:
                    if (error == null)
                    {
                        //没有在报警,不管它。
                        return;
                    }
                    else
                    {
                        error.State = state;
122
                        reasonList.Remove(error_id);
潘栩锋's avatar
潘栩锋 committed
123 124 125 126

                    }
                    break;
            }
127 128 129 130
            var newestList = NewestList as IBufferAdd<FlyData_WarningHistory>;
            newestList.Add(reason);


潘栩锋's avatar
潘栩锋 committed
131 132
            if (reasonList.Count > 0)
            {
133
                IsRinging = true;
潘栩锋's avatar
潘栩锋 committed
134 135 136 137 138
            }
            else
            {
                Reset();
            }
潘栩锋's avatar
潘栩锋 committed
139 140 141 142 143 144 145 146 147 148 149 150 151 152
        }
        #endregion

        /// <summary>
        /// 获取能被交易的属性
        /// </summary>
        /// <returns></returns>
        public string[] GetPropertys()
        {
            return new string[] {
                "Enable"
            };
        }
        #region INotifyPropertyChanged 成员
153

潘栩锋's avatar
潘栩锋 committed
154 155 156 157 158 159
        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

    }
}