using FObjBase; using System; using System.Collections.Generic; using System.Linq; using System.Text; /// <summary> /// 公共类型 /// </summary> namespace FLY.Thick.BulkDataModule { /// <summary> /// 一幅数据是否有效 /// </summary> public enum FR_DATA_TYPE { /// <summary> /// 无效 /// </summary> INVALID = 0, /// <summary> /// 有效 /// </summary> VALID = 1 } /// <summary> /// /// </summary> public class FR_DATA : IPack2 { public FR_DATA_TYPE type; public int bookmark;// bookmark ID public DateTime timemark; public int[] m_data; public override string ToString() { return bookmark.ToString(); } public FR_DATA(int bm, int[] data, FR_DATA_TYPE type) { bookmark = bm; timemark = DateTime.Now; m_data = (int[])data.Clone(); this.type = type; } public FR_DATA() { } public bool TryParse(byte[] value, int index, out int cnt) { cnt = 4 + 8 + 4; if (index + cnt > value.Length) return false; int idx = index; bookmark = BitConverter.ToInt32(value, idx); idx += 4; try { timemark = new DateTime(BitConverter.ToInt64(value, idx)); } catch { timemark = DateTime.MinValue; } idx += 8; type = (FR_DATA_TYPE)BitConverter.ToInt32(value, idx); idx += 4; //data cnt += 4; if (index + cnt > value.Length) return false; int len = BitConverter.ToInt32(value, idx); idx += 4; cnt += len * 4; if (index + cnt > value.Length) return false; if (len > 0) { m_data = new int[len]; for (int i = 0; i < len; i++) { m_data[i] = BitConverter.ToInt32(value, idx); idx += 4; } } return true; } public byte[] ToBytes() { List<byte> buf = new List<byte>(); buf.AddRange(BitConverter.GetBytes(bookmark)); buf.AddRange(BitConverter.GetBytes(timemark.Ticks)); buf.AddRange(BitConverter.GetBytes((int)type)); if (m_data == null) { buf.AddRange(BitConverter.GetBytes(0)); } else { buf.AddRange(BitConverter.GetBytes(m_data.Length)); for (int i = 0; i < m_data.Length; i++) { buf.AddRange(BitConverter.GetBytes(m_data[i])); } } return buf.ToArray(); } public bool TryParse(byte[] value) { int cnt; return TryParse(value, 0, out cnt); } } /// <summary> /// 它是 struct, 值类型,所以不用 Clone!!!!! /// </summary> public struct TrendDataCell { /// <summary> /// 时间 /// </summary> public DateTime Time; /// <summary> /// 平均值 /// </summary> public int Avg; /// <summary> /// sigma /// </summary> public int Sigma; /// <summary> /// 类型 /// </summary> public FR_DATA_TYPE Type; /// <summary> /// /// </summary> /// <returns></returns> public override string ToString() { return Time.ToShortTimeString() + " " + Avg.ToString(); } #region IPack 成员 /// <summary> /// 输出20个字节 /// </summary> /// <returns></returns> public byte[] ToBytes() { List<byte> buf = new List<byte>(); buf.AddRange(BitConverter.GetBytes(Time.Ticks)); buf.AddRange(BitConverter.GetBytes(Avg)); buf.AddRange(BitConverter.GetBytes(Sigma)); buf.AddRange(BitConverter.GetBytes((int)Type)); return buf.ToArray(); } /// <summary> /// 使用20个字节转换 /// </summary> /// <param name="value"></param> /// <returns></returns> public bool TryParse(byte[] value, int startIndex ) { int count = 8 + 4 * 3; if (value.Length < count) return false; int idx = startIndex; Time = new DateTime(BitConverter.ToInt64(value, idx)); idx += 8; Avg = BitConverter.ToInt32(value, idx); idx += 4; Sigma = BitConverter.ToInt32(value, idx); idx += 4; Type = (FR_DATA_TYPE)BitConverter.ToInt32(value, idx); idx += 4; return true; } public TrendDataCell Clone() { return new TrendDataCell() { Time = Time, Avg = Avg, Sigma = Sigma, Type = Type }; } #endregion } /// <summary> /// 获取模式 /// </summary> public enum PushMode { /// <summary> /// 获取并且推送 /// </summary> GetAndPush, /// <summary> /// 只获取 /// </summary> Get } /// <summary> /// 它是 struct, 值类型,所以不用 Clone!!!!! /// </summary> public struct FrameDataCell { /// <summary> /// 平均值 /// </summary> public int Avg; /// <summary> /// sigma /// </summary> public int Sigma; /// <summary> /// /// </summary> /// <returns></returns> public override string ToString() { return Avg.ToString(); } #region IPack 成员 /// <summary> /// 输出20个字节 /// </summary> /// <returns></returns> public byte[] ToBytes() { List<byte> buf = new List<byte>(); buf.AddRange(BitConverter.GetBytes(Avg)); buf.AddRange(BitConverter.GetBytes(Sigma)); return buf.ToArray(); } /// <summary> /// 使用8个字节转换 /// </summary> /// <param name="value"></param> /// <param name="startIndex"></param> /// <returns></returns> public bool TryParse(byte[] value, int startIndex) { int count = 4 * 2; if (value.Length < count) return false; int idx = startIndex; Avg = BitConverter.ToInt32(value, idx); idx += 4; Sigma = BitConverter.ToInt32(value, idx); idx += 4; return true; } /// <summary> /// 复制 /// </summary> /// <returns></returns> public FrameDataCell Clone() { return new FrameDataCell() { Avg = Avg, Sigma = Sigma, }; } #endregion } }