public bool WriteGroup(GroupInfo group)
        {
            IConfigReader _config = FileConfigReader.SingleConfig;
            string root = _config[group.Area, group.Device]["event"];
            if (root == string.Empty) return false;
            string groupFile = FilePath.GetDateTimePathTimeFile(root, group.Area, group.Device, group.GroupTime, group.GroupTime, "group");

            FileInfo fiGroup = new FileInfo(groupFile);
            //若报警组目录不存在,则创建该目录
            if (!fiGroup.Directory.Exists) fiGroup.Directory.Create();

            using (StreamWriter swGroup = File.CreateText(fiGroup.FullName))
            {
                //存储报警组
                swGroup.WriteLine(group.GroupID);
                swGroup.WriteLine(group.Area);
                swGroup.WriteLine(group.Device);
                swGroup.WriteLine(group.HorizonAngle);
                swGroup.WriteLine(group.VerticalAngle);
                swGroup.WriteLine(group.AnalyzeCount);
                swGroup.WriteLine((int)group.GroupOperate);
                for (int i = 0; i < group.AlarmCount; i++)
                {
                    swGroup.WriteLine(group[i].AlarmID);
                }
            }

            return true;
        }
        public Bitmap ReadFrame(GroupInfo group, AlarmInfo alarm)
        {
            string root = FileConfigReader.SingleConfig[group.Area, group.Device]["event"];
            if (root == string.Empty) return null;

            string alarmFile = FilePath.GetDateTimePathTimeFile(root, group.Area, group.Device, new DateTime(alarm.GroupID), alarm.AlarmTime, "jpg");

            if (!File.Exists(alarmFile)) return null;

            return new Bitmap(alarmFile);
        }
        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            lock (this)
            {
                if (listBox1.SelectedItem != null && currentGroup != listBox1.SelectedItem)
                {
                    if (currentGroup != null)
                    {
                        images.Clear();
                    }

                    this.currentGroup = listBox1.SelectedItem as GroupInfo;

                }
            }
        }
        public bool WriteAlarm(GroupInfo group, AlarmInfo alarm, Bitmap frame)
        {
            IConfigReader _config = FileConfigReader.SingleConfig;
            string root = _config[group.Area, group.Device]["event"];
            if (root == string.Empty) return false;
            string groupPath = FilePath.GetDateTimePath(root, group.Area, group.Device, group.GroupTime);

            //若报警组目录不存在,则创建该目录
            if (!Directory.Exists(groupPath)) Directory.CreateDirectory(groupPath);

            string alarmFile = FilePath.GetDateTimePathTimeFile(root, group.Area, group.Device, group.GroupTime, alarm.AlarmTime, "alarm");
            string frameFile = FilePath.GetDateTimePathTimeFile(root, group.Area, group.Device, group.GroupTime, alarm.AlarmTime, "jpg");

            try
            {
                frame.Save(frameFile);
            }
            catch { return false; }

            FileInfo fiAlarm = new FileInfo(alarmFile);

            using (StreamWriter swAlarm = File.CreateText(fiAlarm.FullName))
            {
                //存储报警
                {
                    swAlarm.WriteLine(alarm.GroupID);
                    swAlarm.WriteLine(alarm.FrameIndex);
                    swAlarm.WriteLine(alarm.AlarmID);
                    int regionLength = Math.Min(alarm.AlarmRegion.Length, alarm.AlarmRegionType.Length);
                    for (int i = 0; i < regionLength; i++)
                    {
                        swAlarm.WriteLine(string.Format("{0},{1},{2},{3},{4}", alarm.AlarmRegion[i].X,
                            alarm.AlarmRegion[i].Y,
                            alarm.AlarmRegion[i].Width,
                            alarm.AlarmRegion[i].Height,
                            (int)alarm.AlarmRegionType[i]
                            ));
                    }
                }
            }

            return true;
        }
 private void PlayRecord(DateTime datetime)
 {
     tAlarm.Stop();
     tPlayer.Stop();
     group = null;
     this.Open(this.Area, this.Device, datetime);
     this.VBStartTime.Text = this.StartTime.ToString("HH:mm:ss");
     this.VBEndTime.Text = (this.StartTime + this.TotalTime).ToString("HH:mm:ss");
     isPlayRecord = true;
     this.Play();
     tPlayer.Start();
 }
 private void PlayAlarm(DateTime datetime)
 {
     this.Close();
     isPlayRecord = false;
     tAlarm.Stop();
     tPlayer.Stop();
     lock (this)
     {
         indexAlarm = 0;
         group = DGroups[datetime];
     }
     tAlarm.Start();
 }
        public GroupInfo[] ReadGroups(string area, string device, DateTime date)
        {
            string root = FileConfigReader.SingleConfig[area, device]["event"];
            if (root == string.Empty) return new GroupInfo[0] ;
            List<GroupInfo> groups = new List<GroupInfo>();
            //获取指定日期的报警组列表
            DirectoryInfo di = new DirectoryInfo(FilePath.GetDatePath(root, area, device, date));
            if (!di.Exists) return new GroupInfo[0];
            DirectoryInfo[] diGroups = di.GetDirectories();

            foreach (DirectoryInfo diGroup in diGroups)
            {
                FileInfo[] fiGroups = diGroup.GetFiles("*.group");
                if (fiGroups.Length == 0) continue;
                using (StreamReader srGroup = new StreamReader(fiGroups[0].FullName))
                {//读取所有报警信息
                    long groupID;
                    if (!long.TryParse(srGroup.ReadLine(), out groupID)) continue;
                    string groupArea = srGroup.ReadLine();
                    string groupDevice = srGroup.ReadLine();
                    short horizon;
                    if (!short.TryParse(srGroup.ReadLine(), out horizon)) continue;
                    short vertical;
                    if (!short.TryParse(srGroup.ReadLine(), out vertical)) continue;
                    int analyzeCount;
                    if (!int.TryParse(srGroup.ReadLine(), out analyzeCount)) continue;
                    int eventOperate;
                    if (!int.TryParse(srGroup.ReadLine(), out eventOperate)) continue;
                    string[] alarmIDs = srGroup.ReadToEnd().Split(new char[]{'\r','\n'}, StringSplitOptions.RemoveEmptyEntries);
                    GroupInfo group = new GroupInfo(groupID,groupArea,groupDevice,horizon,vertical,analyzeCount);

                    long alarmID;
                    //DateTime groupTime = new DateTime(groupID);
                    foreach (string id in alarmIDs)
                    {
                        if (!long.TryParse(id, out alarmID)) continue;
                        DateTime alarmTime = new DateTime(alarmID);
                        //获取指定报警信息路径
                        string alarmFile = FilePath.GetDateTimePathTimeFile(root, area, device, group.GroupTime, alarmTime, "alarm");
                        if (!File.Exists(alarmFile)) continue;

                        using (StreamReader srAlarm = new StreamReader(alarmFile))
                        {
                            long groupid;
                            if (!long.TryParse(srAlarm.ReadLine(), out groupid) || groupid != groupID) continue;
                            int frameIndex;
                            if (!int.TryParse(srAlarm.ReadLine(), out frameIndex)) continue;
                            long alarmid;
                            if (!long.TryParse(srAlarm.ReadLine(), out alarmid) || alarmid != alarmID) continue;
                            string[] regionAndType = srAlarm.ReadToEnd().Split('\n');
                            Rectangle[] regions = new Rectangle[regionAndType.Length];
                            int[] regionTypes = new int[regionAndType.Length];
                            for (int i = 0; i < regionAndType.Length; i++)
                            {
                                string[] XYWHT = regionAndType[i].Split(',');
                                if (XYWHT.Length != 5) continue;
                                int x, y, w, h, t;
                                if (!int.TryParse(XYWHT[0], out x)) continue;
                                if (!int.TryParse(XYWHT[1], out y)) continue;
                                if (!int.TryParse(XYWHT[2], out w)) continue;
                                if (!int.TryParse(XYWHT[3], out h)) continue;
                                if (!int.TryParse(XYWHT[4], out t)) continue;
                                regions[i] = new Rectangle(x, y, w, h);
                                regionTypes[i] = t;
                            }
                            AlarmInfo alarm = new AlarmInfo(groupid, frameIndex, alarmid, regions, regionTypes);

                            group.Add(alarm);
                        }
                    }

                    groups.Add(group);
                }
            }

            return groups.ToArray();
        }
        void analyzeStrategy_AnalyzeEnd(object sender, IAnalyze.EventArgsAnalyzeEnd e)
        {
            if (this.group != null && this.group.AlarmCount > 0)
            {
                //保存报警组
                this.alarmWriter.WriteGroup(this.group);

                OnAnalyzeEnd(new AlarmEventArgs(this.group, null));

                this.group = null;
            }
        }
        void analyzeStrategy_AnalyzeBegin(object sender, IAnalyze.EventArgsAnalyzeBegin e)
        {
            //创建报警组
            group = new GroupInfo(e.GroupID, this.areaName, this.deviceName, this.Horizon, this.Vertical, e.AnalyzeCount);

            OnAnalyzeBegin(new AlarmEventArgs(this.group, null));
        }
 /// <summary>
 /// 保存报警信息组
 /// </summary>
 /// <param name="group"></param>
 public void SaveGroupInfo(GroupInfo group)
 {
     this.alarmWriter.WriteGroup(group);
 }
 public AlarmEventArgs(GroupInfo group, AlarmInfo alarm)
 {
     this.Group = group;
     this.Alarm = alarm;
 }