using FLY.FeedbackRenZiJia.IService; using System; using System.Collections.Generic; using System.Linq; using System.Text; using FObjBase; using System.IO; using FLY.FeedbackRenZiJia.Common; namespace FLY.FeedbackRenZiJia.Server { public class SnapShotBuf:ISnapShotBuf { #region 快照 List<FlyData_SnapShot> mList = new List<FlyData_SnapShot>(); string snapshot_path = "snapshot.csv"; int BoltCnt; int ChannelCnt; public void Init(int boltCnt, int channelCnt) { //把记录中不是boltCnt,与 channelCnt 的删除 BoltCnt = boltCnt; ChannelCnt = channelCnt; Load(); } void Load() { try { mList.Clear(); string filepath = snapshot_path; using (StreamReader sw = new StreamReader(snapshot_path, Encoding.GetEncoding("GB2312"))) { string header = sw.ReadLine(); while (!sw.EndOfStream) { string item = sw.ReadLine(); FlyData_SnapShot f = new FlyData_SnapShot(); if (f.TryParse(header, item)) { mList.Add(f); } } } } catch { } var ss = from s in mList where (s.Heats.Count() != ChannelCnt) || (s.Thicks.Count() != BoltCnt) select s; List<FlyData_SnapShot> remove = new List<FlyData_SnapShot>(); remove.AddRange(ss); foreach (FlyData_SnapShot s in remove) { mList.Remove(s); } } void Save() { try { string filepath = snapshot_path; if (mList.Count() == 0) { return; } using (StreamWriter sw = new StreamWriter(filepath, false, Encoding.GetEncoding("GB2312"))) { sw.WriteLine(mList[0].GetHeader()); for (int i = 0; i < mList.Count(); i++) { sw.WriteLine(mList[i].ToString()); } } } catch { } } /// <summary> /// 获取快照 返回类型为 FlyData_SnapShot /// </summary> /// <param name="bookmark">记录点</param> /// <param name="AsyncDelegate"></param> /// <param name="AsyncState"></param> public void Get(int bookmark, AsyncCBHandler AsyncDelegate, object AsyncState) { var fs = from f in mList where f.Bookmark == bookmark select f; if (fs.Count() == 0) { AsyncDelegate(AsyncState, null); } else { AsyncDelegate(AsyncState, fs.First()); } } /// <summary> /// 设置快照 /// </summary> /// <param name="f">FlyData_SnapShot</param> public void Set(FlyData_SnapShot f) { var fs = from _f in mList where _f.Bookmark == f.Bookmark select _f; if (fs.Count() != 0) { FlyData_SnapShot s = fs.First(); s.Copy(f); } else { mList.Add(f); } Save(); } /// <summary> /// 删除快照 /// </summary> /// <param name="bookmark"></param> public void Del(int bookmark) { // 删除指定的项 // 1. 先找到要删除的对象。删除集合中所有Value=10的对象 List<FlyData_SnapShot> deleted = mList.FindAll(item => item.Bookmark == bookmark); // 2. 从集合中删除。注意:遍历的是 deleted 而不是原来的list! foreach (var item in deleted) { mList.Remove(item); } Save(); } /// <summary> /// 获取保存的快照列表 返回类型为 List<int> /// </summary> /// <param name="AsyncDelegate"></param> /// <param name="AsyncState"></param> public void GetList(AsyncCBHandler AsyncDelegate, object AsyncState) { var bookmarks = from f in mList select f.Bookmark; if (bookmarks.Count() == 0) { AsyncDelegate(AsyncState, null); } else { AsyncDelegate(AsyncState, bookmarks.ToList()); } } #endregion } }