diff --git a/Cdy.Tag.Common/Common/PointData.cs b/Cdy.Tag.Common/Common/PointData.cs new file mode 100644 index 0000000000000000000000000000000000000000..1432996f295ccc91afe9dfdfb601a63ef2776845 --- /dev/null +++ b/Cdy.Tag.Common/Common/PointData.cs @@ -0,0 +1,135 @@ +//============================================================== +// Copyright (C) 2020 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2020/4/29 13:52:48. +// Version 1.0 +// 种道洋 +//============================================================== + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + /// + /// + /// + public struct IntPointData + { + public IntPointData(int x,int y) + { + X = x; + Y = y; + } + public int X { get; set; } + public int Y { get; set; } + } + /// + /// + /// + public struct IntPoint3Data + { + public IntPoint3Data(int x, int y,int z) + { + X = x; + Y = y; + Z = z; + } + public int X { get; set; } + public int Y { get; set; } + public int Z { get; set; } + } + + /// + /// + /// + public struct UIntPointData + { + public UIntPointData(uint x, uint y) + { + X = x; + Y = y; + } + public uint X { get; set; } + public uint Y { get; set; } + } + /// + /// + /// + public struct UIntPoint3Data + { + public UIntPoint3Data(uint x, uint y, uint z) + { + X = x; + Y = y; + Z = z; + } + public uint X { get; set; } + public uint Y { get; set; } + public uint Z { get; set; } + } + + /// + /// + /// + public struct LongPointData + { + public LongPointData(long x, long y) + { + X = x; + Y = y; + } + public long X { get; set; } + public long Y { get; set; } + } + + /// + /// + /// + public struct LongPoint3Data + { + public LongPoint3Data(long x, long y, long z) + { + X = x; + Y = y; + Z = z; + } + public long X { get; set; } + public long Y { get; set; } + public long Z { get; set; } + } + + /// + /// + /// + public struct ULongPointData + { + public ULongPointData(ulong x, ulong y) + { + X = x; + Y = y; + } + public ulong X { get; set; } + public ulong Y { get; set; } + } + + /// + /// + /// + public struct ULongPoint3Data + { + public ULongPoint3Data(ulong x, ulong y, ulong z) + { + X = x; + Y = y; + Z = z; + } + + public ulong X { get; set; } + public ulong Y { get; set; } + public ulong Z { get; set; } + } + +} diff --git a/Cdy.Tag.Consume/Cdy.Tag.Consume.csproj b/Cdy.Tag.Consume/Cdy.Tag.Consume.csproj new file mode 100644 index 0000000000000000000000000000000000000000..9f5c4f4abb611103e8d62ab979dda9bfcb5a7fc2 --- /dev/null +++ b/Cdy.Tag.Consume/Cdy.Tag.Consume.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.0 + + + diff --git a/Cdy.Tag.Consume/IConsumeDriver.cs b/Cdy.Tag.Consume/IConsumeDriver.cs new file mode 100644 index 0000000000000000000000000000000000000000..96b257003490a36237f5aa388126c5e4c78e7bef --- /dev/null +++ b/Cdy.Tag.Consume/IConsumeDriver.cs @@ -0,0 +1,53 @@ +using System; + +namespace Cdy.Tag.Consume +{ + public interface IConsumeDriver + { + + #region ... Variables ... + + #endregion ...Variables... + + #region ... Events ... + + #endregion ...Events... + + #region ... Constructor... + + #endregion ...Constructor... + + #region ... Properties ... + + /// + /// + /// + string Name { get; } + + + #endregion ...Properties... + + #region ... Methods ... + + + /// + /// + /// + /// + bool Start(); + + /// + /// + /// + /// + bool Stop(); + + + #endregion ...Methods... + + #region ... Interfaces ... + + #endregion ...Interfaces... + + } +} diff --git a/Cdy.Tag.Driver/IRealTagDriver.cs b/Cdy.Tag.Driver/IRealTagDriver.cs index 431ea7dfaa8a32c3eeaf118845f815fbe274bba8..31b95fe229cfb68fae70b77ce675249ea3ceb854 100644 --- a/Cdy.Tag.Driver/IRealTagDriver.cs +++ b/Cdy.Tag.Driver/IRealTagDriver.cs @@ -55,6 +55,23 @@ namespace Cdy.Tag.Driver /// bool SetTagValue(List ids, object value); + /// + /// + /// + /// + /// + /// + bool SetPointValue(int id, params object[] values); + + /// + /// + /// + /// + /// + /// + + bool SetPointValue(List ids, params object[] values); + /// /// /// diff --git a/Cdy.Tag/His/CompressUnitbase.cs b/Cdy.Tag/His/CompressUnitbase.cs index 504a3bf66c01a370bb50682e4f65729046219868..1949ee7059a0615a47f8ef1fecde9dbfad13995e 100644 --- a/Cdy.Tag/His/CompressUnitbase.cs +++ b/Cdy.Tag/His/CompressUnitbase.cs @@ -272,6 +272,16 @@ namespace Cdy.Tag /// public abstract int DeCompressUIntValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result); + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// public abstract int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result); /// @@ -334,6 +344,9 @@ namespace Cdy.Tag /// public abstract int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result); + + + /// /// /// @@ -459,6 +472,45 @@ namespace Cdy.Tag public abstract int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public abstract int DeCompressAllPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public abstract T DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public abstract int DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result); + + public abstract CompressUnitbase Clone(); diff --git a/Cdy.Tag/Interface/HisQueryResult.cs b/Cdy.Tag/Interface/HisQueryResult.cs index 13c2a7fdb721af8e31ae30fe8def147626652736..0901e7e88d99a5c9c3cf23685bd283e10fde0f8c 100644 --- a/Cdy.Tag/Interface/HisQueryResult.cs +++ b/Cdy.Tag/Interface/HisQueryResult.cs @@ -198,6 +198,30 @@ namespace Cdy.Tag Marshal.Copy(sdata, 0, handle+ mPosition, sdata.Length); mPosition += sdata.Length; break; + case 12: + Add((IntPointData)value, time, qulity); + return; + case 13: + Add((UIntPointData)value, time, qulity); + return; + case 14: + Add((IntPoint3Data)value, time, qulity); + return; + case 15: + Add((UIntPoint3Data)value, time, qulity); + return; + case 16: + Add((LongPointData)value, time, qulity); + return; + case 17: + Add((ULongPointData)value, time, qulity); + return; + case 18: + Add((LongPoint3Data)value, time, qulity); + return; + case 19: + Add((ULongPoint3Data)value, time, qulity); + return; } MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); Marshal.WriteByte(handle + mCount + mQulityAddr, (byte)qulity); @@ -446,6 +470,300 @@ namespace Cdy.Tag mCount++; } + /// + /// + /// + /// + /// + /// + /// + public void AddPoint(int x,int y,DateTime time,byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteInt32((void*)handle, mPosition, x); + mPosition += 4; + MemoryHelper.WriteInt32((void*)handle, mPosition, y); + mPosition += 4; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + /// + /// + /// + /// + /// + /// + public void Add(IntPointData value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, time, qulity); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void AddPoint(int x, int y,int z, DateTime time, byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteInt32((void*)handle, mPosition, x); + mPosition += 4; + MemoryHelper.WriteInt32((void*)handle, mPosition, y); + mPosition += 4; + MemoryHelper.WriteInt32((void*)handle, mPosition, z); + mPosition += 4; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + /// + /// + /// + /// + /// + /// + public void Add(IntPoint3Data value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, value.Z, time, qulity); + } + + /// + /// + /// + /// + /// + /// + /// + public void AddPoint(uint x, uint y, DateTime time, byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteUInt32((void*)handle, mPosition, x); + mPosition += 4; + MemoryHelper.WriteUInt32((void*)handle, mPosition, y); + mPosition += 4; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + /// + /// + /// + /// + /// + /// + public void Add(UIntPointData value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, time, qulity); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void AddPoint(uint x, uint y, uint z, DateTime time, byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteUInt32((void*)handle, mPosition, x); + mPosition += 4; + MemoryHelper.WriteUInt32((void*)handle, mPosition, y); + mPosition += 4; + MemoryHelper.WriteUInt32((void*)handle, mPosition, z); + mPosition += 4; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + /// + /// + /// + /// + /// + /// + public void Add(UIntPoint3Data value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, value.Z, time, qulity); + } + + /// + /// + /// + /// + /// + /// + /// + public void AddPoint(long x, long y, DateTime time, byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteInt64((void*)handle, mPosition, x); + mPosition += 8; + MemoryHelper.WriteInt64((void*)handle, mPosition, y); + mPosition += 8; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + /// + /// + /// + /// + /// + /// + public void Add(LongPointData value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, time, qulity); + } + + public void AddPoint(long x, long y, long z, DateTime time, byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteInt64((void*)handle, mPosition, x); + mPosition += 8; + MemoryHelper.WriteInt64((void*)handle, mPosition, y); + mPosition += 8; + MemoryHelper.WriteInt64((void*)handle, mPosition, z); + mPosition += 8; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + /// + /// + /// + /// + /// + /// + public void Add(LongPoint3Data value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, value.Z, time, qulity); + } + + /// + /// + /// + /// + /// + /// + /// + public void AddPoint(ulong x, ulong y, DateTime time, byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteUInt64((void*)handle, mPosition, x); + mPosition += 8; + MemoryHelper.WriteUInt64((void*)handle, mPosition, y); + mPosition += 8; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + + /// + /// + /// + /// + /// + /// + public void Add(ULongPointData value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, time, qulity); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void AddPoint(ulong x, ulong y, ulong z, DateTime time, byte qulity) + { + if (mCount >= mLimite) + { + int newCount = (int)(mCount * 1.2); + Resize(newCount); + mLimite = newCount; + } + MemoryHelper.WriteUInt64((void*)handle, mPosition, x); + mPosition += 8; + MemoryHelper.WriteUInt64((void*)handle, mPosition, y); + mPosition += 8; + MemoryHelper.WriteUInt64((void*)handle, mPosition, z); + mPosition += 8; + MemoryHelper.WriteDateTime((void*)handle, mCount * 8 + mTimeAddr, time); + // mDataBuffer[mCount + mQulityAddr] = qulity; + Marshal.WriteByte(handle + mCount + mQulityAddr, qulity); + mCount++; + } + + + /// + /// + /// + /// + /// + /// + public void Add(ULongPoint3Data value, DateTime time, byte qulity) + { + AddPoint(value.X, value.Y, value.Z, time, qulity); + } + /// /// /// @@ -587,7 +905,32 @@ namespace Cdy.Tag case "string": mDataType = 11; return Const.StringSize; + case "IntPointdata": + mDataType = 12; + return 8; + case "UIntPointdata": + mDataType = 13; + return 8; + case "IntPoint3data": + mDataType = 14; + return 12; + case "UIntPoint3data": + mDataType = 15; + return 12; + case "LongPointdata": + mDataType = 16; + return 16; + case "ULongPointdata": + mDataType = 17; + return 16; + case "LongPoint3data": + mDataType = 18; + return 24; + case "ULongPoint3data": + mDataType = 19; + return 24; } + return 0; } diff --git a/Cdy.Tag/Interface/IRealData.cs b/Cdy.Tag/Interface/IRealData.cs index 608e646fd754d7cbef206893f984f4bff9e0286d..c67930df52aa7f39add725d083a330d68f4e370c 100644 --- a/Cdy.Tag/Interface/IRealData.cs +++ b/Cdy.Tag/Interface/IRealData.cs @@ -96,8 +96,6 @@ namespace Cdy.Tag void SetValue(Dictionary> values); - - /// /// /// @@ -363,10 +361,37 @@ namespace Cdy.Tag /// void SetValue(Dictionary> values); + /// + /// + /// + /// + /// + /// + /// + /// + bool SetPointValue(int id, byte quality, DateTime time, params object[] values); + + /// + /// + /// + /// + /// + /// + /// + bool SetPointValue(int id, byte quality, params object[] values); + + /// + /// + /// + /// + /// + /// + bool SetPointValue(int id, params object[] values); + #endregion #region 数据读取接口 - + /// /// /// @@ -497,6 +522,173 @@ namespace Cdy.Tag /// string ReadStringValue(int id, Encoding encoding, out byte qulity, out DateTime time); + /// + /// + /// + /// + /// + /// + /// + IntPointData ReadIntPointValue(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + UIntPointData ReadUIntPointValue(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + IntPoint3Data ReadIntPoint3Value(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + UIntPoint3Data ReadUIntPoint3Value(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + + LongPointData ReadLongPointValue(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + ULongPointData ReadULongPointValue(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + LongPoint3Data ReadLongPoint3Value(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + ULongPoint3Data ReadULongPoint3Value(int id, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + bool ReadULongPoint3Value(int id, out ulong x, out ulong y, out ulong z, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + bool ReadLongPoint3Value(int id, out long x, out long y, out long z, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + bool ReadULongPointValue(int id, out ulong x, out ulong y, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + bool ReadLongPointValue(int id, out long x, out long y, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + bool ReadUIntPoint3Value(int id, out uint x, out uint y, out uint z, out byte quality, out DateTime time); + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + + bool ReadIntPoint3Value(int id, out int x, out int y, out int z, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + + bool ReadUIntPointValue(int id, out uint x, out uint y, out byte quality, out DateTime time); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + + bool ReadIntPointValue(int id, out int x, out int y, out byte quality, out DateTime time); + #endregion #endregion ...Methods... diff --git a/DataRunner/Interface/IRealDataNotify.cs b/Cdy.Tag/Interface/IRealDataNotify.cs similarity index 100% rename from DataRunner/Interface/IRealDataNotify.cs rename to Cdy.Tag/Interface/IRealDataNotify.cs diff --git a/Cdy.Tag/Real/SpecialTags/IntPoint3Tag.cs b/Cdy.Tag/Real/SpecialTags/IntPoint3Tag.cs new file mode 100644 index 0000000000000000000000000000000000000000..62b50a3ee07fee95ca2938899c885c5749c4ab02 --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/IntPoint3Tag.cs @@ -0,0 +1,24 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class IntPoint3Tag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.IntPoint3; + + + } +} diff --git a/Cdy.Tag/Real/SpecialTags/IntPointTag.cs b/Cdy.Tag/Real/SpecialTags/IntPointTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..05f375109ecc0a7ca02dac3d421d9016fb3658d5 --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/IntPointTag.cs @@ -0,0 +1,24 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class IntPointTag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.IntPoint; + + + } +} diff --git a/Cdy.Tag/Real/SpecialTags/LongPoint3Tag.cs b/Cdy.Tag/Real/SpecialTags/LongPoint3Tag.cs new file mode 100644 index 0000000000000000000000000000000000000000..dc8d0f6c68826bf4e9f4e225ebd26b36e46a73e5 --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/LongPoint3Tag.cs @@ -0,0 +1,22 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class LongPoint3Tag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.LongPoint3; + } +} diff --git a/Cdy.Tag/Real/SpecialTags/LongPointTag.cs b/Cdy.Tag/Real/SpecialTags/LongPointTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..8b762ff902dca546bdb6b51dec715ff13b7faed2 --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/LongPointTag.cs @@ -0,0 +1,24 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class LongPointTag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.LongPoint; + + + } +} diff --git a/Cdy.Tag/Real/SpecialTags/UIntPoint3Tag.cs b/Cdy.Tag/Real/SpecialTags/UIntPoint3Tag.cs new file mode 100644 index 0000000000000000000000000000000000000000..da543d2c9816c4e0ae8edb934c6a3d3b57a0b16b --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/UIntPoint3Tag.cs @@ -0,0 +1,24 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class UIntPoint3Tag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.UIntPoint3; + + + } +} diff --git a/Cdy.Tag/Real/SpecialTags/UIntPointTag.cs b/Cdy.Tag/Real/SpecialTags/UIntPointTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..fad4a4fa8f21c2cda244797e6cce2c7311f92ec7 --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/UIntPointTag.cs @@ -0,0 +1,24 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class UIntPointTag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.UIntPoint; + + + } +} diff --git a/Cdy.Tag/Real/SpecialTags/ULongPoint3Tag.cs b/Cdy.Tag/Real/SpecialTags/ULongPoint3Tag.cs new file mode 100644 index 0000000000000000000000000000000000000000..d847b01f247d1d7b24c44e5735e43eb6784bb25d --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/ULongPoint3Tag.cs @@ -0,0 +1,24 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class ULongPoint3Tag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.ULongPoint3; + + + } +} diff --git a/Cdy.Tag/Real/SpecialTags/ULongPointTag.cs b/Cdy.Tag/Real/SpecialTags/ULongPointTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..8e4ea71ed5d5aa7df761735b6f2b4dffa08d4def --- /dev/null +++ b/Cdy.Tag/Real/SpecialTags/ULongPointTag.cs @@ -0,0 +1,24 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + public class ULongPointTag : Tagbase + { + /// + /// + /// + public override TagType Type => TagType.ULongPoint; + + + } +} diff --git a/Cdy.Tag/Real/TagType.cs b/Cdy.Tag/Real/TagType.cs index 72366b63fede6dc88c31366aa15e0dce305f4fe0..d1f8651054e3ec375c6436a5823dda536d87fa85 100644 --- a/Cdy.Tag/Real/TagType.cs +++ b/Cdy.Tag/Real/TagType.cs @@ -64,7 +64,39 @@ namespace Cdy.Tag /// /// /// - String + String, + /// + /// + /// + IntPoint, + /// + /// + /// + UIntPoint, + /// + /// + /// + LongPoint, + /// + /// + /// + ULongPoint, + /// + /// + /// + IntPoint3, + /// + /// + /// + UIntPoint3, + /// + /// + /// + LongPoint3, + /// + /// + /// + ULongPoint3 } public static class TagTypeExtends diff --git a/DataRunner/Real/ValueChangedNotifyProcesser.cs b/Cdy.Tag/Real/ValueChangedNotifyProcesser.cs similarity index 100% rename from DataRunner/Real/ValueChangedNotifyProcesser.cs rename to Cdy.Tag/Real/ValueChangedNotifyProcesser.cs diff --git a/Cdy.Tag/Security/PermissionDocument.cs b/Cdy.Tag/Security/PermissionDocument.cs index 85a098501a452af12a7016924338af13f43970be..7a1c74f126af5b85edd9d7d8a99a24459a303fdb 100644 --- a/Cdy.Tag/Security/PermissionDocument.cs +++ b/Cdy.Tag/Security/PermissionDocument.cs @@ -30,6 +30,13 @@ namespace Cdy.Tag #region ... Constructor... + + public PermissionDocument() + { + var superPermission = new PermissionItem() { Name = "Super", SuperPermission = true, EnableWrite = true,Desc="Super Permission" }; + Permissions.Add(superPermission.Name, superPermission); + } + #endregion ...Constructor... #region ... Properties ... diff --git a/Cdy.Tag/Security/PermissionItem.cs b/Cdy.Tag/Security/PermissionItem.cs index cd33bcf4e092da7050ac902fae36f7b9a54aaf8b..663a714b97b3d75e7c7c09ca5c9e4ded88091987 100644 --- a/Cdy.Tag/Security/PermissionItem.cs +++ b/Cdy.Tag/Security/PermissionItem.cs @@ -33,6 +33,11 @@ namespace Cdy.Tag /// public bool EnableWrite { get; set; } + /// + /// 超级权限 + /// + public bool SuperPermission { get; set; } + /// /// 允许访问的变量组 /// diff --git a/Cdy.Tag/Security/SecuritySerise.cs b/Cdy.Tag/Security/SecuritySerise.cs index e009f8f806ef55cb8f664345393c0c36d42b08b9..4e82d0368eb9cf87a962b362e05a1c938cb0c74b 100644 --- a/Cdy.Tag/Security/SecuritySerise.cs +++ b/Cdy.Tag/Security/SecuritySerise.cs @@ -211,6 +211,7 @@ namespace Cdy.Tag re.Password = xe.Attribute("Password").Value; if (xe.Attribute("Group") != null) re.Group = xe.Attribute("Group").Value; + if (xe.Attribute("Permissions") != null) { var pp = xe.Attribute("Permissions").Value; @@ -265,6 +266,7 @@ namespace Cdy.Tag re.SetAttributeValue("Name", permission.Name); re.SetAttributeValue("Desc", permission.Desc); re.SetAttributeValue("EnableWrite", permission.EnableWrite); + re.SetAttributeValue("SuperPermission", permission.SuperPermission); if (permission.Group != null) { StringBuilder sb = new StringBuilder(); @@ -293,6 +295,10 @@ namespace Cdy.Tag { re.EnableWrite = bool.Parse(xe.Attribute("EnableWrite").Value); } + if (xe.Attribute("SuperPermission") != null) + { + re.SuperPermission = bool.Parse(xe.Attribute("SuperPermission").Value); + } if (xe.Attribute("Group") != null) { re.Group = xe.Attribute("Group").Value.Split(new char[] { ',' },StringSplitOptions.RemoveEmptyEntries).ToList(); diff --git a/Cdy.Tag/Security/UserDocument.cs b/Cdy.Tag/Security/UserDocument.cs index e789fab906b3f8ac4744b9e492a5896c31d29f25..affac784de274511e47a85f3762e0a63d86ab832 100644 --- a/Cdy.Tag/Security/UserDocument.cs +++ b/Cdy.Tag/Security/UserDocument.cs @@ -117,9 +117,9 @@ namespace Cdy.Tag /// public void AddUserGroup(UserGroup user) { - if (!Groups.ContainsKey(user.Name)) + if (!Groups.ContainsKey(user.FullName)) { - Groups.Add(user.Name, user); + Groups.Add(user.FullName, user); } } @@ -142,9 +142,9 @@ namespace Cdy.Tag /// public void ModifyUserGroup(UserGroup user) { - if (Groups.ContainsKey(user.Name)) + if (Groups.ContainsKey(user.FullName)) { - Groups[user.Name] = user; + Groups[user.FullName] = user; } } diff --git a/Cdy.Tag/Security/UserItem.cs b/Cdy.Tag/Security/UserItem.cs index 39328b1a861f6ea5fccaf3f0c82c8860632d7207..df0a8ba749904fa8dd596d1b21ffd38ff70e6930 100644 --- a/Cdy.Tag/Security/UserItem.cs +++ b/Cdy.Tag/Security/UserItem.cs @@ -30,9 +30,14 @@ namespace Cdy.Tag /// public string Group { get; set; } + ///// + ///// 超级用户 + ///// + //public bool SuperUser { get; set; } + /// /// /// - public List Permissions { get; set; } + public List Permissions { get; set; } = new List(); } } diff --git a/DBDevelopClientApi/DevelopServiceHelper.cs b/DBDevelopClientApi/DevelopServiceHelper.cs index dcf58536354be753a5a85ff43453c38eff82b59d..e6ee173133e9c7b6ab872a837edc93efa78f881b 100644 --- a/DBDevelopClientApi/DevelopServiceHelper.cs +++ b/DBDevelopClientApi/DevelopServiceHelper.cs @@ -181,6 +181,286 @@ namespace DBDevelopClientApi return re; } + + #region Develop User + + /// + /// + /// + /// + /// + /// + public bool AddUser(string name, string password) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.NewUser(new DBDevelopService.NewUserRequest() { LoginId = mLoginId, UserName = name, Password = password }).Result; + } + return false; + } + + /// + /// + /// + /// + /// + public bool RemoveUser(string name) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.RemoveUser(new DBDevelopService.RemoveUserRequest() { LoginId = mLoginId, UserName = name }).Result; + } + return false; + } + + public bool UpdateUser(string name,List permissions) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + var req = new DBDevelopService.UpdateUserRequest() { LoginId = mLoginId, UserName = name }; + req.Permission.AddRange(permissions); + return mCurrentClient.UpdateUser(req).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + public bool SetUserPassword(string name,string password) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.ModifyPassword(new DBDevelopService.ModifyPasswordRequest() { LoginId = mLoginId, UserName = name,Password=password }).Result; + } + return false; + } + + + #endregion + + #region DatabaseUser + + /// + /// + /// + /// + /// + public Dictionary QueryDatabaseUserGroups(string database) + { + Dictionary re = new Dictionary(); + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + foreach (var vv in mCurrentClient.GetDatabaseUserGroup(new DBDevelopService.GetRequest() { Database = database, LoginId = mLoginId }).Group) + { + re.Add(vv.Name, vv.Parent); + } + } + return re; + } + + public List GetAllUserNames(string database) + { + List re = new List(); + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + var groups = QueryDatabaseUserGroups(database).Keys.ToList(); + groups.Add(""); + foreach (var vvg in groups) + { + foreach (var vv in mCurrentClient.GetDatabaseUserByGroup(new DBDevelopService.GetDatabaseUserByGroupRequest() { Database = database, LoginId = mLoginId, Group = vvg }).Users) + { + //Cdy.Tag.UserItem user = new Cdy.Tag.UserItem() { Name = vv.UserName, Group = vv.Group }; + //user.Permissions.AddRange(vv.Permission.ToArray()); + re.Add(vv.UserName); + } + } + } + return re; + } + + /// + /// + /// + /// + /// + /// + public List GetUsersByGroup(string database,string group) + { + List re = new List(); + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + foreach (var vv in mCurrentClient.GetDatabaseUserByGroup(new DBDevelopService.GetDatabaseUserByGroupRequest() { Database = database, LoginId = mLoginId,Group=group }).Users) + { + Cdy.Tag.UserItem user = new Cdy.Tag.UserItem() { Name = vv.UserName, Group = vv.Group }; + user.Permissions.AddRange(vv.Permission.ToArray()); + re.Add(user); + } + } + return re; + } + + /// + /// + /// + /// + /// + public List GetAllDatabasePermission(string database) + { + List re = new List(); + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + foreach (var vv in mCurrentClient.GetAllDatabasePermission(new DBDevelopService.GetAllDatabasePermissionRequest() { Database = database, LoginId = mLoginId }).Permission) + { + Cdy.Tag.PermissionItem user = new Cdy.Tag.PermissionItem() { Name = vv.Name, Group = vv.Group.ToList(),Desc=vv.Desc,EnableWrite=vv.EnableWrite,SuperPermission=vv.SuperPermission }; + re.Add(user); + } + } + return re; + } + + /// + /// + /// + /// + /// + /// + public bool RemoveDatabasePermission(string database,string name) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.RemoveDatabasePermission(new DBDevelopService.RemoveDatabasePermissionRequest() { Database = database, LoginId = mLoginId, Permission = name }).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + public bool UpdateDatabasePermission(string database,Cdy.Tag.PermissionItem permission) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + var req = new DBDevelopService.DatabasePermissionRequest(); + req.Database = database; + req.LoginId = mLoginId; + req.Permission = new DBDevelopService.DatabasePermission() { Name = permission.Name, Desc = permission.Desc, EnableWrite = permission.EnableWrite }; + if(permission.Group!=null) + req.Permission.Group.Add(permission.Group); + return mCurrentClient.UpdateDatabasePermission(req).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + public bool AddDatabaseUserGroup(string database, string name, string parentName) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.AddDatabaseUserGroup(new DBDevelopService.AddGroupRequest() { Database = database, LoginId = mLoginId, Name = name, ParentName = parentName }).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + /// + public bool ReNameDatabaseUserGroup(string database, string oldName, string newName) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.RenameDatabaseUserGroup(new DBDevelopService.RenameGroupRequest() { Database = database, LoginId = mLoginId, OldFullName = oldName, NewName = newName }).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + public bool RemoveDatabaseUserGroup(string database, string name) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.RemoveDatabaseUserGroup(new DBDevelopService.RemoveGroupRequest() { Database = database, LoginId = mLoginId, Name = name }).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + public bool UpdateDatabaseUser(string database,Cdy.Tag.UserItem user) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + var req = new DBDevelopService.UpdateDatabaseUserRequest() { Database = database, LoginId = mLoginId, UserName = user.Name, Group = user.Group }; + if(user.Permissions!=null) + req.Permission.AddRange(user.Permissions); + return mCurrentClient.UpdateDatabaseUser(req).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + /// + public bool UpdateDatabaseUserPassword(String database ,string user,string password) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + var req = new DBDevelopService.ModifyDatabaseUserPasswordRequest() { Database = database, LoginId = mLoginId, UserName = user, Password=password }; + return mCurrentClient.ModifyDatabaseUserPassword(req).Result; + } + return false; + } + + /// + /// + /// + /// + /// + /// + public bool RemoveDatabaseUser(string database, string name) + { + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + return mCurrentClient.RemoveDatabaseUser(new DBDevelopService.RemoveByNameRequest() { Database = database, LoginId = mLoginId, Name = name }).Result; + } + return false; + } + + #endregion + + + #region database permission + + #endregion + /// /// /// @@ -249,6 +529,74 @@ namespace DBDevelopClientApi return re; } + /// + /// + /// + /// + /// + /// + /// + /// + public Dictionary> QueryTagByGroup(string database, string group, int index, out int totalCount) + { + Dictionary> re = new Dictionary>(); + if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) + { + int idx = index; + var result = mCurrentClient.GetTagByGroup(new DBDevelopService.GetTagByGroupRequest() { Database = database, LoginId = mLoginId, Group = group, Index = idx }); + + totalCount = result.Count; + + if (result.Result) + { + Dictionary mRealTag = new Dictionary(); + foreach (var vv in result.RealTag) + { + var tag = GetTag((int)vv.TagType); + tag.Id = (int)vv.Id; + tag.LinkAddress = vv.LinkAddress; + tag.Name = vv.Name; + tag.Desc = vv.Desc; + tag.Group = vv.Group; + mRealTag.Add(tag.Id, tag); + } + + Dictionary mHisTag = new Dictionary(); + foreach (var vv in result.HisTag) + { + var tag = new Cdy.Tag.HisTag { Id = (int)vv.Id, TagType = (Cdy.Tag.TagType)vv.TagType, Type = (Cdy.Tag.RecordType)vv.Type, CompressType = (int)vv.CompressType }; + if (vv.Parameter.Count > 0) + { + tag.Parameters = new Dictionary(); + foreach (var vvv in vv.Parameter) + { + tag.Parameters.Add(vvv.Name, vvv.Value); + } + + } + mHisTag.Add(tag.Id, tag); + } + + foreach (var vv in mRealTag) + { + if (mHisTag.ContainsKey(vv.Key)) + { + re.Add(vv.Key, new Tuple(mRealTag[vv.Key], mHisTag[vv.Key])); + } + else + { + re.Add(vv.Key, new Tuple(mRealTag[vv.Key], null)); + } + } + } + } + else + { + totalCount = -1; + } + + return re; + } /// /// /// @@ -373,11 +721,11 @@ namespace DBDevelopClientApi /// /// /// - public bool AddGroup(string database,string name,string parentName) + public bool AddTagGroup(string database,string name,string parentName) { if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) { - return mCurrentClient.AddTagGroup(new DBDevelopService.AddTagGroupRequest() { Database = database, LoginId = mLoginId, Name = name, ParentName = parentName }).Result; + return mCurrentClient.AddTagGroup(new DBDevelopService.AddGroupRequest() { Database = database, LoginId = mLoginId, Name = name, ParentName = parentName }).Result; } return false; } @@ -389,11 +737,11 @@ namespace DBDevelopClientApi /// /// /// - public bool ReNameGroup(string database,string oldName,string newName) + public bool ReNameTagGroup(string database,string oldName,string newName) { if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) { - return mCurrentClient.RenameTagGroup(new DBDevelopService.RenameTagGroupRequest() { Database = database, LoginId = mLoginId,OldFullName=oldName,NewName=newName }).Result; + return mCurrentClient.RenameTagGroup(new DBDevelopService.RenameGroupRequest() { Database = database, LoginId = mLoginId,OldFullName=oldName,NewName=newName }).Result; } return false; } @@ -404,11 +752,11 @@ namespace DBDevelopClientApi /// /// /// - public bool RemoveGroup(string database,string name) + public bool RemoveTagGroup(string database,string name) { if (mCurrentClient != null && !string.IsNullOrEmpty(mLoginId)) { - return mCurrentClient.RemoveTagGroup(new DBDevelopService.RemoveTagGroupRequest() { Database = database, LoginId = mLoginId, Name = name }).Result; + return mCurrentClient.RemoveTagGroup(new DBDevelopService.RemoveGroupRequest() { Database = database, LoginId = mLoginId, Name = name }).Result; } return false; } diff --git a/DBDevelopClientApi/developService.proto b/DBDevelopClientApi/developService.proto index 25c5926f4a1792a953b5272a9bb1891f2f094a98..584ca8025be6414caf25ade9da82e0890996db65 100644 --- a/DBDevelopClientApi/developService.proto +++ b/DBDevelopClientApi/developService.proto @@ -19,6 +19,12 @@ service DevelopServer { //޸ûϢ rpc UpdateUser(UpdateUserRequest) returns (BoolResultReplay); + //ɾû + rpc RemoveUser(RemoveUserRequest) returns (BoolResultReplay); + + //ȡû + rpc GetUsers(GetRequest) returns (GetUsersReplay); + //öټݿ rpc QueryDatabase(QueryDatabaseRequest) returns (QueryDatabaseReplay); @@ -34,15 +40,41 @@ service DevelopServer { //ݿûϢ rpc UpdateDatabaseUser(UpdateDatabaseUserRequest) returns (BoolResultReplay); + //ɾݿû + rpc RemoveDatabaseUser(RemoveByNameRequest) returns (BoolResultReplay); + + //û + rpc AddDatabaseUserGroup(AddGroupRequest) returns (BoolResultReplay); + + //ȡû + rpc GetDatabaseUserGroup(GetRequest) returns (GetGroupMessageReply); + + //ɾû + rpc RemoveDatabaseUserGroup(RemoveGroupRequest) returns (BoolResultReplay); + + //û + rpc RenameDatabaseUserGroup(RenameGroupRequest) returns (BoolResultReplay); + + //ƶ + rpc MoveDatabaseUserGroup(MoveGroupRequest) returns (BoolResultReplay); + + //ͨȡû + rpc GetDatabaseUserByGroup(GetDatabaseUserByGroupRequest) returns (GetDatabaseUsersReplay); + //ݿȨ rpc NewDatabasePermission(DatabasePermissionRequest) returns (BoolResultReplay); + //ݿȨ rpc UpdateDatabasePermission(DatabasePermissionRequest) returns (BoolResultReplay); //ȡȨб rpc GetAllDatabasePermission(GetAllDatabasePermissionRequest) returns (GetAllDatabasePermissionReplay); + //ɾݿȨ + rpc RemoveDatabasePermission(RemoveDatabasePermissionRequest) returns (BoolResultReplay); + + // rpc AddTag(AddTagRequestMessage) returns (AddTagReplyMessage); @@ -59,16 +91,16 @@ service DevelopServer { rpc GetTagGroup(GetRequest) returns (GetTagGroupMessageReply); // - rpc AddTagGroup(AddTagGroupRequest) returns (BoolResultReplay); + rpc AddTagGroup(AddGroupRequest) returns (BoolResultReplay); // - rpc RemoveTagGroup(RemoveTagGroupRequest) returns (BoolResultReplay); + rpc RemoveTagGroup(RemoveGroupRequest) returns (BoolResultReplay); // - rpc RenameTagGroup(RenameTagGroupRequest) returns (BoolResultReplay); + rpc RenameTagGroup(RenameGroupRequest) returns (BoolResultReplay); // - rpc MoveTagGroup(MoveTagGroupRequest) returns (BoolResultReplay); + rpc MoveTagGroup(MoveGroupRequest) returns (BoolResultReplay); //ȡ rpc GetTagByGroup(GetTagByGroupRequest) returns (GetTagMessageReply); @@ -141,6 +173,14 @@ message GetAllDatabasePermissionReplay repeated DatabasePermission Permission=3; } + +message RemoveDatabasePermissionRequest +{ + string LoginId=1; + string Database=2; + string Permission=3; +} + // message DatabasePermissionRequest { @@ -155,7 +195,8 @@ message DatabasePermission string Name=1; string Desc=2; bool EnableWrite=3; - repeated string Group=4; + bool SuperPermission=4; + repeated string Group=5; } //½ݿû @@ -195,7 +236,6 @@ message NewUserRequest string loginId =1; string userName=2; string password=3; - repeated string permission=4; } @@ -215,6 +255,49 @@ message UpdateUserRequest repeated string permission=3; } +message RemoveUserRequest +{ + string loginId=1; + string userName=2; +} + +/// +message GetDatabaseUserByGroupRequest +{ + string LoginId=1; + string Database=2; + string Group=3; +} + +// +message GetDatabaseUsersReplay +{ + bool Result =1; + string ErroMessage=2; + repeated DatabaseUserMessage Users=3; +} + +//ݿûϢ +message DatabaseUserMessage +{ + string userName=1; + string Group=2; + repeated string permission=3; +} + +message GetUsersReplay +{ + bool Result =1; + string ErroMessage=2; + repeated UserMessage Users=3; +} + +message UserMessage +{ + string userName=1; + repeated string permission=2; +} + message NewDatabaseRequest { string loginId =1; @@ -274,7 +357,7 @@ message UpdateHisTagRequestMessage } // -message AddTagGroupRequest +message AddGroupRequest { string LoginId=1; string Database=2; @@ -282,8 +365,16 @@ message AddTagGroupRequest string ParentName=4; } +//ͨɾû +message RemoveByNameRequest +{ + string LoginId=1; + string Database=2; + string Name=3; +} + //ɾ -message RemoveTagGroupRequest +message RemoveGroupRequest { string LoginId=1; string Database=2; @@ -291,7 +382,7 @@ message RemoveTagGroupRequest } // -message RenameTagGroupRequest +message RenameGroupRequest { string LoginId=1; string Database=2; @@ -300,7 +391,7 @@ message RenameTagGroupRequest } // -message MoveTagGroupRequest +message MoveGroupRequest { string LoginId=1; string Database=2; @@ -390,6 +481,13 @@ message GetTagGroupMessageReply repeated TagGroup Group=3; } +message GetGroupMessageReply +{ + bool Result =1; + string ErroMessage=2; + repeated Group Group=3; +} + message GetHistTagMessageReply { bool Result =1; @@ -432,3 +530,9 @@ message TagGroup string Name=1; string Parent=2; } + +message Group +{ + string Name=1; + string Parent=2; +} diff --git a/DBDevelopService/Protos/developService.proto b/DBDevelopService/Protos/developService.proto index 25c5926f4a1792a953b5272a9bb1891f2f094a98..584ca8025be6414caf25ade9da82e0890996db65 100644 --- a/DBDevelopService/Protos/developService.proto +++ b/DBDevelopService/Protos/developService.proto @@ -19,6 +19,12 @@ service DevelopServer { //޸ûϢ rpc UpdateUser(UpdateUserRequest) returns (BoolResultReplay); + //ɾû + rpc RemoveUser(RemoveUserRequest) returns (BoolResultReplay); + + //ȡû + rpc GetUsers(GetRequest) returns (GetUsersReplay); + //öټݿ rpc QueryDatabase(QueryDatabaseRequest) returns (QueryDatabaseReplay); @@ -34,15 +40,41 @@ service DevelopServer { //ݿûϢ rpc UpdateDatabaseUser(UpdateDatabaseUserRequest) returns (BoolResultReplay); + //ɾݿû + rpc RemoveDatabaseUser(RemoveByNameRequest) returns (BoolResultReplay); + + //û + rpc AddDatabaseUserGroup(AddGroupRequest) returns (BoolResultReplay); + + //ȡû + rpc GetDatabaseUserGroup(GetRequest) returns (GetGroupMessageReply); + + //ɾû + rpc RemoveDatabaseUserGroup(RemoveGroupRequest) returns (BoolResultReplay); + + //û + rpc RenameDatabaseUserGroup(RenameGroupRequest) returns (BoolResultReplay); + + //ƶ + rpc MoveDatabaseUserGroup(MoveGroupRequest) returns (BoolResultReplay); + + //ͨȡû + rpc GetDatabaseUserByGroup(GetDatabaseUserByGroupRequest) returns (GetDatabaseUsersReplay); + //ݿȨ rpc NewDatabasePermission(DatabasePermissionRequest) returns (BoolResultReplay); + //ݿȨ rpc UpdateDatabasePermission(DatabasePermissionRequest) returns (BoolResultReplay); //ȡȨб rpc GetAllDatabasePermission(GetAllDatabasePermissionRequest) returns (GetAllDatabasePermissionReplay); + //ɾݿȨ + rpc RemoveDatabasePermission(RemoveDatabasePermissionRequest) returns (BoolResultReplay); + + // rpc AddTag(AddTagRequestMessage) returns (AddTagReplyMessage); @@ -59,16 +91,16 @@ service DevelopServer { rpc GetTagGroup(GetRequest) returns (GetTagGroupMessageReply); // - rpc AddTagGroup(AddTagGroupRequest) returns (BoolResultReplay); + rpc AddTagGroup(AddGroupRequest) returns (BoolResultReplay); // - rpc RemoveTagGroup(RemoveTagGroupRequest) returns (BoolResultReplay); + rpc RemoveTagGroup(RemoveGroupRequest) returns (BoolResultReplay); // - rpc RenameTagGroup(RenameTagGroupRequest) returns (BoolResultReplay); + rpc RenameTagGroup(RenameGroupRequest) returns (BoolResultReplay); // - rpc MoveTagGroup(MoveTagGroupRequest) returns (BoolResultReplay); + rpc MoveTagGroup(MoveGroupRequest) returns (BoolResultReplay); //ȡ rpc GetTagByGroup(GetTagByGroupRequest) returns (GetTagMessageReply); @@ -141,6 +173,14 @@ message GetAllDatabasePermissionReplay repeated DatabasePermission Permission=3; } + +message RemoveDatabasePermissionRequest +{ + string LoginId=1; + string Database=2; + string Permission=3; +} + // message DatabasePermissionRequest { @@ -155,7 +195,8 @@ message DatabasePermission string Name=1; string Desc=2; bool EnableWrite=3; - repeated string Group=4; + bool SuperPermission=4; + repeated string Group=5; } //½ݿû @@ -195,7 +236,6 @@ message NewUserRequest string loginId =1; string userName=2; string password=3; - repeated string permission=4; } @@ -215,6 +255,49 @@ message UpdateUserRequest repeated string permission=3; } +message RemoveUserRequest +{ + string loginId=1; + string userName=2; +} + +/// +message GetDatabaseUserByGroupRequest +{ + string LoginId=1; + string Database=2; + string Group=3; +} + +// +message GetDatabaseUsersReplay +{ + bool Result =1; + string ErroMessage=2; + repeated DatabaseUserMessage Users=3; +} + +//ݿûϢ +message DatabaseUserMessage +{ + string userName=1; + string Group=2; + repeated string permission=3; +} + +message GetUsersReplay +{ + bool Result =1; + string ErroMessage=2; + repeated UserMessage Users=3; +} + +message UserMessage +{ + string userName=1; + repeated string permission=2; +} + message NewDatabaseRequest { string loginId =1; @@ -274,7 +357,7 @@ message UpdateHisTagRequestMessage } // -message AddTagGroupRequest +message AddGroupRequest { string LoginId=1; string Database=2; @@ -282,8 +365,16 @@ message AddTagGroupRequest string ParentName=4; } +//ͨɾû +message RemoveByNameRequest +{ + string LoginId=1; + string Database=2; + string Name=3; +} + //ɾ -message RemoveTagGroupRequest +message RemoveGroupRequest { string LoginId=1; string Database=2; @@ -291,7 +382,7 @@ message RemoveTagGroupRequest } // -message RenameTagGroupRequest +message RenameGroupRequest { string LoginId=1; string Database=2; @@ -300,7 +391,7 @@ message RenameTagGroupRequest } // -message MoveTagGroupRequest +message MoveGroupRequest { string LoginId=1; string Database=2; @@ -390,6 +481,13 @@ message GetTagGroupMessageReply repeated TagGroup Group=3; } +message GetGroupMessageReply +{ + bool Result =1; + string ErroMessage=2; + repeated Group Group=3; +} + message GetHistTagMessageReply { bool Result =1; @@ -432,3 +530,9 @@ message TagGroup string Name=1; string Parent=2; } + +message Group +{ + string Name=1; + string Parent=2; +} diff --git a/DBDevelopService/Services/DevelopServerService.cs b/DBDevelopService/Services/DevelopServerService.cs index b733fae257adb8910927cc580952d1673a457d61..47ed9c664aa86de801e0b4ce54eaaa961555568c 100644 --- a/DBDevelopService/Services/DevelopServerService.cs +++ b/DBDevelopService/Services/DevelopServerService.cs @@ -70,7 +70,7 @@ namespace DBDevelopService { foreach (var vv in db.Security.Permission.Permissions) { - var dd = new DatabasePermission() { Name = vv.Value.Name, Desc = vv.Value.Desc, EnableWrite = vv.Value.EnableWrite }; + var dd = new DatabasePermission() { Name = vv.Value.Name, Desc = vv.Value.Desc, EnableWrite = vv.Value.EnableWrite,SuperPermission=vv.Value.SuperPermission }; dd.Group.AddRange(vv.Value.Group); pers.Add(dd); } @@ -162,9 +162,44 @@ namespace DBDevelopService var db = DbManager.Instance.GetDatabase(request.Database); if (db != null) { + if(db.Security.Permission.Permissions.ContainsKey(request.Permission.Name)) + { + var pp = db.Security.Permission.Permissions[request.Permission.Name]; + pp.Group = request.Permission.Group.ToList(); + pp.EnableWrite = request.Permission.EnableWrite; + pp.Desc = request.Permission.Desc; + } + else + { + var pp = new Cdy.Tag.PermissionItem() { Name = request.Permission.Name, Desc = request.Permission.Desc, EnableWrite = request.Permission.EnableWrite }; + pp.Group.AddRange(request.Permission.Group); + db.Security.Permission.Add(pp); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + /// + /// + /// + /// + /// + /// + public override Task RemoveDatabasePermission(RemoveDatabasePermissionRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId, PermissionDocument.ModifyPermission)) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); } - return base.UpdateDatabasePermission(request, context); + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + if (db.Security.Permission.Permissions.ContainsKey(request.Permission)) + { + db.Security.Permission.Permissions.Remove(request.Permission); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); } /// @@ -189,10 +224,196 @@ namespace DBDevelopService user.Permissions = request.Permission.ToList(); user.Group = request.Group; } + else + { + var user = new Cdy.Tag.UserItem() { Name = request.UserName,Group=request.Group }; + user.Permissions = request.Permission.ToList(); + db.Security.User.AddUser(user); + } } return Task.FromResult(new BoolResultReplay() { Result = true }); } + /// + /// + /// + /// + /// + /// + public override Task RemoveDatabaseUser(RemoveByNameRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId, PermissionDocument.DeletePermission)) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var uss = db.Security.User.Users; + if (uss.ContainsKey(request.Name)) + { + db.Security.User.RemoveUser(request.Name); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + + /// + /// + /// + /// + /// + /// + public override Task AddDatabaseUserGroup(AddGroupRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId, PermissionDocument.NewPermission)) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var user = new Cdy.Tag.UserGroup() { Name = request.Name }; + var usergroup = db.Security.User.GetUserGroup(request.ParentName); + user.Parent = usergroup; + db.Security.User.AddUserGroup(user); + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + + /// + /// + /// + /// + /// + /// + public override Task GetDatabaseUserGroup(GetRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId)) + { + return Task.FromResult(new GetGroupMessageReply() { Result = false }); + } + GetGroupMessageReply re = new GetGroupMessageReply(); + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + foreach(var vgg in db.Security.User.Groups) + { + re.Group.Add(new Group() { Name = vgg.Value.Name, Parent = vgg.Value.Parent != null ? vgg.Value.Parent.FullName : "" }); + } + } + return Task.FromResult(re); + } + + /// + /// + /// + /// + /// + /// + public override Task GetDatabaseUserByGroup(GetDatabaseUserByGroupRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId)) + { + return Task.FromResult(new GetDatabaseUsersReplay() { Result = false }); + } + + GetDatabaseUsersReplay re = new GetDatabaseUsersReplay(); + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + foreach (var vgg in db.Security.User.Users.Where(e=>e.Value.Group == request.Group)) + { + var user = new DatabaseUserMessage() { UserName = vgg.Value.Name, Group = vgg.Value.Group }; + user.Permission.AddRange(vgg.Value.Permissions); + re.Users.Add(user); + } + } + return Task.FromResult(re); + } + + /// + /// + /// + /// + /// + /// + public override Task MoveDatabaseUserGroup(MoveGroupRequest request, ServerCallContext context) + { + + if (!CheckLoginId(request.LoginId, PermissionDocument.NewPermission)) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + string ofname = request.OldParentName + "." + request.Name; + var pgroup = db.Security.User.GetUserGroup(request.NewParentName); + + var usergroup = db.Security.User.GetUserGroup(ofname); + if (usergroup != null) + { + db.Security.User.RemoveUserGroup(ofname); + usergroup.Parent = pgroup; + db.Security.User.AddUserGroup(usergroup); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + + /// + /// + /// + /// + /// + /// + public override Task RemoveDatabaseUserGroup(RemoveGroupRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId, PermissionDocument.NewPermission)) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var usergroup = db.Security.User.GetUserGroup(request.Name); + if(usergroup!=null) + { + db.Security.User.RemoveUserGroup(usergroup.Name); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + + /// + /// + /// + /// + /// + /// + public override Task RenameDatabaseUserGroup(RenameGroupRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId, PermissionDocument.NewPermission)) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var usergroup = db.Security.User.GetUserGroup(request.OldFullName); + if (usergroup != null) + { + usergroup.Name = request.NewName; + string sname = usergroup.FullName; + db.Security.User.RemoveUserGroup(request.OldFullName); + db.Security.User.AddUserGroup(usergroup); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + + #endregion @@ -256,6 +477,49 @@ namespace DBDevelopService return Task.FromResult(new BoolResultReplay() { Result = true }); } + /// + /// + /// + /// + /// + /// + public override Task GetUsers(GetRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId, PermissionDocument.AdminPermission)) + { + return Task.FromResult(new GetUsersReplay() { Result = false }); + } + + GetUsersReplay re = new GetUsersReplay() { Result = true }; + foreach (var vv in SecurityManager.Manager.Securitys.User.Users) + { + var user = new UserMessage() { UserName = vv.Value.Name }; + user.Permission.AddRange(vv.Value.Permissions); + re.Users.Add(user); + } + return Task.FromResult(re); + } + + /// + /// + /// + /// + /// + /// + public override Task RemoveUser(RemoveUserRequest request, ServerCallContext context) + { + if (!CheckLoginId(request.LoginId, PermissionDocument.AdminPermission)) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); + } + var user = SecurityManager.Manager.Securitys.User.GetUser(request.UserName); + if (user != null) + { + SecurityManager.Manager.Securitys.User.RemoveUser(request.UserName); + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + #endregion #region database @@ -335,7 +599,7 @@ namespace DBDevelopService /// /// /// - public override Task AddTagGroup(AddTagGroupRequest request, ServerCallContext context) + public override Task AddTagGroup(AddGroupRequest request, ServerCallContext context) { if (!CheckLoginId(request.LoginId, PermissionDocument.NewPermission)) { @@ -358,7 +622,7 @@ namespace DBDevelopService /// /// /// - public override Task RenameTagGroup(RenameTagGroupRequest request, ServerCallContext context) + public override Task RenameTagGroup(RenameGroupRequest request, ServerCallContext context) { if (!CheckLoginId(request.LoginId, PermissionDocument.ModifyPermission)) { @@ -380,7 +644,7 @@ namespace DBDevelopService /// /// /// - public override Task RemoveTagGroup(RemoveTagGroupRequest request, ServerCallContext context) + public override Task RemoveTagGroup(RemoveGroupRequest request, ServerCallContext context) { if (!CheckLoginId(request.LoginId, PermissionDocument.ModifyPermission)) { @@ -401,7 +665,7 @@ namespace DBDevelopService /// /// /// - public override Task MoveTagGroup(MoveTagGroupRequest request, ServerCallContext context) + public override Task MoveTagGroup(MoveGroupRequest request, ServerCallContext context) { if (!CheckLoginId(request.LoginId, PermissionDocument.ModifyPermission)) { diff --git a/DBStudio/Program.cs b/DBStudio/Program.cs index 35dc48b8bfaaabda0efe6bbc7cc824de8be9896f..b38dd7cf4799e9cebf1229e61985419c1c63acb8 100644 --- a/DBStudio/Program.cs +++ b/DBStudio/Program.cs @@ -1,6 +1,9 @@ using Cdy.Tag; using System; using System.Text; +using System.Linq; +using System.Collections.Generic; +using System.IO; namespace DBStudio { @@ -21,11 +24,11 @@ namespace DBStudio } DBDevelopService.Service.Instanse.Start(port, webPort); - Console.WriteLine("输入exit退出服务"); - Console.WriteLine(Res.Get("HelpMsg")); + OutByLine("", "输入exit退出服务"); + OutByLine("", Res.Get("HelpMsg")); while (true) { - Console.Write(">"); + OutInLine("", ""); string[] cmd = Console.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (cmd.Length == 0) continue; @@ -33,7 +36,7 @@ namespace DBStudio if (cmsg == "exit") { - Console.WriteLine("确定要退出?输入y确定,输入其他任意字符取消"); + OutByLine("","确定要退出?输入y确定,输入其他任意字符取消"); cmd = Console.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (cmd.Length == 0) continue; if (cmd[0].ToLower() == "y") @@ -44,15 +47,56 @@ namespace DBStudio if (cmd.Length > 1) ProcessDatabaseCreat(cmd[1]); } + else if (cmsg == "list") + { + ListDatabase(); + } else if (cmsg == "h") { - Console.WriteLine(GetHelpString()); + OutByLine("",GetHelpString()); } } DBDevelopService.Service.Instanse.Stop(); } + /// + /// + /// + /// + /// + private static void OutByLine(string prechar,string msg) + { + Console.WriteLine(prechar+">" + msg); + } + + /// + /// + /// + /// + /// + private static void OutInLine(string prechar, string msg) + { + Console.Write(prechar + ">" + msg); + } + + /// + /// + /// + private static void ListDatabase() + { + if (!DBDevelopService.DbManager.Instance.IsLoaded) + DBDevelopService.DbManager.Instance.Load(); + + StringBuilder sb = new StringBuilder(); + foreach(var vdd in DBDevelopService.DbManager.Instance.ListDatabase()) + { + sb.Append(vdd+","); + } + sb.Length = sb.Length > 1 ? sb.Length - 1 : sb.Length; + OutByLine("", sb.ToString()); + } + /// /// /// @@ -111,10 +155,10 @@ namespace DBStudio db = Database.New(name); } - Console.WriteLine(Res.Get("HelpMsg")); + OutByLine(name,Res.Get("HelpMsg")); while (true) { - Console.Write(name+">"); + OutInLine(name, ""); string[] cmd = Console.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (cmd.Length == 0) continue; string cmsg = cmd[0].ToLower(); @@ -132,6 +176,10 @@ namespace DBStudio { RemoveTag(db, cmd[1].ToLower()); } + else if (cmsg == "clear") + { + ClearTag(db); + } else if (cmsg == "update") { UpdateTag(db, cmd[1].ToLower(), cmd[2], cmd[3]); @@ -142,15 +190,33 @@ namespace DBStudio } else if (cmsg == "import") { - Import(db, cmd[1].ToLower()); + if (cmd.Length > 1) + Import(db, cmd[1].ToLower()); + else + { + Import(db, name + ".csv"); + } + } + else if (cmsg == "export") + { + if(cmd.Length>1) + ExportToCSV(db, cmd[1].ToLower()); + else + { + ExportToCSV(db, name+".csv"); + } } else if (cmsg == "list") { - ListDatabase(db, cmd[1].ToLower()); + string ctype = cmd.Length > 1 ? cmd[1] : ""; + ListDatabase(db, ctype); } else if (cmsg == "h") { - + if(cmd.Length==1) + { + Console.WriteLine(GetDbManagerHelpString()); + } } else if (cmsg == "exit") { @@ -159,26 +225,161 @@ namespace DBStudio } catch { - Console.Write(name + ">" + Res.Get("ErroParameter")); + OutByLine(name ,Res.Get("ErroParameter")); } } } + private static string GetDbManagerHelpString() + { + StringBuilder re = new StringBuilder(); + re.AppendLine(); + re.AppendLine("add [tagtype] [tagname] [linkaddress] [repeat] // add numbers tag to database "); + re.AppendLine("remove [tagname] // remove a tag"); + re.AppendLine("clear // clear all tags in database"); + re.AppendLine("update [tagname] [propertyname] [propertyvalue] // update value of a poperty in a tag"); + re.AppendLine("updatehis [tagname] [propertyname] [propertyvalue] // update value of a poperty in a tag's his config"); + re.AppendLine("import [filename] //import tags from a csvfile"); + re.AppendLine("export [filename] //export tags to a csvfile"); + re.AppendLine("list [tagtype] //the sumery info of specical type tags or all tags"); + re.AppendLine("exit //exit and back to parent"); + + return re.ToString(); + } + /// /// /// /// /// - private static void ListDatabase(Database database, string type) + private static void ListDatabase(Database database, string type="") { - if(string.IsNullOrEmpty(type)) + if(!string.IsNullOrEmpty(type)) { - + int count = database.RealDatabase.Tags.Values.Where(e => e.Type == (TagType)Enum.Parse(typeof(TagType),type)).Count(); + OutByLine(database.Name,string.Format(Res.Get("TagMsg"), count, type)); } else { + foreach (TagType vv in Enum.GetValues(typeof(TagType))) + { + int count = database.RealDatabase.Tags.Values.Where(e => e.Type == vv).Count(); + OutByLine(database.Name, string.Format(Res.Get("TagMsg"), count, vv.ToString())); + } + } + } + + /// + /// + /// + /// + /// + private static void ExportToCSV(Database database, string file) + { + string sfile = file; + + if (!System.IO.Path.IsPathRooted(sfile)) + { + sfile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(typeof(Program).Assembly.Location), sfile); } + + var stream = new StreamWriter(File.Open(sfile, FileMode.OpenOrCreate, FileAccess.ReadWrite)); + foreach(var vv in database.RealDatabase.Tags) + { + if(database.HisDatabase.HisTags.ContainsKey(vv.Key)) + { + stream.WriteLine(SaveToCSVString(vv.Value, database.HisDatabase.HisTags[vv.Key])); + } + else + { + stream.WriteLine(SaveToCSVString(vv.Value, null)); + + } + } + stream.Close(); + } + + /// + /// + /// + /// + /// + /// + public static string SaveToCSVString(Tagbase mRealTagMode,HisTag mHisTagMode) + { + StringBuilder sb = new StringBuilder(); + sb.Append(mRealTagMode.Id + ","); + sb.Append(mRealTagMode.Name + ","); + sb.Append(mRealTagMode.Desc + ","); + sb.Append(mRealTagMode.Group + ","); + sb.Append(mRealTagMode.Type + ","); + sb.Append(mRealTagMode.LinkAddress + ","); + if (mHisTagMode != null) + { + sb.Append(mHisTagMode.Type + ","); + sb.Append(mHisTagMode.Circle + ","); + sb.Append(mHisTagMode.CompressType + ","); + if (mHisTagMode.Parameters != null) + { + foreach (var vv in mHisTagMode.Parameters) + { + sb.Append(vv.Key + ","); + sb.Append(vv.Value + ","); + } + } + } + sb.Length = sb.Length > 0 ? sb.Length - 1 : sb.Length; + return sb.ToString(); + } + + /// + /// + /// + /// + public static Tuple LoadFromCSVString(string val) + { + string[] stmp = val.Split(new char[] { ',' }); + Cdy.Tag.TagType tp = (Cdy.Tag.TagType)Enum.Parse(typeof(Cdy.Tag.TagType), stmp[4]); + var realtag = TagTypeExtends.GetTag(tp); + + realtag.Id = int.Parse(stmp[0]); + realtag.Name = stmp[1]; + realtag.Desc = stmp[2]; + realtag.Group = stmp[3]; + realtag.LinkAddress = stmp[5]; + + if (stmp.Length > 6) + { + Cdy.Tag.HisTag histag = new HisTag(); + histag.Type = (Cdy.Tag.RecordType)Enum.Parse(typeof(Cdy.Tag.RecordType), stmp[6]); + + histag.Circle = long.Parse(stmp[7]); + histag.CompressType = int.Parse(stmp[8]); + histag.Parameters = new Dictionary(); + histag.TagType = realtag.Type; + histag.Id = realtag.Id; + + for (int i = 9; i < stmp.Length; i++) + { + string skey = stmp[i]; + if (string.IsNullOrEmpty(skey)) + { + break; + } + double dval = double.Parse(stmp[i + 1]); + + if (!histag.Parameters.ContainsKey(skey)) + { + histag.Parameters.Add(skey, dval); + } + + i++; + } + return new Tuple(realtag, histag); + } + + return new Tuple(realtag, null); } /// @@ -186,22 +387,38 @@ namespace DBStudio /// /// /// - private static void Import(Database database,string file) + private static void Import(Database database, string file) { string sfile = file; - if(!System.IO.Path.IsPathRooted(sfile)) + + if (!System.IO.Path.IsPathRooted(sfile)) { sfile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(typeof(Program).Assembly.Location), sfile); } - if(System.IO.File.Exists(sfile)) + if (System.IO.File.Exists(sfile)) { var reader = new System.IO.StreamReader(System.IO.File.Open(sfile, System.IO.FileMode.Open)); - while(reader.Peek()>0) + while (reader.Peek() > 0) { var cmd = reader.ReadLine(); - ProcessDatabaseCommand(database, cmd); + if (sfile.EndsWith(".cmd")) + { + ProcessDatabaseCommand(database, cmd); + } + else if (sfile.EndsWith(".csv")) + { + var vres = LoadFromCSVString(cmd); + database.RealDatabase.AddOrUpdate(vres.Item1); + if(vres.Item2!=null) + { + database.HisDatabase.AddOrUpdate(vres.Item2); + } + } + } } + + } /// @@ -294,6 +511,16 @@ namespace DBStudio } } + /// + /// + /// + /// + private static void ClearTag(Database database) + { + database.RealDatabase.Tags.Clear(); + database.HisDatabase.HisTags.Clear(); + } + /// /// /// @@ -522,11 +749,15 @@ namespace DBStudio { StringBuilder re = new StringBuilder(); re.AppendLine(); - re.AppendLine("db [databasename] // " + Res.Get("GDMsg")); - re.AppendLine("exit // " + Res.Get("Exit")); - re.AppendLine("h // " + Res.Get("HMsg")); + re.AppendLine("db [databasename] // " + Res.Get("GDMsg")); + re.AppendLine("list // List all exist database"); + re.AppendLine("exit // " + Res.Get("Exit")); + re.AppendLine("h // " + Res.Get("HMsg")); return re.ToString(); } + + + } } diff --git a/DBStudio/Properties/Resources.Designer.cs b/DBStudio/Properties/Resources.Designer.cs index 67270d22a1d6c312c6c03d3b96b561d574d65cb8..b79f6a3b5daf1bb281a9996498a0df5d70abb74a 100644 --- a/DBStudio/Properties/Resources.Designer.cs +++ b/DBStudio/Properties/Resources.Designer.cs @@ -104,5 +104,14 @@ namespace DBInStudioServer.Properties { return ResourceManager.GetString("HMsg", resourceCulture); } } + + /// + /// 查找类似 {0} {1} Tag 的本地化字符串。 + /// + internal static string TagMsg { + get { + return ResourceManager.GetString("TagMsg", resourceCulture); + } + } } } diff --git a/DBStudio/Properties/Resources.resx b/DBStudio/Properties/Resources.resx index 1509a86ed79e3b3787d555208adcf33d6e746d72..0ede9dbcecd2dedca11ab39484ebe3c3a7dc9100 100644 --- a/DBStudio/Properties/Resources.resx +++ b/DBStudio/Properties/Resources.resx @@ -132,4 +132,7 @@ display command list + + {0} {1} Tag + \ No newline at end of file diff --git a/DataRunner/His/Compress/Special/LosslessCompressUnit.cs b/DataRunner/His/Compress/Special/LosslessCompressUnit.cs index 6b2274354d9465db8bd863801f5f4572c36318fc..3b85e40ff878029e2828096e7529a3fa91e31ebc 100644 --- a/DataRunner/His/Compress/Special/LosslessCompressUnit.cs +++ b/DataRunner/His/Compress/Special/LosslessCompressUnit.cs @@ -80,8 +80,22 @@ namespace Cdy.Tag return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; case TagType.String: return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; - case TagType.DateTime: - return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.IntPoint: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.UIntPoint: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.LongPoint: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.ULongPoint: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.IntPoint3: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.UIntPoint3: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.LongPoint3: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; + case TagType.ULongPoint3: + return Compress(source, sourceAddr, target, targetAddr + 8, size) + 8; } return 8; } @@ -251,7 +265,6 @@ namespace Cdy.Tag { mVarintMemory.WriteInt32(id); isFirst = false; - sval = id; } else { @@ -356,6 +369,282 @@ namespace Cdy.Tag } return mMarshalMemory.StartMemory.AsMemory(0, (int)mMarshalMemory.Position); } + else if (typeof(T) == typeof(IntPointData)) + { + int sval = 0; + int sval2 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadInt(offset + i * 8); + var id2 = source.ReadInt(offset + i * 8 + 4); + if (isFirst) + { + mVarintMemory.WriteInt32(id); + mVarintMemory.WriteInt32(id2); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt32(id - sval); + mVarintMemory.WriteSInt32(id2 - sval2); + } + sval = id; + sval2 = id2; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } + else if (typeof(T) == typeof(UIntPointData)) + { + uint sval = 0; + uint sval2 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadUInt(offset + i * 8); + var id2 = source.ReadUInt(offset + i * 8 + 4); + if (isFirst) + { + mVarintMemory.WriteInt32(id); + mVarintMemory.WriteInt32(id2); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt32((int)(id - sval)); + mVarintMemory.WriteSInt32((int)(id2 - sval2)); + } + sval = id; + sval2 = id2; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } + else if (typeof(T) == typeof(IntPoint3Data)) + { + int sval = 0; + int sval2 = 0; + int sval3 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadInt(offset + i * 12); + var id2 = source.ReadInt(offset + i * 12 + 4); + var id3 = source.ReadInt(offset + i * 12 + 8); + if (isFirst) + { + mVarintMemory.WriteInt32(id); + mVarintMemory.WriteInt32(id2); + mVarintMemory.WriteInt32(id3); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt32((int)(id - sval)); + mVarintMemory.WriteSInt32((int)(id2 - sval2)); + mVarintMemory.WriteSInt32((int)(id3 - sval3)); + } + sval = id; + sval2 = id2; + sval3 = id3; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } + else if (typeof(T) == typeof(UIntPoint3Data)) + { + uint sval = 0; + uint sval2 = 0; + uint sval3 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadUInt(offset + i * 12); + var id2 = source.ReadUInt(offset + i * 12 + 4); + var id3 = source.ReadUInt(offset + i * 12 + 8); + if (isFirst) + { + mVarintMemory.WriteInt32(id); + mVarintMemory.WriteInt32(id2); + mVarintMemory.WriteInt32(id3); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt32((int)(id - sval)); + mVarintMemory.WriteSInt32((int)(id2 - sval2)); + mVarintMemory.WriteSInt32((int)(id3 - sval3)); + } + sval = id; + sval2 = id2; + sval3 = id3; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } + else if (typeof(T) == typeof(LongPointData)) + { + long sval = 0; + long sval2 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadLong(offset + i * 16); + var id2 = source.ReadLong(offset + i * 16 + 8); + if (isFirst) + { + mVarintMemory.WriteInt64(id); + mVarintMemory.WriteInt64(id2); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt64(id - sval); + mVarintMemory.WriteSInt64(id2 - sval2); + } + sval = id; + sval2 = id2; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } + else if (typeof(T) == typeof(ULongPointData)) + { + ulong sval = 0; + ulong sval2 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadULong(offset + i * 16); + var id2 = source.ReadULong(offset + i * 16 + 8); + if (isFirst) + { + mVarintMemory.WriteInt64(id); + mVarintMemory.WriteInt64(id2); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt64((long)(id - sval)); + mVarintMemory.WriteSInt64((long)(id2 - sval2)); + } + sval = id; + sval2 = id2; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } + else if (typeof(T) == typeof(LongPoint3Data)) + { + long sval = 0; + long sval2 = 0; + long sval3 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadLong(offset + i * 24); + var id2 = source.ReadLong(offset + i * 24 + 8); + var id3 = source.ReadLong(offset + i * 24 + 16); + if (isFirst) + { + mVarintMemory.WriteInt64(id); + mVarintMemory.WriteInt64(id2); + mVarintMemory.WriteInt64(id3); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt64(id - sval); + mVarintMemory.WriteSInt64(id2 - sval2); + mVarintMemory.WriteSInt64(id3 - sval3); + } + sval = id; + sval2 = id2; + sval3 = id3; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } + else if (typeof(T) == typeof(ULongPoint3Data)) + { + ulong sval = 0; + ulong sval2 = 0; + ulong sval3 = 0; + for (int i = 0; i < count; i++) + { + if (i != ig) + { + var id = source.ReadULong(offset + i * 24); + var id2 = source.ReadULong(offset + i * 24 + 8); + var id3 = source.ReadULong(offset + i * 24 + 16); + if (isFirst) + { + mVarintMemory.WriteInt64(id); + mVarintMemory.WriteInt64(id2); + mVarintMemory.WriteInt64(id3); + isFirst = false; + } + else + { + mVarintMemory.WriteSInt64((long)(id - sval)); + mVarintMemory.WriteSInt64((long)(id2 - sval2)); + mVarintMemory.WriteSInt64((long)(id3 - sval3)); + } + sval = id; + sval2 = id2; + sval3 = id3; + } + else + { + if (emptyIds.Count > 0) + emptyIds.TryDequeue(out ig); + } + } + + } return mVarintMemory.Buffer.AsMemory(0, (int)mVarintMemory.Position); @@ -1234,43 +1523,8 @@ namespace Cdy.Tag var sval2 = value[i + 1]; var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); - - if (typeof(T) == typeof(double)) - { - result.Add(val1, time1, 0); - } - else if (typeof(T) == typeof(float)) - { - result.Add((float)val1, time1, 0); - } - else if (typeof(T) == typeof(short)) - { - result.Add((short)val1, time1, 0); - } - else if (typeof(T) == typeof(ushort)) - { - result.Add((ushort)val1, time1, 0); - } - else if (typeof(T) == typeof(int)) - { - result.Add((int)val1, time1, 0); - } - else if (typeof(T) == typeof(uint)) - { - result.Add((uint)val1, time1, 0); - } - else if (typeof(T) == typeof(long)) - { - result.Add((long)val1, time1, 0); - } - else if (typeof(T) == typeof(ulong)) - { - result.Add((ulong)val1, time1, 0); - } - else if (typeof(T) == typeof(byte)) - { - result.Add((byte)val1, time1, 0); - } + + result.Add((object)val1, time1, 0); } else if (qulityes[i] < 20) { @@ -1323,6 +1577,8 @@ namespace Cdy.Tag return resultCount; } + + /// /// /// @@ -1683,5 +1939,1229 @@ namespace Cdy.Tag { return DeCompressValue(source, sourceAddr, time, timeTick, type, result); } + + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public override int DeCompressAllPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result) + { + throw new NotImplementedException(); + } + + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressIntPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + var time1 = time; + + for (int i = j; i < timers.Count - 2; i = i + 2) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval2 = value[i + 2]; + + var sval21 = value[i + 1]; + var sval22 = value[i + 3]; + + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + + result.AddPoint((int)val1, (int)val2, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + resultCount++; + break; + } + + } + + + return resultCount; + } + + private int DeCompressUIntPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + var time1 = time; + + for (int i = j; i < timers.Count - 2; i = i + 2) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval2 = value[i + 2]; + + var sval21 = value[i + 1]; + var sval22 = value[i + 3]; + + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + + result.AddPoint((uint)val1, (uint)val2, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + resultCount++; + break; + } + + } + + + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public override T DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type) + { + throw new NotImplementedException(); + } + + #region + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressIntPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 2; i = i + 2) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval2 = value[i + 2]; + + var sval21 = value[i + 1]; + var sval22 = value[i + 3]; + + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + + result.AddPoint((int)val1, (int)val2, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + + + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressUIntPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 2; i = i + 2) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval2 = value[i + 2]; + + var sval21 = value[i + 1]; + var sval22 = value[i + 3]; + + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + + result.AddPoint((uint)val1, (uint)val2, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + + + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressLongPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 2; i = i + 2) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval2 = value[i + 2]; + + var sval21 = value[i + 1]; + var sval22 = value[i + 3]; + + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + + result.AddPoint((long)val1, (long)val2, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + + + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressULongPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 2; i = i + 2) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval2 = value[i + 2]; + + var sval21 = value[i + 1]; + var sval22 = value[i + 3]; + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + + result.AddPoint((ulong)val1, (ulong)val2, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 2], value[i + 3], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressIntPoint3Value(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 3; i = i + 3) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval21 = value[i + 1]; + var sval31 = value[i + 2]; + + var sval2 = value[i + 3]; + var sval22 = value[i + 4]; + var sval32 = value[i + 5]; + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + var val3 = pval1 / tval1 * (Convert.ToDouble(sval32) - Convert.ToDouble(sval31)) + Convert.ToDouble(sval31); + + result.AddPoint((int)val1, (int)val2, (int)val3, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + + + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressUIntPoint3Value(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 3; i = i + 3) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval21 = value[i + 1]; + var sval31 = value[i + 2]; + + var sval2 = value[i + 3]; + var sval22 = value[i + 4]; + var sval32 = value[i + 5]; + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + var val3 = pval1 / tval1 * (Convert.ToDouble(sval32) - Convert.ToDouble(sval31)) + Convert.ToDouble(sval31); + + result.AddPoint((uint)val1, (uint)val2, (uint)val3, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + + + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressLongPoint3Value(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 3; i = i + 3) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval21 = value[i + 1]; + var sval31 = value[i + 2]; + + var sval2 = value[i + 3]; + var sval22 = value[i + 4]; + var sval32 = value[i + 5]; + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + var val3 = pval1 / tval1 * (Convert.ToDouble(sval32) - Convert.ToDouble(sval31)) + Convert.ToDouble(sval31); + + result.AddPoint((long)val1, (long)val2, (long)val3, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + + + return resultCount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private int DeCompressULongPoint3Value(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + int count = 0; + var timers = GetTimers(source, sourceAddr + 8, timeTick, out count); + + var valuesize = source.ReadInt(); + var value = DeCompressValue(source.ReadBytes(valuesize), count); + + var qusize = source.ReadInt(); + + var qulityes = DeCompressQulity(source.ReadBytes(qusize)); + int resultCount = 0; + + int j = 0; + + foreach (var time1 in time) + { + for (int i = j; i < timers.Count - 3; i = i + 3) + { + var skey = timers[i]; + + var snext = timers[i + 1]; + + if (time1 == skey) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + } + else if (time1 > skey && time1 < snext) + { + switch (type) + { + case QueryValueMatchType.Previous: + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.After: + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + case QueryValueMatchType.Linear: + if (qulityes[i] < 20 && qulityes[i + 1] < 20) + { + var pval1 = (time1 - skey).TotalMilliseconds; + var tval1 = (snext - skey).TotalMilliseconds; + var sval1 = value[i]; + var sval21 = value[i + 1]; + var sval31 = value[i + 2]; + + var sval2 = value[i + 3]; + var sval22 = value[i + 4]; + var sval32 = value[i + 5]; + + var val1 = pval1 / tval1 * (Convert.ToDouble(sval2) - Convert.ToDouble(sval1)) + Convert.ToDouble(sval1); + var val2 = pval1 / tval1 * (Convert.ToDouble(sval22) - Convert.ToDouble(sval21)) + Convert.ToDouble(sval21); + var val3 = pval1 / tval1 * (Convert.ToDouble(sval32) - Convert.ToDouble(sval31)) + Convert.ToDouble(sval31); + + result.AddPoint((ulong)val1, (ulong)val2, (ulong)val3, time1, 0); + } + else if (qulityes[i] < 20) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else if (qulityes[i + 1] < 20) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + resultCount++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey).TotalMilliseconds; + var fval = (snext - time1).TotalMilliseconds; + + if (pval < fval) + { + result.AddPoint(value[i], value[i + 1], value[i + 2], time1, qulityes[i]); + } + else + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + } + resultCount++; + break; + } + break; + } + else if (time1 == snext) + { + result.AddPoint(value[i + 3], value[i + 4], value[i + 5], time1, qulityes[i]); + resultCount++; + break; + } + + } + } + + + return resultCount; + } + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public override int DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + if (typeof(T) == typeof(IntPointData)) + { + return DeCompressIntPointValue(source, sourceAddr, time, timeTick, type, result); + } + else if (typeof(T) == typeof(UIntPointData)) + { + return DeCompressUIntPointValue(source, sourceAddr, time, timeTick, type, result); + } + else if (typeof(T) == typeof(LongPointData)) + { + return DeCompressLongPointValue(source, sourceAddr, time, timeTick, type, result); + } + else if (typeof(T) == typeof(ULongPointData)) + { + return DeCompressULongPointValue(source, sourceAddr, time, timeTick, type, result); + } + else if (typeof(T) == typeof(IntPoint3Data)) + { + return DeCompressIntPoint3Value(source, sourceAddr, time, timeTick, type, result); + } + else if (typeof(T) == typeof(UIntPoint3Data)) + { + return DeCompressUIntPoint3Value(source, sourceAddr, time, timeTick, type, result); + } + else if (typeof(T) == typeof(LongPoint3Data)) + { + return DeCompressLongPoint3Value(source, sourceAddr, time, timeTick, type, result); + } + else if (typeof(T) == typeof(ULongPoint3Data)) + { + return DeCompressULongPoint3Value(source, sourceAddr, time, timeTick, type, result); + } + return 0; + } + #endregion + + } } diff --git a/DataRunner/His/Compress/Special/NoneCompressUnit.cs b/DataRunner/His/Compress/Special/NoneCompressUnit.cs index 6d8845492570d6940e9eb36e09880e84ebb92d9b..8cab6021bc076fe41b87c705027946e90decec0b 100644 --- a/DataRunner/His/Compress/Special/NoneCompressUnit.cs +++ b/DataRunner/His/Compress/Special/NoneCompressUnit.cs @@ -2866,6 +2866,16 @@ namespace Cdy.Tag } + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// public override int DeCompressUShortValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) { DateTime stime; @@ -2966,5 +2976,1671 @@ namespace Cdy.Tag } return count; } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public override int DeCompressAllPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result) + { + DateTime time; + + int valuecount = 0; + + var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time); + + + int i = 0; + int rcount = 0; + + if (typeof(T) == typeof(IntPointData)) + { + //读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 10 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadInts(valaddr, valuecount * 2); + + for (i = 0; i < valuecount; i=i+2) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1] , qs[i].Item1, qq[i]); + rcount++; + } + } + } + else if (typeof(T) == typeof(UIntPointData)) + { + //读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 10 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadUInts(valaddr, valuecount * 2); + + for (i = 0; i < valuecount; i = i + 2) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1], qs[i].Item1, qq[i]); + rcount++; + } + } + } + else if (typeof(T) == typeof(IntPoint3Data)) + { + //读取质量戳,时间戳2个字节,值12个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 14 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadInts(valaddr, valuecount * 3); + + for (i = 0; i < valuecount; i = i + 3) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1],vals[i + 2], qs[i].Item1, qq[i]); + rcount++; + } + } + } + else if (typeof(T) == typeof(UIntPoint3Data)) + { + //读取质量戳,时间戳2个字节,值12个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 14 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadUInts(valaddr, valuecount * 3); + + for (i = 0; i < valuecount; i = i + 3) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1], vals[i + 2], qs[i].Item1, qq[i]); + rcount++; + } + } + } + else if (typeof(T) == typeof(LongPointData)) + { + //读取质量戳,时间戳2个字节,值16个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 18 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadLongs(valaddr, valuecount * 2); + + for (i = 0; i < valuecount; i = i + 2) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1], qs[i].Item1, qq[i]); + rcount++; + } + } + } + else if (typeof(T) == typeof(ULongPointData)) + { + //读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 18 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadULongs(valaddr, valuecount * 2); + + for (i = 0; i < valuecount; i = i + 2) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1], qs[i].Item1, qq[i]); + rcount++; + } + } + } + else if (typeof(T) == typeof(LongPoint3Data)) + { + //读取质量戳,时间戳2个字节,值24个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 26 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadLongs(valaddr, valuecount * 3); + + for (i = 0; i < valuecount; i = i + 3) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1], vals[i + 2], qs[i].Item1, qq[i]); + rcount++; + } + } + } + else if (typeof(T) == typeof(ULongPoint3Data)) + { + //读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节 + var qq = source.ReadBytes(valuecount * 26 + 10 + sourceAddr, valuecount); + + var valaddr = valuecount * 2 + 10 + sourceAddr; + + var vals = source.ReadULongs(valaddr, valuecount * 3); + + for (i = 0; i < valuecount; i = i + 3) + { + if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime) + { + result.AddPoint(vals[i], vals[i + 1], vals[i + 2], qs[i].Item1, qq[i]); + rcount++; + } + } + } + return rcount; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public override T DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type) + { + DateTime time1; + int valuecount = 0; + object reval = null; + var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time1); + var vv = qs.ToArray(); + + if (typeof(T) == typeof(IntPointData)) + { + + var qq = source.ReadBytes(qs.Count * 10 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 2) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4)); + break; + case QueryValueMatchType.After: + reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadInt(valaddr + i * 4); + var sval12 = source.ReadInt(valaddr + (i + 1) * 4); + var sval2 = source.ReadInt(valaddr + (i + 2) * 4); + var sval22 = source.ReadInt(valaddr + (i + 3) * 4); + var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12); + reval = new IntPointData(x1, x2); + } + else if (qq[skey.Key] < 20) + { + reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4)); + } + else if (qq[snext.Key] < 20) + { + reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4)); + } + else + { + reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4)); + } + } + } + else if (typeof(T) == typeof(UIntPointData)) + { + + var qq = source.ReadBytes(qs.Count * 10 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 2) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4)); + break; + case QueryValueMatchType.After: + reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadUInt(valaddr + i * 4); + var sval12 = source.ReadUInt(valaddr + (i + 1) * 4); + var sval2 = source.ReadUInt(valaddr + (i + 2) * 4); + var sval22 = source.ReadUInt(valaddr + (i + 3) * 4); + var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12); + reval = new UIntPointData(x1, x2); + } + else if (qq[skey.Key] < 20) + { + reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4)); + } + else if (qq[snext.Key] < 20) + { + reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4)); + } + else + { + reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4)); + } + } + } + else if (typeof(T) == typeof(LongPointData)) + { + + var qq = source.ReadBytes(qs.Count * 18 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 2) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8)); + break; + case QueryValueMatchType.After: + reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadLong(valaddr + i * 8); + var sval12 = source.ReadLong(valaddr + (i + 1) * 8); + var sval2 = source.ReadLong(valaddr + (i + 2) * 8); + var sval22 = source.ReadLong(valaddr + (i + 3) * 8); + var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12); + reval = new LongPointData(x1, x2); + } + else if (qq[skey.Key] < 20) + { + reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8)); + } + else if (qq[snext.Key] < 20) + { + reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8)); + } + else + { + reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8)); + } + } + } + else if (typeof(T) == typeof(ULongPointData)) + { + + var qq = source.ReadBytes(qs.Count * 18 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 2) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8)); + break; + case QueryValueMatchType.After: + reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadLong(valaddr + i * 8); + var sval12 = source.ReadLong(valaddr + (i + 1) * 8); + var sval2 = source.ReadLong(valaddr + (i + 2) * 8); + var sval22 = source.ReadLong(valaddr + (i + 3) * 8); + var x1 = (ulong)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (ulong)(pval1 / tval1 * (sval22 - sval12) + sval12); + reval = new ULongPointData(x1, x2); + } + else if (qq[skey.Key] < 20) + { + reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8)); + } + else if (qq[snext.Key] < 20) + { + reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8)); + } + else + { + reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8)); + } + } + } + else if (typeof(T) == typeof(IntPoint3Data)) + { + + var qq = source.ReadBytes(qs.Count * 14 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 3) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4)); + break; + case QueryValueMatchType.After: + reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadInt(valaddr + i * 4); + var sval12 = source.ReadInt(valaddr + (i + 1) * 4); + var sval13 = source.ReadInt(valaddr + (i + 2) * 4); + + var sval2 = source.ReadInt(valaddr + (i + 3) * 4); + var sval22 = source.ReadInt(valaddr + (i + 4) * 4); + var sval23 = source.ReadInt(valaddr + (i + 5) * 4); + var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (int)(pval1 / tval1 * (sval23 - sval13) + sval13); + reval = new IntPoint3Data(x1, x2, x3); + } + else if (qq[skey.Key] < 20) + { + reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4)); + } + else if (qq[snext.Key] < 20) + { + reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4)); + } + else + { + reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4)); + } + } + } + else if (typeof(T) == typeof(LongPoint3Data)) + { + + var qq = source.ReadBytes(qs.Count * 26 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 3) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8)); + break; + case QueryValueMatchType.After: + reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadLong(valaddr + i * 8); + var sval12 = source.ReadLong(valaddr + (i + 1) * 8); + var sval13 = source.ReadLong(valaddr + (i + 2) * 8); + + var sval2 = source.ReadLong(valaddr + (i + 3) * 8); + var sval22 = source.ReadLong(valaddr + (i + 4) * 8); + var sval23 = source.ReadLong(valaddr + (i + 5) * 8); + var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (long)(pval1 / tval1 * (sval23 - sval13) + sval13); + reval = new LongPoint3Data(x1, x2, x3); + } + else if (qq[skey.Key] < 20) + { + reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8)); + } + else if (qq[snext.Key] < 20) + { + reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8)); + } + else + { + reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8)); + } + } + } + else if (typeof(T) == typeof(UIntPoint3Data)) + { + + var qq = source.ReadBytes(qs.Count * 14 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 3) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4)); + break; + case QueryValueMatchType.After: + reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadUInt(valaddr + i * 4); + var sval12 = source.ReadUInt(valaddr + (i + 1) * 4); + var sval13 = source.ReadUInt(valaddr + (i + 2) * 4); + + var sval2 = source.ReadUInt(valaddr + (i + 3) * 4); + var sval22 = source.ReadUInt(valaddr + (i + 4) * 4); + var sval23 = source.ReadUInt(valaddr + (i + 5) * 4); + var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval13); + reval = new UIntPoint3Data(x1, x2, x3); + } + else if (qq[skey.Key] < 20) + { + reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4)); + } + else if (qq[snext.Key] < 20) + { + reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4)); + } + else + { + reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4)); + } + } + } + else if (typeof(T) == typeof(ULongPoint3Data)) + { + + var qq = source.ReadBytes(qs.Count * 26 + 10 + sourceAddr, qs.Count); + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + for (int i = 0; i < vv.Length - 1; i = i + 3) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time == skey.Value.Item1) + { + reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8)); + break; + } + else if (time > skey.Value.Item1 && time < snext.Value.Item1) + { + switch (type) + { + case QueryValueMatchType.Previous: + reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8)); + break; + case QueryValueMatchType.After: + reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8)); + break; + case QueryValueMatchType.Linear: + + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadULong(valaddr + i * 8); + var sval12 = source.ReadULong(valaddr + (i + 1) * 8); + var sval13 = source.ReadULong(valaddr + (i + 2) * 8); + + var sval2 = source.ReadULong(valaddr + (i + 3) * 8); + var sval22 = source.ReadULong(valaddr + (i + 4) * 8); + var sval23 = source.ReadULong(valaddr + (i + 5) * 8); + var x1 = (ulong)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (ulong)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (ulong)(pval1 / tval1 * (sval23 - sval13) + sval13); + reval = new ULongPoint3Data(x1, x2, x3); + } + else if (qq[skey.Key] < 20) + { + reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8)); + } + else if (qq[snext.Key] < 20) + { + reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8)); + } + break; + + case QueryValueMatchType.Closed: + var pval = (time - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time).TotalMilliseconds; + if (pval < fval) + { + reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8)); + } + else + { + reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8)); + } + break; + } + } + else if (time == snext.Value.Item1) + { + reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8)); + } + } + } + + return (T)reval; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public override int DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result) + { + DateTime stime; + int valuecount = 0; + var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out stime); + + var vv = qs.ToArray(); + + var valaddr = qs.Count * 2 + 10 + sourceAddr; + + int count = 0; + + if (typeof(T) == typeof(IntPointData)) + { + var qq = source.ReadBytes(qs.Count * 10 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadInt(valaddr + i * 4); + var val2 = source.ReadInt(valaddr + (i+1) * 4); + result.AddPoint(val,val2, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadInt(valaddr + i * 4); + var val2 = source.ReadInt(valaddr + (i + 1) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + val = source.ReadInt(valaddr + (i+2) * 4); + val2 = source.ReadInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadInt(valaddr + i * 4); + var sval12 = source.ReadInt(valaddr + (i + 1) * 4); + var sval2 = source.ReadInt(valaddr + (i + 2) * 4); + var sval22 = source.ReadInt(valaddr + (i + 3) * 4); + var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12); + result.AddPoint(x1, x2, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadInt(valaddr + i * 4); + val2 = source.ReadInt(valaddr + (i + 1) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadInt(valaddr + (i + 2) * 4); + val2 = source.ReadInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadInt(valaddr + i * 4); + val2 = source.ReadInt(valaddr + (i + 1) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + val = source.ReadInt(valaddr + (i + 2) * 4); + val2 = source.ReadInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadInt(valaddr + (i + 2) * 4); + var val2 = source.ReadInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + else if (typeof(T) == typeof(IntPoint3Data)) + { + var qq = source.ReadBytes(qs.Count * 14 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadInt(valaddr + i * 4); + var val2 = source.ReadInt(valaddr + (i + 1) * 4); + var val3 = source.ReadInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2,val3, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadInt(valaddr + i * 4); + var val2 = source.ReadInt(valaddr + (i + 1) * 4); + var val3 = source.ReadInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + + val = source.ReadInt(valaddr + (i+3) * 4); + val2 = source.ReadInt(valaddr + (i +4) * 4); + val3 = source.ReadInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadInt(valaddr + i * 4); + var sval12 = source.ReadInt(valaddr + (i + 1) * 4); + var sval13 = source.ReadInt(valaddr + (i + 2) * 4); + + var sval2 = source.ReadInt(valaddr + (i + 3) * 4); + var sval22 = source.ReadInt(valaddr + (i + 4) * 4); + var sval23 = source.ReadInt(valaddr + (i + 5) * 4); + + var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (int)(pval1 / tval1 * (sval23 - sval13) + sval12); + result.AddPoint(x1, x2, x3, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadInt(valaddr + i * 4); + val2 = source.ReadInt(valaddr + (i + 1) * 4); + val3 = source.ReadInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadInt(valaddr + (i + 3) * 4); + val2 = source.ReadInt(valaddr + (i + 4) * 4); + val3 = source.ReadInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadInt(valaddr + i * 4); + val2 = source.ReadInt(valaddr + (i + 1) * 4); + val3 = source.ReadInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + val = source.ReadInt(valaddr + (i + 3) * 4); + val2 = source.ReadInt(valaddr + (i + 4) * 4); + val3 = source.ReadInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadInt(valaddr + (i + 3) * 4); + var val2 = source.ReadInt(valaddr + (i + 4) * 4); + var val3 = source.ReadInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + else if (typeof(T) == typeof(UIntPoint3Data)) + { + var qq = source.ReadBytes(qs.Count * 14 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadUInt(valaddr + i * 4); + var val2 = source.ReadUInt(valaddr + (i + 1) * 4); + var val3 = source.ReadUInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadUInt(valaddr + i * 4); + var val2 = source.ReadUInt(valaddr + (i + 1) * 4); + var val3 = source.ReadUInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + + val = source.ReadUInt(valaddr + (i + 3) * 4); + val2 = source.ReadUInt(valaddr + (i + 4) * 4); + val3 = source.ReadUInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadUInt(valaddr + i * 4); + var sval12 = source.ReadUInt(valaddr + (i + 1) * 4); + var sval13 = source.ReadUInt(valaddr + (i + 2) * 4); + + var sval2 = source.ReadUInt(valaddr + (i + 3) * 4); + var sval22 = source.ReadUInt(valaddr + (i + 4) * 4); + var sval23 = source.ReadUInt(valaddr + (i + 5) * 4); + + var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval12); + result.AddPoint(x1, x2, x3, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadUInt(valaddr + i * 4); + val2 = source.ReadUInt(valaddr + (i + 1) * 4); + val3 = source.ReadUInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadUInt(valaddr + (i + 3) * 4); + val2 = source.ReadUInt(valaddr + (i + 4) * 4); + val3 = source.ReadUInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadUInt(valaddr + i * 4); + val2 = source.ReadUInt(valaddr + (i + 1) * 4); + val3 = source.ReadUInt(valaddr + (i + 2) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + val = source.ReadUInt(valaddr + (i + 3) * 4); + val2 = source.ReadUInt(valaddr + (i + 4) * 4); + val3 = source.ReadUInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadUInt(valaddr + (i + 3) * 4); + var val2 = source.ReadUInt(valaddr + (i + 4) * 4); + var val3 = source.ReadUInt(valaddr + (i + 5) * 4); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + else if (typeof(T) == typeof(UIntPointData)) + { + var qq = source.ReadBytes(qs.Count * 10 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadUInt(valaddr + i * 4); + var val2 = source.ReadUInt(valaddr + (i + 1) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadUInt(valaddr + i * 4); + var val2 = source.ReadUInt(valaddr + (i + 1) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + val = source.ReadUInt(valaddr + (i + 2) * 4); + val2 = source.ReadUInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadUInt(valaddr + i * 4); + var sval12 = source.ReadUInt(valaddr + (i + 1) * 4); + var sval2 = source.ReadUInt(valaddr + (i + 2) * 4); + var sval22 = source.ReadUInt(valaddr + (i + 3) * 4); + var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12); + result.AddPoint(x1, x2, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadUInt(valaddr + i * 4); + val2 = source.ReadUInt(valaddr + (i + 1) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadUInt(valaddr + (i + 2) * 4); + val2 = source.ReadUInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadUInt(valaddr + i * 4); + val2 = source.ReadUInt(valaddr + (i + 1) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + val = source.ReadUInt(valaddr + (i + 2) * 4); + val2 = source.ReadUInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadUInt(valaddr + (i + 2) * 4); + var val2 = source.ReadUInt(valaddr + (i + 3) * 4); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + else if (typeof(T) == typeof(LongPointData)) + { + var qq = source.ReadBytes(qs.Count * 18 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadLong(valaddr + i * 8); + var val2 = source.ReadLong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadLong(valaddr + i * 8); + var val2 = source.ReadLong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + val = source.ReadLong(valaddr + (i + 2) * 8); + val2 = source.ReadLong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadLong(valaddr + i * 8); + var sval12 = source.ReadLong(valaddr + (i + 1) * 8); + var sval2 = source.ReadLong(valaddr + (i + 2) * 8); + var sval22 = source.ReadLong(valaddr + (i + 3) * 8); + var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12); + result.AddPoint(x1, x2, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadLong(valaddr + i * 8); + val2 = source.ReadLong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadLong(valaddr + (i + 2) * 8); + val2 = source.ReadLong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadLong(valaddr + i * 8); + val2 = source.ReadLong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + val = source.ReadLong(valaddr + (i + 2) * 8); + val2 = source.ReadLong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadLong(valaddr + (i + 2) * 8); + var val2 = source.ReadLong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + else if (typeof(T) == typeof(ULongPointData)) + { + var qq = source.ReadBytes(qs.Count * 18 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadULong(valaddr + i * 8); + var val2 = source.ReadULong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadULong(valaddr + i * 8); + var val2 = source.ReadULong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + val = source.ReadULong(valaddr + (i + 2) * 8); + val2 = source.ReadULong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadULong(valaddr + i * 8); + var sval12 = source.ReadULong(valaddr + (i + 1) * 8); + var sval2 = source.ReadULong(valaddr + (i + 2) * 8); + var sval22 = source.ReadULong(valaddr + (i + 3) * 8); + var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12); + result.AddPoint(x1, x2, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadULong(valaddr + i * 8); + val2 = source.ReadULong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadULong(valaddr + (i + 2) * 8); + val2 = source.ReadULong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadULong(valaddr + i * 8); + val2 = source.ReadULong(valaddr + (i + 1) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + else + { + val = source.ReadULong(valaddr + (i + 2) * 8); + val2 = source.ReadULong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadULong(valaddr + (i + 2) * 8); + var val2 = source.ReadULong(valaddr + (i + 3) * 8); + result.AddPoint(val, val2, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + else if (typeof(T) == typeof(LongPoint3Data)) + { + var qq = source.ReadBytes(qs.Count * 26 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadLong(valaddr + i * 8); + var val2 = source.ReadLong(valaddr + (i + 1) * 8); + var val3 = source.ReadLong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadLong(valaddr + i * 8); + var val2 = source.ReadLong(valaddr + (i + 1) * 8); + var val3 = source.ReadLong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + + val = source.ReadLong(valaddr + (i + 3) * 8); + val2 = source.ReadLong(valaddr + (i + 4) * 8); + val3 = source.ReadLong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadLong(valaddr + i * 8); + var sval12 = source.ReadLong(valaddr + (i + 1) * 8); + var sval13 = source.ReadLong(valaddr + (i + 2) * 8); + + var sval2 = source.ReadLong(valaddr + (i + 3) * 8); + var sval22 = source.ReadLong(valaddr + (i + 4) * 8); + var sval23 = source.ReadLong(valaddr + (i + 5) * 8); + + var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval12); + result.AddPoint(x1, x2, x3, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadLong(valaddr + i * 8); + val2 = source.ReadLong(valaddr + (i + 1) * 8); + val3 = source.ReadLong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadLong(valaddr + (i + 3) * 8); + val2 = source.ReadLong(valaddr + (i + 4) * 8); + val3 = source.ReadLong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadLong(valaddr + i * 8); + val2 = source.ReadLong(valaddr + (i + 1) * 8); + val3 = source.ReadLong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + val = source.ReadLong(valaddr + (i + 3) * 8); + val2 = source.ReadLong(valaddr + (i + 4) * 8); + val3 = source.ReadLong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadLong(valaddr + (i + 3) * 8); + var val2 = source.ReadLong(valaddr + (i + 4) * 8); + var val3 = source.ReadLong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + else if (typeof(T) == typeof(ULongPoint3Data)) + { + var qq = source.ReadBytes(qs.Count * 26 + 10 + sourceAddr, qs.Count); + + foreach (var time1 in time) + { + for (int i = 0; i < vv.Length - 1; i++) + { + var skey = vv[i]; + + var snext = vv[i + 1]; + + if (time1 == skey.Value.Item1) + { + var val = source.ReadULong(valaddr + i * 8); + var val2 = source.ReadULong(valaddr + (i + 1) * 8); + var val3 = source.ReadULong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + } + else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1) + { + + switch (type) + { + case QueryValueMatchType.Previous: + var val = source.ReadULong(valaddr + i * 8); + var val2 = source.ReadULong(valaddr + (i + 1) * 8); + var val3 = source.ReadULong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.After: + + val = source.ReadULong(valaddr + (i + 3) * 8); + val2 = source.ReadULong(valaddr + (i + 4) * 8); + val3 = source.ReadULong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + case QueryValueMatchType.Linear: + if (qq[skey.Key] < 20 && qq[snext.Key] < 20) + { + var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds; + var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds; + var sval1 = source.ReadULong(valaddr + i * 8); + var sval12 = source.ReadULong(valaddr + (i + 1) * 8); + var sval13 = source.ReadULong(valaddr + (i + 2) * 8); + + var sval2 = source.ReadULong(valaddr + (i + 3) * 8); + var sval22 = source.ReadULong(valaddr + (i + 4) * 8); + var sval23 = source.ReadULong(valaddr + (i + 5) * 8); + + var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1); + var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12); + var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval12); + result.AddPoint(x1, x2, x3, time1, qq[skey.Key]); + } + else if (qq[skey.Key] < 20) + { + val = source.ReadULong(valaddr + i * 8); + val2 = source.ReadULong(valaddr + (i + 1) * 8); + val3 = source.ReadULong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else if (qq[snext.Key] < 20) + { + val = source.ReadULong(valaddr + (i + 3) * 8); + val2 = source.ReadULong(valaddr + (i + 4) * 8); + val3 = source.ReadULong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + result.Add(0, time1, (byte)QualityConst.Null); + } + count++; + break; + case QueryValueMatchType.Closed: + var pval = (time1 - skey.Value.Item1).TotalMilliseconds; + var fval = (snext.Value.Item1 - time1).TotalMilliseconds; + + if (pval < fval) + { + val = source.ReadULong(valaddr + i * 8); + val2 = source.ReadULong(valaddr + (i + 1) * 8); + val3 = source.ReadULong(valaddr + (i + 2) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + else + { + val = source.ReadULong(valaddr + (i + 3) * 8); + val2 = source.ReadULong(valaddr + (i + 4) * 8); + val3 = source.ReadULong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + } + count++; + break; + } + + break; + } + else if (time1 == snext.Value.Item1) + { + var val = source.ReadULong(valaddr + (i + 3) * 8); + var val2 = source.ReadULong(valaddr + (i + 4) * 8); + var val3 = source.ReadULong(valaddr + (i + 5) * 8); + result.AddPoint(val, val2, val3, time1, qq[skey.Key]); + count++; + break; + } + } + } + } + return count; + } } } diff --git a/DataRunner/His/HisEnginer.cs b/DataRunner/His/HisEnginer.cs index e7b0409d3fc81d5da9f807f3541c748e37dfd9b2..c241471ada69cd98c35b5934f76a9c46d6117442 100644 --- a/DataRunner/His/HisEnginer.cs +++ b/DataRunner/His/HisEnginer.cs @@ -239,6 +239,22 @@ namespace Cdy.Tag case Cdy.Tag.TagType.String: mHisTag = new StirngHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; + case Cdy.Tag.TagType.UIntPoint: + case Cdy.Tag.TagType.IntPoint: + mHisTag = new IntPointHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; + break; + case Cdy.Tag.TagType.UIntPoint3: + case Cdy.Tag.TagType.IntPoint3: + mHisTag = new IntPoint3HisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; + break; + case Cdy.Tag.TagType.ULongPoint: + case Cdy.Tag.TagType.LongPoint: + mHisTag = new LongPointHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; + break; + case Cdy.Tag.TagType.ULongPoint3: + case Cdy.Tag.TagType.LongPoint3: + mHisTag = new LongPoint3HisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; + break; } mHisTag.MaxCount = count; mHisTags.Add(vv.Key, mHisTag); @@ -311,8 +327,25 @@ namespace Cdy.Tag case Cdy.Tag.TagType.ULong: case Cdy.Tag.TagType.Double: case Cdy.Tag.TagType.DateTime: + case Cdy.Tag.TagType.IntPoint: + case Cdy.Tag.TagType.UIntPoint: qulityOffset = dataOffset + count * 8; return qulityOffset + count; + case Cdy.Tag.TagType.IntPoint3: + case Cdy.Tag.TagType.UIntPoint3: + qulityOffset = dataOffset + count * 12; + return qulityOffset + count; + + case Cdy.Tag.TagType.LongPoint: + case Cdy.Tag.TagType.ULongPoint: + qulityOffset = dataOffset + count * 16; + return qulityOffset + count; + + case Cdy.Tag.TagType.LongPoint3: + case Cdy.Tag.TagType.ULongPoint3: + qulityOffset = dataOffset + count * 24; + return qulityOffset + count; + case Cdy.Tag.TagType.String: qulityOffset = dataOffset + count * Const.StringSize; return qulityOffset + count; diff --git a/DataRunner/His/Tag/IntPoint3HisRunTag.cs b/DataRunner/His/Tag/IntPoint3HisRunTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..a4a1791c4a20662eec858659ec00d6006cfed41c --- /dev/null +++ b/DataRunner/His/Tag/IntPoint3HisRunTag.cs @@ -0,0 +1,22 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + /// + /// + /// + public class IntPoint3HisRunTag:HisRunTag + { + public override byte SizeOfValue => 12; + } +} diff --git a/DataRunner/His/Tag/IntPointHisRunTag.cs b/DataRunner/His/Tag/IntPointHisRunTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..9b97f9f94351e7d34313186230ec73cb1cd79388 --- /dev/null +++ b/DataRunner/His/Tag/IntPointHisRunTag.cs @@ -0,0 +1,22 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + /// + /// + /// + public class IntPointHisRunTag:HisRunTag + { + public override byte SizeOfValue => 8; + } +} diff --git a/DataRunner/His/Tag/LongPoint3HisRunTag.cs b/DataRunner/His/Tag/LongPoint3HisRunTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..109a14b0ebafdfad1ab68e2b031ac5fc0e88ed57 --- /dev/null +++ b/DataRunner/His/Tag/LongPoint3HisRunTag.cs @@ -0,0 +1,22 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + /// + /// + /// + public class LongPoint3HisRunTag:HisRunTag + { + public override byte SizeOfValue => 24; + } +} diff --git a/DataRunner/His/Tag/LongPointHisRunTag.cs b/DataRunner/His/Tag/LongPointHisRunTag.cs new file mode 100644 index 0000000000000000000000000000000000000000..ea1e8ebd8a5b798b781433e39e28423db383e6bf --- /dev/null +++ b/DataRunner/His/Tag/LongPointHisRunTag.cs @@ -0,0 +1,22 @@ +//============================================================== +// Copyright (C) 2019 Inc. All rights reserved. +// +//============================================================== +// Create by 种道洋 at 2019/12/27 18:45:02. +// Version 1.0 +// 种道洋 +//============================================================== +using System; +using System.Collections.Generic; +using System.Text; + +namespace Cdy.Tag +{ + /// + /// + /// + public class LongPointHisRunTag:HisRunTag + { + public override byte SizeOfValue => 16; + } +} diff --git a/DataRunner/Real/RealEnginer.cs b/DataRunner/Real/RealEnginer.cs index bf48c2a1f68e582fb948fb8b66e5725a923d0ff0..46ada582f213bb97e4a62efa93c4c7763028f9fb 100644 --- a/DataRunner/Real/RealEnginer.cs +++ b/DataRunner/Real/RealEnginer.cs @@ -148,6 +148,22 @@ namespace Cdy.Tag case TagType.Double: msize += 17; break; + case TagType.IntPoint: + case TagType.UIntPoint: + msize += 17; + break; + case TagType.IntPoint3: + case TagType.UIntPoint3: + msize += 21; + break; + case TagType.LongPoint: + case TagType.ULongPoint: + msize += 25; + break; + case TagType.LongPoint3: + case TagType.ULongPoint3: + msize += 33; + break; case TagType.String: msize += (Const.StringSize + 9); break; @@ -178,8 +194,22 @@ namespace Cdy.Tag case TagType.Long: case TagType.ULong: case TagType.Double: + case TagType.IntPoint: + case TagType.UIntPoint: MemoryHelper.WriteByte(mMHandle, vv.Value.ValueAddress + 16, unknowQuality); break; + case TagType.IntPoint3: + case TagType.UIntPoint3: + MemoryHelper.WriteByte(mMHandle, vv.Value.ValueAddress + 20, unknowQuality); + break; + case TagType.LongPoint: + case TagType.ULongPoint: + MemoryHelper.WriteByte(mMHandle, vv.Value.ValueAddress + 24, unknowQuality); + break; + case TagType.LongPoint3: + case TagType.ULongPoint3: + MemoryHelper.WriteByte(mMHandle, vv.Value.ValueAddress + 32, unknowQuality); + break; case TagType.String: MemoryHelper.WriteByte(mMHandle, vv.Value.ValueAddress + Const.StringSize + 8, unknowQuality); break; @@ -264,13 +294,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, byte value,byte qulity,DateTime time) + public void SetValueByAddr(long addr, byte value,byte quality,DateTime time) { mMemory[addr] = value; MemoryHelper.WriteDateTime(mMHandle, addr + 1,time); - MemoryHelper.WriteByte(mMHandle, addr + 9, qulity); + MemoryHelper.WriteByte(mMHandle, addr + 9, quality); } /// @@ -289,13 +319,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, short value, byte qulity, DateTime time) + public void SetValueByAddr(long addr, short value, byte quality, DateTime time) { MemoryHelper.WriteShort(mMHandle, addr, value); MemoryHelper.WriteDateTime(mMHandle, addr +2, time); - MemoryHelper.WriteByte(mMHandle, addr + 10, qulity); + MemoryHelper.WriteByte(mMHandle, addr + 10, quality); } /// @@ -314,13 +344,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, int value, byte qulity, DateTime time) + public void SetValueByAddr(long addr, int value, byte quality, DateTime time) { MemoryHelper.WriteInt32(mMHandle, addr, value); MemoryHelper.WriteDateTime(mMHandle, addr + 4, time); - MemoryHelper.WriteByte(mMHandle, addr + 12, qulity); ; + MemoryHelper.WriteByte(mMHandle, addr + 12, quality); ; } /// @@ -339,13 +369,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, long value, byte qulity, DateTime time) + public void SetValueByAddr(long addr, long value, byte quality, DateTime time) { MemoryHelper.WriteInt64(mMHandle, addr, value); MemoryHelper.WriteDateTime(mMHandle, addr + 8, time); - MemoryHelper.WriteByte(mMHandle, addr + 16, qulity); + MemoryHelper.WriteByte(mMHandle, addr + 16, quality); } @@ -366,13 +396,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, float value, byte qulity, DateTime time) + public void SetValueByAddr(long addr, float value, byte quality, DateTime time) { MemoryHelper.WriteFloat(mMHandle, addr, value); MemoryHelper.WriteDateTime(mMHandle, addr + 4, time); - MemoryHelper.WriteByte(mMHandle, addr + 12, qulity); ; + MemoryHelper.WriteByte(mMHandle, addr + 12, quality); ; } /// @@ -391,13 +421,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, double value, byte qulity, DateTime time) + public void SetValueByAddr(long addr, double value, byte quality, DateTime time) { MemoryHelper.WriteDouble(mMHandle, addr, value); MemoryHelper.WriteDateTime(mMHandle, addr + 8, time); - MemoryHelper.WriteByte(mMHandle, addr + 16, qulity); ; + MemoryHelper.WriteByte(mMHandle, addr + 16, quality); ; } /// @@ -416,13 +446,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, DateTime value, byte qulity, DateTime time) + public void SetValueByAddr(long addr, DateTime value, byte quality, DateTime time) { MemoryHelper.WriteDateTime(mMHandle, addr, value); MemoryHelper.WriteDateTime(mMHandle, addr + 8, time); - MemoryHelper.WriteByte(mMHandle, addr + 16, qulity); ; + MemoryHelper.WriteByte(mMHandle, addr + 16, quality); ; } /// @@ -444,14 +474,153 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValueByAddr(long addr, string value, byte qulity, DateTime time) + public void SetValueByAddr(long addr, string value, byte quality, DateTime time) { System.Buffer.BlockCopy(value.ToCharArray(), 0, mMemory, (int)addr, value.Length); MemoryHelper.WriteDateTime(mMHandle, Const.StringSize, time); - MemoryHelper.WriteByte(mMHandle, Const.StringSize + 8, qulity); + MemoryHelper.WriteByte(mMHandle, Const.StringSize + 8, quality); + } + + #region + + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, int value1,int value2, byte quality, DateTime time) + { + MemoryHelper.WriteInt32(mMHandle, addr, value1); + MemoryHelper.WriteInt32(mMHandle, addr+4, value2); + MemoryHelper.WriteDateTime(mMHandle, addr + 8, time); + MemoryHelper.WriteByte(mMHandle, addr + 16, quality); ; + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, uint value1, uint value2, byte quality, DateTime time) + { + MemoryHelper.WriteUInt32(mMHandle, addr, value1); + MemoryHelper.WriteUInt32(mMHandle, addr + 4, value2); + MemoryHelper.WriteDateTime(mMHandle, addr + 8, time); + MemoryHelper.WriteByte(mMHandle, addr + 16, quality); ; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, int value1, int value2,int value3, byte quality, DateTime time) + { + MemoryHelper.WriteInt32(mMHandle, addr, value1); + MemoryHelper.WriteInt32(mMHandle, addr + 4, value2); + MemoryHelper.WriteInt32(mMHandle, addr + 8, value3); + MemoryHelper.WriteDateTime(mMHandle, addr + 12, time); + MemoryHelper.WriteByte(mMHandle, addr + 20, quality); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, uint value1, uint value2, uint value3, byte quality, DateTime time) + { + MemoryHelper.WriteUInt32(mMHandle, addr, value1); + MemoryHelper.WriteUInt32(mMHandle, addr + 4, value2); + MemoryHelper.WriteUInt32(mMHandle, addr + 8, value3); + MemoryHelper.WriteDateTime(mMHandle, addr + 12, time); + MemoryHelper.WriteByte(mMHandle, addr + 20, quality); + } + + + /// + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, ulong value1, ulong value2, byte quality, DateTime time) + { + MemoryHelper.WriteUInt64(mMHandle, addr, value1); + MemoryHelper.WriteUInt64(mMHandle, addr + 8, value2); + MemoryHelper.WriteDateTime(mMHandle, addr + 16, time); + MemoryHelper.WriteByte(mMHandle, addr + 24, quality); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, long value1, long value2, byte quality, DateTime time) + { + MemoryHelper.WriteInt64(mMHandle, addr, value1); + MemoryHelper.WriteInt64(mMHandle, addr + 8, value2); + MemoryHelper.WriteDateTime(mMHandle, addr + 16, time); + MemoryHelper.WriteByte(mMHandle, addr + 24, quality); ; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, long value1, long value2, long value3, byte quality, DateTime time) + { + MemoryHelper.WriteInt64(mMHandle, addr, value1); + MemoryHelper.WriteInt64(mMHandle, addr + 8, value2); + MemoryHelper.WriteInt64(mMHandle, addr + 16, value3); + MemoryHelper.WriteDateTime(mMHandle, addr + 24, time); + MemoryHelper.WriteByte(mMHandle, addr + 32, quality); ; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void SetPointValueByAddr(long addr, ulong value1, ulong value2, ulong value3, byte quality, DateTime time) + { + MemoryHelper.WriteUInt64(mMHandle, addr, value1); + MemoryHelper.WriteUInt64(mMHandle, addr + 8, value2); + MemoryHelper.WriteUInt64(mMHandle, addr + 16, value3); + MemoryHelper.WriteDateTime(mMHandle, addr + 24, time); + MemoryHelper.WriteByte(mMHandle, addr + 32, quality); ; } + #endregion /// /// @@ -460,13 +629,14 @@ namespace Cdy.Tag /// public void SetValue(int id, bool value) { + DateTime time = DateTime.Now; if (value) { - SetValue(id, (byte)1); + SetValue(id, (byte)1, 0, time); } else { - SetValue(id, (byte)0); + SetValue(id, (byte)0, 0, time); } } @@ -477,9 +647,10 @@ namespace Cdy.Tag /// public void SetValue(int id, byte value) { + DateTime time = DateTime.Now; if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetValueByAddr(mIdAndAddr[id], value,0,time); NotifyValueChanged(id); } } @@ -490,12 +661,14 @@ namespace Cdy.Tag /// public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach(var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -505,12 +678,13 @@ namespace Cdy.Tag /// public void SetValue(Dictionary> values) { - Parallel.ForEach(values,(vv) => { - if (mIdAndAddr.ContainsKey(vv.Key)) + //Parallel.ForEach(values,(vv) => { + foreach (var vv in values) + if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -519,13 +693,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, byte value,byte qulity,DateTime time) + public void SetValue(int id, byte value,byte quality,DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value,qulity,time); + SetValueByAddr(mIdAndAddr[id], value,quality,time); NotifyValueChanged(id); } } @@ -540,7 +714,7 @@ namespace Cdy.Tag { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetValueByAddr(mIdAndAddr[id], value,0,DateTime.Now); NotifyValueChanged(id); } } @@ -551,12 +725,14 @@ namespace Cdy.Tag /// public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -565,13 +741,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, short value, byte qulity, DateTime time) + public void SetValue(int id, short value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -582,12 +758,13 @@ namespace Cdy.Tag /// public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -601,7 +778,7 @@ namespace Cdy.Tag { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetValueByAddr(mIdAndAddr[id], value,0,DateTime.Now); NotifyValueChanged(id); } } @@ -612,12 +789,14 @@ namespace Cdy.Tag /// public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -626,13 +805,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, ushort value, byte qulity, DateTime time) + public void SetValue(int id, ushort value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -643,12 +822,13 @@ namespace Cdy.Tag /// public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -661,7 +841,7 @@ namespace Cdy.Tag { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetValueByAddr(mIdAndAddr[id], value,0,DateTime.Now); NotifyValueChanged(id); } } @@ -672,12 +852,14 @@ namespace Cdy.Tag /// public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -686,13 +868,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, int value, byte qulity, DateTime time) + public void SetValue(int id, int value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -703,12 +885,13 @@ namespace Cdy.Tag /// public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -722,7 +905,7 @@ namespace Cdy.Tag { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetValueByAddr(mIdAndAddr[id], value,0,DateTime.Now); NotifyValueChanged(id); } } @@ -733,12 +916,14 @@ namespace Cdy.Tag /// public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -747,13 +932,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, uint value, byte qulity, DateTime time) + public void SetValue(int id, uint value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -764,12 +949,13 @@ namespace Cdy.Tag /// public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -782,7 +968,7 @@ namespace Cdy.Tag { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetValueByAddr(mIdAndAddr[id], value,0,DateTime.Now); NotifyValueChanged(id); } } @@ -793,12 +979,14 @@ namespace Cdy.Tag /// public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -807,13 +995,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, long value, byte qulity, DateTime time) + public void SetValue(int id, long value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -824,12 +1012,13 @@ namespace Cdy.Tag /// public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -843,7 +1032,7 @@ namespace Cdy.Tag { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetValueByAddr(mIdAndAddr[id], value,0,DateTime.Now); NotifyValueChanged(id); } } @@ -854,12 +1043,14 @@ namespace Cdy.Tag /// public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -868,13 +1059,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, ulong value, byte qulity, DateTime time) + public void SetValue(int id, ulong value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -885,12 +1076,13 @@ namespace Cdy.Tag /// public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -899,27 +1091,31 @@ namespace Cdy.Tag /// /// /// - public void SetValue(int id, float value) + /// + /// + public void SetValue(int id, IntPointData value,DateTime time,byte quality) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetPointValueByAddr(mIdAndAddr[id], value.X,value.Y,quality,time); NotifyValueChanged(id); } } + /// /// /// - /// - public void SetValue(Dictionary values) + /// + /// + /// + /// + public void SetValue(int id, UIntPointData value, DateTime time, byte quality) { - Parallel.ForEach(values, (vv) => { - if (mIdAndAddr.ContainsKey(vv.Key)) - { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); - } - }); - NotifyValueChanged(values.Keys.ToList()); + if (mIdAndAddr.ContainsKey(id)) + { + SetPointValueByAddr(mIdAndAddr[id], value.X, value.Y, quality, time); + NotifyValueChanged(id); + } } /// @@ -927,13 +1123,13 @@ namespace Cdy.Tag /// /// /// - /// /// - public void SetValue(int id, float value, byte qulity, DateTime time) + /// + public void SetValue(int id, IntPoint3Data value, DateTime time, byte quality) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetPointValueByAddr(mIdAndAddr[id], value.X, value.Y, value.Z, quality, time); NotifyValueChanged(id); } } @@ -941,16 +1137,17 @@ namespace Cdy.Tag /// /// /// - /// - public void SetValue(Dictionary> values) + /// + /// + /// + /// + public void SetValue(int id, UIntPoint3Data value, DateTime time, byte quality) { - Parallel.ForEach(values, (vv) => { - if (mIdAndAddr.ContainsKey(vv.Key)) - { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); - } - }); - NotifyValueChanged(values.Keys.ToList()); + if (mIdAndAddr.ContainsKey(id)) + { + SetPointValueByAddr(mIdAndAddr[id], value.X, value.Y, value.Z, quality, time); + NotifyValueChanged(id); + } } /// @@ -958,29 +1155,31 @@ namespace Cdy.Tag /// /// /// - public void SetValue(int id, double value) + /// + /// + public void SetValue(int id, ULongPoint3Data value, DateTime time, byte quality) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value); + SetPointValueByAddr(mIdAndAddr[id], value.X, value.Y, value.Z, quality, time); NotifyValueChanged(id); } } - /// /// /// - /// - public void SetValue(Dictionary values) + /// + /// + /// + /// + public void SetValue(int id, LongPoint3Data value, DateTime time, byte quality) { - Parallel.ForEach(values, (vv) => { - if (mIdAndAddr.ContainsKey(vv.Key)) - { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); - } - }); - NotifyValueChanged(values.Keys.ToList()); + if (mIdAndAddr.ContainsKey(id)) + { + SetPointValueByAddr(mIdAndAddr[id], value.X, value.Y, value.Z, quality, time); + NotifyValueChanged(id); + } } /// @@ -988,13 +1187,13 @@ namespace Cdy.Tag /// /// /// - /// /// - public void SetValue(int id, double value, byte qulity, DateTime time) + /// + public void SetValue(int id, LongPointData value, DateTime time, byte quality) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetPointValueByAddr(mIdAndAddr[id], value.X, value.Y, quality, time); NotifyValueChanged(id); } } @@ -1002,16 +1201,17 @@ namespace Cdy.Tag /// /// /// - /// - public void SetValue(Dictionary> values) + /// + /// + /// + /// + public void SetValue(int id, ULongPointData value, DateTime time, byte quality) { - Parallel.ForEach(values, (vv) => { - if (mIdAndAddr.ContainsKey(vv.Key)) - { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); - } - }); - NotifyValueChanged(values.Keys.ToList()); + if (mIdAndAddr.ContainsKey(id)) + { + SetPointValueByAddr(mIdAndAddr[id], value.X, value.Y, quality, time); + NotifyValueChanged(id); + } } @@ -1020,7 +1220,7 @@ namespace Cdy.Tag /// /// /// - public void SetValue(int id, DateTime value) + public void SetValue(int id, float value) { if (mIdAndAddr.ContainsKey(id)) { @@ -1028,19 +1228,20 @@ namespace Cdy.Tag NotifyValueChanged(id); } } - /// /// /// /// - public void SetValue(Dictionary values) + public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -1049,13 +1250,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, DateTime value, byte qulity, DateTime time) + public void SetValue(int id, float value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -1064,14 +1265,15 @@ namespace Cdy.Tag /// /// /// - public void SetValue(Dictionary> values) + public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -1080,7 +1282,7 @@ namespace Cdy.Tag /// /// /// - public void SetValue(int id, string value) + public void SetValue(int id, double value) { if (mIdAndAddr.ContainsKey(id)) { @@ -1089,18 +1291,21 @@ namespace Cdy.Tag } } + /// /// /// /// - public void SetValue(Dictionary values) + public void SetValue(Dictionary values) { - Parallel.ForEach(values, (vv) => { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { - SetValueByAddr(mIdAndAddr[vv.Key], vv.Value); + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } @@ -1109,13 +1314,13 @@ namespace Cdy.Tag /// /// /// - /// + /// /// - public void SetValue(int id, string value, byte qulity, DateTime time) + public void SetValue(int id, double value, byte quality, DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - SetValueByAddr(mIdAndAddr[id], value, qulity, time); + SetValueByAddr(mIdAndAddr[id], value, quality, time); NotifyValueChanged(id); } } @@ -1124,215 +1329,722 @@ namespace Cdy.Tag /// /// /// - public void SetValue(Dictionary> values) + public void SetValue(Dictionary> values) { - Parallel.ForEach(values, (vv) => { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) if (mIdAndAddr.ContainsKey(vv.Key)) { SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); } - }); + //}); NotifyValueChanged(values.Keys.ToList()); } - #endregion - #region 数据读取 /// /// /// - /// - /// - /// - public string ReadStringValueByAddr(long addr, Encoding encoding) + /// + /// + public void SetValue(int id, DateTime value) { - int len = MemoryHelper.ReadByte((sbyte*)mMHandle, addr); - return new string((sbyte*)mMHandle, (int)addr+1, len, encoding); + if (mIdAndAddr.ContainsKey(id)) + { + SetValueByAddr(mIdAndAddr[id], value,0,DateTime.Now); + NotifyValueChanged(id); + } } /// /// /// - /// - /// - /// - /// - /// - public string ReadStringValueByAddr(long addr, Encoding encoding,out DateTime time, out byte qulity) + /// + public void SetValue(Dictionary values) { - int len = MemoryHelper.ReadByte((sbyte*)mMHandle, addr); - var re = new string((sbyte*)mMHandle, (int)addr+1, len, encoding); - time = MemoryHelper.ReadDateTime(mMHandle, addr+ Const.StringSize); - qulity = MemoryHelper.ReadByte(mMHandle, addr + Const.StringSize + 8); - return re; + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) + if (mIdAndAddr.ContainsKey(vv.Key)) + { + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); + } + //}); + NotifyValueChanged(values.Keys.ToList()); } /// /// /// - /// - /// - public byte ReadByteValueByAddr(long addr) + /// + /// + /// + /// + public void SetValue(int id, DateTime value, byte quality, DateTime time) { - return MemoryHelper.ReadByte(mMHandle, addr); + if (mIdAndAddr.ContainsKey(id)) + { + SetValueByAddr(mIdAndAddr[id], value, quality, time); + NotifyValueChanged(id); + } } /// /// /// - /// - /// - /// - /// - public byte ReadByteValueByAddr(long addr, out DateTime time, out byte qulity) + /// + public void SetValue(Dictionary> values) { - time = MemoryHelper.ReadDateTime(mMHandle, addr + 1); - qulity = MemoryHelper.ReadByte(mMHandle, addr + 9); - return MemoryHelper.ReadByte(mMHandle, addr); + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) + if (mIdAndAddr.ContainsKey(vv.Key)) + { + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); + } + //}); + NotifyValueChanged(values.Keys.ToList()); } /// /// /// - /// - /// - public int ReadIntValueByAddr(long addr) + /// + /// + public void SetValue(int id, string value) { - return MemoryHelper.ReadInt32(mMHandle, addr); + if (mIdAndAddr.ContainsKey(id)) + { + SetValueByAddr(mIdAndAddr[id], value); + NotifyValueChanged(id); + } } /// /// /// - /// + /// + /// /// - /// + /// /// - public int ReadIntValueByAddr(long addr, out DateTime time, out byte qulity) + public bool SetPointValue(int id, byte quality, DateTime time, params object[] values) { - time = MemoryHelper.ReadDateTime(mMHandle, addr + 4); - qulity = MemoryHelper.ReadByte(mMHandle, addr + 12); - return MemoryHelper.ReadInt32(mMHandle, addr); + if (mIdAndAddr.ContainsKey(id) && mConfigDatabase.Tags.ContainsKey(id)) + { + switch (mConfigDatabase.Tags[id].Type) + { + case TagType.IntPoint: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], quality, time); + break; + case TagType.UIntPoint: + SetPointValueByAddr(mIdAndAddr[id], (uint)values[0], (uint)values[1], quality, time); + break; + case TagType.IntPoint3: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], (int)values[2], quality, time); + break; + case TagType.UIntPoint3: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], (int)values[2], quality, time); + break; + case TagType.LongPoint: + SetPointValueByAddr(mIdAndAddr[id], (long)values[0], (long)values[1], quality, time); + break; + case TagType.ULongPoint: + SetPointValueByAddr(mIdAndAddr[id], (ulong)values[0], (ulong)values[1], quality, time); + break; + case TagType.LongPoint3: + SetPointValueByAddr(mIdAndAddr[id], (long)values[0], (long)values[1], (long)values[2], quality, time); + break; + case TagType.ULongPoint3: + SetPointValueByAddr(mIdAndAddr[id], (ulong)values[0], (ulong)values[1], (ulong)values[2], quality, time); + break; + } + } + return true; } /// /// /// - /// + /// + /// + /// /// - public short ReadShortValueByAddr(long addr) + public bool SetPointValue(int id, byte quality, params object[] values) { - return MemoryHelper.ReadShort(mMHandle, addr); - } - - /// - /// - /// - /// + DateTime time = DateTime.Now; + if (mIdAndAddr.ContainsKey(id) && mConfigDatabase.Tags.ContainsKey(id)) + { + switch (mConfigDatabase.Tags[id].Type) + { + case TagType.IntPoint: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], quality, time); + break; + case TagType.UIntPoint: + SetPointValueByAddr(mIdAndAddr[id], (uint)values[0], (uint)values[1], quality, time); + break; + case TagType.IntPoint3: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], (int)values[2], quality, time); + break; + case TagType.UIntPoint3: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], (int)values[2], quality, time); + break; + case TagType.LongPoint: + SetPointValueByAddr(mIdAndAddr[id], (long)values[0], (long)values[1], quality, time); + break; + case TagType.ULongPoint: + SetPointValueByAddr(mIdAndAddr[id], (ulong)values[0], (ulong)values[1], quality, time); + break; + case TagType.LongPoint3: + SetPointValueByAddr(mIdAndAddr[id], (long)values[0], (long)values[1], (long)values[2], quality, time); + break; + case TagType.ULongPoint3: + SetPointValueByAddr(mIdAndAddr[id], (ulong)values[0], (ulong)values[1], (ulong)values[2], quality, time); + break; + } + } + return true; + } + + /// + /// + /// + /// + /// + /// + public bool SetPointValue(int id, params object[] values) + { + DateTime time = DateTime.Now; + byte quality = 0; + if (mIdAndAddr.ContainsKey(id) && mConfigDatabase.Tags.ContainsKey(id)) + { + switch (mConfigDatabase.Tags[id].Type) + { + case TagType.IntPoint: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], quality, time); + break; + case TagType.UIntPoint: + SetPointValueByAddr(mIdAndAddr[id], (uint)values[0], (uint)values[1], quality, time); + break; + case TagType.IntPoint3: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], (int)values[2], quality, time); + break; + case TagType.UIntPoint3: + SetPointValueByAddr(mIdAndAddr[id], (int)values[0], (int)values[1], (int)values[2], quality, time); + break; + case TagType.LongPoint: + SetPointValueByAddr(mIdAndAddr[id], (long)values[0], (long)values[1], quality, time); + break; + case TagType.ULongPoint: + SetPointValueByAddr(mIdAndAddr[id], (ulong)values[0], (ulong)values[1], quality, time); + break; + case TagType.LongPoint3: + SetPointValueByAddr(mIdAndAddr[id], (long)values[0], (long)values[1], (long)values[2], quality, time); + break; + case TagType.ULongPoint3: + SetPointValueByAddr(mIdAndAddr[id], (ulong)values[0], (ulong)values[1], (ulong)values[2], quality, time); + break; + } + } + return true; + } + + /// + /// + /// + /// + public void SetValue(Dictionary values) + { + DateTime time = DateTime.Now; + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) + if (mIdAndAddr.ContainsKey(vv.Key)) + { + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value,0,time); + } + //}); + NotifyValueChanged(values.Keys.ToList()); + } + + /// + /// + /// + /// + /// + /// + /// + public void SetValue(int id, string value, byte quality, DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + SetValueByAddr(mIdAndAddr[id], value, quality, time); + NotifyValueChanged(id); + } + } + + /// + /// + /// + /// + public void SetValue(Dictionary> values) + { + //Parallel.ForEach(values, (vv) => { + foreach (var vv in values) + if (mIdAndAddr.ContainsKey(vv.Key)) + { + SetValueByAddr(mIdAndAddr[vv.Key], vv.Value.Item1, vv.Value.Item2, vv.Value.Item3); + } + //}); + NotifyValueChanged(values.Keys.ToList()); + } + #endregion + + #region 数据读取 + + /// + /// + /// + /// + /// + /// + public string ReadStringValueByAddr(long addr, Encoding encoding) + { + int len = MemoryHelper.ReadByte((sbyte*)mMHandle, addr); + return new string((sbyte*)mMHandle, (int)addr+1, len, encoding); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public string ReadStringValueByAddr(long addr, Encoding encoding,out DateTime time, out byte quality) + { + int len = MemoryHelper.ReadByte((sbyte*)mMHandle, addr); + var re = new string((sbyte*)mMHandle, (int)addr+1, len, encoding); + time = MemoryHelper.ReadDateTime(mMHandle, addr+ Const.StringSize); + quality = MemoryHelper.ReadByte(mMHandle, addr + Const.StringSize + 8); + return re; + } + + /// + /// + /// + /// + /// + public byte ReadByteValueByAddr(long addr) + { + return MemoryHelper.ReadByte(mMHandle, addr); + } + + /// + /// + /// + /// + /// + /// + /// + public byte ReadByteValueByAddr(long addr, out DateTime time, out byte quality) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 1); + quality = MemoryHelper.ReadByte(mMHandle, addr + 9); + return MemoryHelper.ReadByte(mMHandle, addr); + } + + /// + /// + /// + /// + /// + public int ReadIntValueByAddr(long addr) + { + return MemoryHelper.ReadInt32(mMHandle, addr); + } + + /// + /// + /// + /// + /// + /// + /// + public int ReadIntValueByAddr(long addr, out DateTime time, out byte quality) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 4); + quality = MemoryHelper.ReadByte(mMHandle, addr + 12); + return MemoryHelper.ReadInt32(mMHandle, addr); + } + + /// + /// + /// + /// + /// + public short ReadShortValueByAddr(long addr) + { + return MemoryHelper.ReadShort(mMHandle, addr); + } + + /// + /// + /// + /// /// - /// + /// /// - public short ReadShortValueByAddr(long addr, out DateTime time, out byte qulity) + public short ReadShortValueByAddr(long addr, out DateTime time, out byte quality) { time = MemoryHelper.ReadDateTime(mMHandle, addr + 2); - qulity = MemoryHelper.ReadByte(mMHandle, addr + 10); + quality = MemoryHelper.ReadByte(mMHandle, addr + 10); return MemoryHelper.ReadShort(mMHandle, addr); } /// /// /// - /// + /// + /// + public long ReadInt64ValueByAddr(long addr) + { + return MemoryHelper.ReadInt64(mMHandle, addr); + } + + /// + /// + /// + /// + /// + /// + /// + public long ReadInt64ValueByAddr(long addr, out DateTime time, out byte quality) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); + quality = MemoryHelper.ReadByte(mMHandle, addr + 16); + return MemoryHelper.ReadInt64(mMHandle, addr); + } + + /// + /// + /// + /// + /// + public double ReadDoubleValueByAddr(long addr) + { + return MemoryHelper.ReadDouble(mMHandle, addr); + } + + /// + /// + /// + /// + /// + /// + /// + public double ReadDoubleValueByAddr(long addr, out DateTime time, out byte quality) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); + quality = MemoryHelper.ReadByte(mMHandle, addr + 16); + return MemoryHelper.ReadDouble(mMHandle, addr); + } + + /// + /// + /// + /// + /// + public float ReadFloatValueByAddr(long addr) + { + return MemoryHelper.ReadFloat(mMHandle, addr); + } + + /// + /// + /// + /// + /// + /// + /// + public float ReadFloatValueByAddr(long addr, out DateTime time, out byte quality) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 4); + quality = MemoryHelper.ReadByte(mMHandle, addr + 12); + return MemoryHelper.ReadFloat(mMHandle, addr); + } + + /// + /// + /// + /// + /// + public DateTime ReadDateTimeValueByAddr(long addr) + { + return MemoryHelper.ReadDateTime(mMHandle, addr); + } + + /// + /// + /// + /// + /// + /// + /// + public DateTime ReadDateTimeValueByAddr(long addr, out DateTime time, out byte quality) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); + quality = MemoryHelper.ReadByte(mMHandle, addr + 16); + return MemoryHelper.ReadDateTime(mMHandle, addr); + } + + /// + /// + /// + /// + /// + /// + /// + public IntPointData ReadIntPointValueByAddr(long addr, out byte quality, out DateTime time) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); + quality = MemoryHelper.ReadByte(mMHandle, addr + 16); + return new IntPointData(MemoryHelper.ReadInt32(mMHandle, addr), MemoryHelper.ReadInt32(mMHandle, addr + 4)); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void ReadIntPointValueByAddr(long addr, out byte quality, out DateTime time, out int x, out int y) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); + quality = MemoryHelper.ReadByte(mMHandle, addr + 16); + x = MemoryHelper.ReadInt32(mMHandle, addr); + y = MemoryHelper.ReadInt32(mMHandle, addr + 4); + } + + /// + /// + /// + /// + /// + /// + /// + public UIntPointData ReadUIntPointValueByAddr(long addr, out byte quality, out DateTime time) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); + quality = MemoryHelper.ReadByte(mMHandle, addr + 16); + return new UIntPointData(MemoryHelper.ReadUInt32(mMHandle, addr), MemoryHelper.ReadUInt32(mMHandle, addr + 4)); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void ReadUIntPointValueByAddr(long addr, out byte quality, out DateTime time, out uint x, out uint y) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); + quality = MemoryHelper.ReadByte(mMHandle, addr + 16); + x = MemoryHelper.ReadUInt32(mMHandle, addr); + y = MemoryHelper.ReadUInt32(mMHandle, addr + 4); + } + + /// + /// + /// + /// + /// + /// + /// + public IntPoint3Data ReadIntPoint3ValueByAddr(long addr, out byte quality, out DateTime time) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 12); + quality = MemoryHelper.ReadByte(mMHandle, addr + 20); + return new IntPoint3Data(MemoryHelper.ReadInt32(mMHandle, addr), MemoryHelper.ReadInt32(mMHandle, addr + 4), MemoryHelper.ReadInt32(mMHandle, addr + 8)); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void ReadIntPoint3ValueByAddr(long addr, out byte quality, out DateTime time, out int x, out int y, out int z) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 12); + quality = MemoryHelper.ReadByte(mMHandle, addr + 20); + x = MemoryHelper.ReadInt32(mMHandle, addr); + y = MemoryHelper.ReadInt32(mMHandle, addr + 4); + z = MemoryHelper.ReadInt32(mMHandle, addr + 8); + } + + + /// + /// + /// + /// + /// + /// + /// + public UIntPoint3Data ReadUIntPoint3ValueByAddr(long addr, out byte quality, out DateTime time) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 12); + quality = MemoryHelper.ReadByte(mMHandle, addr + 20); + return new UIntPoint3Data(MemoryHelper.ReadUInt32(mMHandle, addr), MemoryHelper.ReadUInt32(mMHandle, addr + 4), MemoryHelper.ReadUInt32(mMHandle, addr + 8)); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void ReadUIntPoint3ValueByAddr(long addr, out byte quality, out DateTime time, out uint x, out uint y, out uint z) + { + time = MemoryHelper.ReadDateTime(mMHandle, addr + 12); + quality = MemoryHelper.ReadByte(mMHandle, addr + 20); + x = MemoryHelper.ReadUInt32(mMHandle, addr); + y = MemoryHelper.ReadUInt32(mMHandle, addr + 4); + z = MemoryHelper.ReadUInt32(mMHandle, addr + 8); + } + + + /// + /// + /// + /// + /// + /// /// - public long ReadInt64ValueByAddr(long addr) + public LongPointData ReadLongPointValueByAddr(long addr, out byte quality, out DateTime time) { - return MemoryHelper.ReadInt64(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 16); + quality = MemoryHelper.ReadByte(mMHandle, addr + 24); + return new LongPointData(MemoryHelper.ReadInt64(mMHandle, addr), MemoryHelper.ReadInt64(mMHandle, addr + 8)); } /// /// /// /// + /// /// - /// - /// - public long ReadInt64ValueByAddr(long addr, out DateTime time, out byte qulity) + /// + /// + public void ReadLongPointValueByAddr(long addr, out byte quality, out DateTime time, out long x, out long y) { - time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); - qulity = MemoryHelper.ReadByte(mMHandle, addr + 16); - return MemoryHelper.ReadInt64(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 16); + quality = MemoryHelper.ReadByte(mMHandle, addr + 24); + x = MemoryHelper.ReadInt64(mMHandle, addr); + y = MemoryHelper.ReadInt64(mMHandle, addr + 8); } /// /// /// /// + /// + /// /// - public double ReadDoubleValueByAddr(long addr) + public ULongPointData ReadULongPointValueByAddr(long addr, out byte quality, out DateTime time) { - return MemoryHelper.ReadDouble(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 16); + quality = MemoryHelper.ReadByte(mMHandle, addr + 24); + return new ULongPointData(MemoryHelper.ReadUInt64(mMHandle, addr), MemoryHelper.ReadUInt64(mMHandle, addr + 8)); } /// /// /// /// + /// /// - /// - /// - public double ReadDoubleValueByAddr(long addr, out DateTime time, out byte qulity) + /// + /// + public void ReadULongPointValueByAddr(long addr, out byte quality, out DateTime time, out ulong x, out ulong y) { - time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); - qulity = MemoryHelper.ReadByte(mMHandle, addr + 16); - return MemoryHelper.ReadDouble(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 16); + quality = MemoryHelper.ReadByte(mMHandle, addr + 24); + x = MemoryHelper.ReadUInt64(mMHandle, addr); + y = MemoryHelper.ReadUInt64(mMHandle, addr + 8); } /// /// /// /// + /// + /// /// - public float ReadFloatValueByAddr(long addr) + public LongPoint3Data ReadLongPoint3ValueByAddr(long addr, out byte quality, out DateTime time) { - return MemoryHelper.ReadFloat(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 24); + quality = MemoryHelper.ReadByte(mMHandle, addr + 32); + return new LongPoint3Data(MemoryHelper.ReadInt64(mMHandle, addr), MemoryHelper.ReadInt64(mMHandle, addr + 8), MemoryHelper.ReadInt64(mMHandle, addr + 16)); } /// /// /// /// + /// /// - /// - /// - public float ReadFloatValueByAddr(long addr, out DateTime time, out byte qulity) + /// + /// + /// + public void ReadLongPoint3ValueByAddr(long addr, out byte quality, out DateTime time, out long x, out long y, out long z) { - time = MemoryHelper.ReadDateTime(mMHandle, addr + 4); - qulity = MemoryHelper.ReadByte(mMHandle, addr + 12); - return MemoryHelper.ReadFloat(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 24); + quality = MemoryHelper.ReadByte(mMHandle, addr + 32); + x = MemoryHelper.ReadInt64(mMHandle, addr); + y = MemoryHelper.ReadInt64(mMHandle, addr + 8); + z = MemoryHelper.ReadInt64(mMHandle, addr + 16); } /// /// /// /// + /// + /// /// - public DateTime ReadDateTimeValueByAddr(long addr) + public ULongPoint3Data ReadULongPoint3ValueByAddr(long addr, out byte quality, out DateTime time) { - return MemoryHelper.ReadDateTime(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 24); + quality = MemoryHelper.ReadByte(mMHandle, addr + 32); + return new ULongPoint3Data(MemoryHelper.ReadUInt64(mMHandle, addr), MemoryHelper.ReadUInt64(mMHandle, addr + 8), MemoryHelper.ReadUInt64(mMHandle, addr + 16)); } /// /// /// /// + /// /// - /// - /// - public DateTime ReadDateTimeValueByAddr(long addr, out DateTime time, out byte qulity) + /// + /// + /// + public void ReadULongPoint3ValueByAddr(long addr, out byte quality, out DateTime time,out ulong x,out ulong y,out ulong z) { - time = MemoryHelper.ReadDateTime(mMHandle, addr + 8); - qulity = MemoryHelper.ReadByte(mMHandle, addr + 16); - return MemoryHelper.ReadDateTime(mMHandle, addr); + time = MemoryHelper.ReadDateTime(mMHandle, addr + 24); + quality = MemoryHelper.ReadByte(mMHandle, addr + 32); + x = MemoryHelper.ReadUInt64(mMHandle, addr); + y = MemoryHelper.ReadUInt64(mMHandle, addr + 8); + z= MemoryHelper.ReadUInt64(mMHandle, addr + 16); } /// @@ -1353,16 +2065,16 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public byte? ReadByteValue(int id,out byte qulity,out DateTime time) + public byte? ReadByteValue(int id,out byte quality,out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadByteValueByAddr(mIdAndAddr[id],out time,out qulity); + return ReadByteValueByAddr(mIdAndAddr[id],out time,out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } @@ -1385,16 +2097,16 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public short? ReadShortValue(int id, out byte qulity, out DateTime time) + public short? ReadShortValue(int id, out byte quality, out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadShortValueByAddr(mIdAndAddr[id], out time, out qulity); + return ReadShortValueByAddr(mIdAndAddr[id], out time, out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } @@ -1417,16 +2129,16 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public int? ReadIntValue(int id, out byte qulity, out DateTime time) + public int? ReadIntValue(int id, out byte quality, out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadIntValueByAddr(mIdAndAddr[id], out time, out qulity); + return ReadIntValueByAddr(mIdAndAddr[id], out time, out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } @@ -1449,16 +2161,16 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public long? ReadInt64Value(int id, out byte qulity, out DateTime time) + public long? ReadInt64Value(int id, out byte quality, out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadInt64ValueByAddr(mIdAndAddr[id], out time, out qulity); + return ReadInt64ValueByAddr(mIdAndAddr[id], out time, out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } @@ -1481,16 +2193,16 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public double? ReadDoubleValue(int id, out byte qulity, out DateTime time) + public double? ReadDoubleValue(int id, out byte quality, out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadDoubleValueByAddr(mIdAndAddr[id], out time, out qulity); + return ReadDoubleValueByAddr(mIdAndAddr[id], out time, out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } @@ -1513,16 +2225,16 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public float? ReadFloatValue(int id, out byte qulity, out DateTime time) + public float? ReadFloatValue(int id, out byte quality, out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadFloatValueByAddr(mIdAndAddr[id], out time, out qulity); + return ReadFloatValueByAddr(mIdAndAddr[id], out time, out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } @@ -1545,16 +2257,16 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public DateTime? ReadDatetimeValue(int id, out byte qulity, out DateTime time) + public DateTime? ReadDatetimeValue(int id, out byte quality, out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadDateTimeValueByAddr(mIdAndAddr[id], out time, out qulity); + return ReadDateTimeValueByAddr(mIdAndAddr[id], out time, out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } @@ -1578,499 +2290,339 @@ namespace Cdy.Tag /// /// /// - /// + /// /// /// - public string ReadStringValue(int id, Encoding encoding, out byte qulity, out DateTime time) + public string ReadStringValue(int id, Encoding encoding, out byte quality, out DateTime time) { if (mIdAndAddr.ContainsKey(id)) { - return ReadStringValueByAddr(mIdAndAddr[id],encoding, out time, out qulity); + return ReadStringValueByAddr(mIdAndAddr[id],encoding, out time, out quality); } - qulity = byte.MaxValue; + quality = byte.MaxValue; time = DateTime.MinValue; return null; } - #endregion - //#region Helper fun - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe void WriteByte(void* ptr, long ofs, byte val) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // *(addr) = val; - // } - // catch (NullReferenceException) - // { - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe void WriteShort(void* ptr, long ofs, short val) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((short)addr) & 0x3) == 0) - // { - // // aligned write - // *((short*)addr) = val; - // } - // else - // { - // // unaligned write - // byte* valPtr = (byte*)&val; - // addr[0] = valPtr[0]; - // addr[1] = valPtr[1]; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe void WriteInt32(void* ptr, long ofs, int val) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((int)addr) & 0x3) == 0) - // { - // // aligned write - // *((int*)addr) = val; - // } - // else - // { - // // unaligned write - // byte* valPtr = (byte*)&val; - // addr[0] = valPtr[0]; - // addr[1] = valPtr[1]; - // addr[2] = valPtr[2]; - // addr[3] = valPtr[3]; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe void WriteFloat(void* ptr, long ofs, float val) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((int)addr) & 0x3) == 0) - // { - // // aligned write - // *((int*)addr) = *(int*)(&val); - // } - // else - // { - // // unaligned write - // byte* valPtr = (byte*)&val; - // addr[0] = valPtr[0]; - // addr[1] = valPtr[1]; - // addr[2] = valPtr[2]; - // addr[3] = valPtr[3]; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe void WriteInt64(void* ptr, long ofs, Int64 val) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((Int64)addr) & 0x3) == 0) - // { - // // aligned write - // *((Int64*)addr) = val; - // } - // else - // { - // // unaligned write - // byte* valPtr = (byte*)&val; - // addr[0] = valPtr[0]; - // addr[1] = valPtr[1]; - // addr[2] = valPtr[2]; - // addr[3] = valPtr[3]; - // addr[4] = valPtr[4]; - // addr[5] = valPtr[5]; - // addr[6] = valPtr[6]; - // addr[7] = valPtr[7]; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe void WriteDouble(void* ptr, long ofs, double val) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((Int64)addr) & 0x3) == 0) - // { - // // aligned write - // *((Int64*)addr) = *(Int64*)(&val); - // } - // else - // { - // // unaligned write - // byte* valPtr = (byte*)&val; - // addr[0] = valPtr[0]; - // addr[1] = valPtr[1]; - // addr[2] = valPtr[2]; - // addr[3] = valPtr[3]; - // addr[4] = valPtr[4]; - // addr[5] = valPtr[5]; - // addr[6] = valPtr[6]; - // addr[7] = valPtr[7]; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe void WriteDateTime(void* ptr, long ofs, DateTime val) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((Int64)addr) & 0x3) == 0) - // { - // // aligned write - // *((Int64*)addr) = *(Int64*)(&val); - // } - // else - // { - // // unaligned write - // byte* valPtr = (byte*)&val; - // addr[0] = valPtr[0]; - // addr[1] = valPtr[1]; - // addr[2] = valPtr[2]; - // addr[3] = valPtr[3]; - // addr[4] = valPtr[4]; - // addr[5] = valPtr[5]; - // addr[6] = valPtr[6]; - // addr[7] = valPtr[7]; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe int ReadInt32(void* ptr, long ofs) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((int)addr) & 0x3) == 0) - // { - // //aligned read - // return *((int*)addr); - // } - // else - // { - // // unaligned read - // int val; - // byte* valPtr = (byte*)&val; - // valPtr[0] = addr[0]; - // valPtr[1] = addr[1]; - // valPtr[2] = addr[2]; - // valPtr[3] = addr[3]; - // return val; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe float ReadFloat(void* ptr, long ofs) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((int)addr) & 0x3) == 0) - // { - // //aligned read - // return *((float*)addr); - // } - // else - // { - // // unaligned read - // float val; - // byte* valPtr = (byte*)&val; - // valPtr[0] = addr[0]; - // valPtr[1] = addr[1]; - // valPtr[2] = addr[2]; - // valPtr[3] = addr[3]; - // return val; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe short ReadShort(void* ptr, long ofs) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((short)addr) & 0x3) == 0) - // { - // //aligned read - // return *((short*)addr); - // } - // else - // { - // // unaligned read - // short val; - // byte* valPtr = (byte*)&val; - // valPtr[0] = addr[0]; - // valPtr[1] = addr[1]; - // return val; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe byte ReadByte(void* ptr, long ofs) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // return *(addr); - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe long ReadInt64(void* ptr, long ofs) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((long)addr) & 0x3) == 0) - // { - // //aligned read - // return *((long*)addr); - // } - // else - // { - // // unaligned read - // long val; - // byte* valPtr = (byte*)&val; - // valPtr[0] = addr[0]; - // valPtr[1] = addr[1]; - // valPtr[2] = addr[2]; - // valPtr[3] = addr[3]; - - // valPtr[4] = addr[4]; - // valPtr[5] = addr[5]; - // valPtr[6] = addr[6]; - // valPtr[7] = addr[7]; - - // return val; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe double ReadDouble(void* ptr, long ofs) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((long)addr) & 0x3) == 0) - // { - // //aligned read - // return *((double*)addr); - // } - // else - // { - // // unaligned read - // double val; - // byte* valPtr = (byte*)&val; - // valPtr[0] = addr[0]; - // valPtr[1] = addr[1]; - // valPtr[2] = addr[2]; - // valPtr[3] = addr[3]; - - // valPtr[4] = addr[4]; - // valPtr[5] = addr[5]; - // valPtr[6] = addr[6]; - // valPtr[7] = addr[7]; - - // return val; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - - ///// - ///// - ///// - ///// - ///// - ///// - //public static unsafe DateTime ReadDateTime(void* ptr, long ofs) - //{ - // try - // { - // byte* addr = (byte*)ptr + ofs; - // if ((unchecked((long)addr) & 0x3) == 0) - // { - // //aligned read - // return *((DateTime*)addr); - // } - // else - // { - // // unaligned read - // DateTime val; - // byte* valPtr = (byte*)&val; - // valPtr[0] = addr[0]; - // valPtr[1] = addr[1]; - // valPtr[2] = addr[2]; - // valPtr[3] = addr[3]; - - // valPtr[4] = addr[4]; - // valPtr[5] = addr[5]; - // valPtr[6] = addr[6]; - // valPtr[7] = addr[7]; - - // return val; - // } - // } - // catch (NullReferenceException) - // { - // // this method is documented to throw AccessViolationException on any AV - // throw new AccessViolationException(); - // } - //} - //#endregion + /// + /// + /// + /// + /// + /// + /// + public IntPointData ReadIntPointValue(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadIntPointValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new IntPointData(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool ReadIntPointValue(int id,out int x,out int y, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadIntPointValueByAddr(id, out quality, out time, out x, out y); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y =0; + return false; + } + + /// + /// + /// + /// + /// + /// + /// + public UIntPointData ReadUIntPointValue(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadUIntPointValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new UIntPointData(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool ReadUIntPointValue(int id, out uint x, out uint y, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadUIntPointValueByAddr(id, out quality, out time, out x, out y); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y = 0; + return false; + } + + /// + /// + /// + /// + /// + /// + /// + public IntPoint3Data ReadIntPoint3Value(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadIntPoint3ValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new IntPoint3Data(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool ReadIntPoint3Value(int id, out int x, out int y,out int z, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadIntPoint3ValueByAddr(id, out quality, out time, out x, out y,out z); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y =z= 0; + return false; + } + + + /// + /// + /// + /// + /// + /// + /// + public UIntPoint3Data ReadUIntPoint3Value(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadUIntPoint3ValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new UIntPoint3Data(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool ReadUIntPoint3Value(int id, out uint x, out uint y, out uint z, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadUIntPoint3ValueByAddr(id, out quality, out time, out x, out y, out z); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y = z = 0; + return false; + } + + /// + /// + /// + /// + /// + /// + /// + + public LongPointData ReadLongPointValue(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadLongPointValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new LongPointData(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool ReadLongPointValue(int id, out long x, out long y, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadLongPointValueByAddr(id, out quality, out time, out x, out y); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y = 0; + return false; + } + + /// + /// + /// + /// + /// + /// + /// + public ULongPointData ReadULongPointValue(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadULongPointValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new ULongPointData(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool ReadULongPointValue(int id, out ulong x, out ulong y, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadULongPointValueByAddr(id, out quality, out time, out x, out y); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y = 0; + return false; + } + + /// + /// + /// + /// + /// + /// + /// + public LongPoint3Data ReadLongPoint3Value(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadLongPoint3ValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new LongPoint3Data(); + } + + + public bool ReadLongPoint3Value(int id, out long x, out long y, out long z, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadLongPoint3ValueByAddr(id, out quality, out time, out x, out y, out z); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y =z= 0; + return false; + } + + /// + /// + /// + /// + /// + /// + /// + public ULongPoint3Data ReadULongPoint3Value(int id, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + return ReadULongPoint3ValueByAddr(id, out quality, out time); + } + quality = byte.MaxValue; + time = DateTime.MinValue; + return new ULongPoint3Data(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool ReadULongPoint3Value(int id, out ulong x, out ulong y, out ulong z, out byte quality, out DateTime time) + { + if (mIdAndAddr.ContainsKey(id)) + { + ReadULongPoint3ValueByAddr(id, out quality, out time, out x, out y, out z); + return true; + } + quality = byte.MaxValue; + time = DateTime.MinValue; + x = y = z = 0; + return false; + } + + #endregion #region Addr @@ -2133,6 +2685,12 @@ namespace Cdy.Tag return mConfigDatabase.GetTagsIdByLinkAddress(address); } + /// + /// + /// + /// + /// + /// public bool SetTagValue(int id, object value) { try @@ -2185,6 +2743,8 @@ namespace Cdy.Tag } + + /// /// /// @@ -2194,12 +2754,34 @@ namespace Cdy.Tag public bool SetTagValue(List ids, object value) { bool re = true; - Parallel.ForEach(ids, (vv) => + //Parallel.ForEach(ids, (vv) => + foreach (var vv in ids) { re &= SetTagValue(vv, value); - }); + } + //}); + return re; + } + + /// + /// + /// + /// + /// + /// + public bool SetPointValue(List ids, params object[] values) + { + bool re = true; + //Parallel.ForEach(ids, (vv) => + foreach (var vv in ids) + { + re &= SetPointValue(vv, values); + } + //}); return re; } + + #endregion ...Interfaces... } } diff --git a/DbManager.Desktop/Common/PasswordControl.cs b/DbManager.Desktop/Common/PasswordControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..51047265da95af240723e6267bf08eca5b5630e5 --- /dev/null +++ b/DbManager.Desktop/Common/PasswordControl.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace DBInStudio.Desktop +{ + /// + /// 按照步骤 1a 或 1b 操作,然后执行步骤 2 以在 XAML 文件中使用此自定义控件。 + /// + /// 步骤 1a) 在当前项目中存在的 XAML 文件中使用该自定义控件。 + /// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根 + /// 元素中: + /// + /// xmlns:MyNamespace="clr-namespace:DBInStudio.Desktop.Common" + /// + /// + /// 步骤 1b) 在其他项目中存在的 XAML 文件中使用该自定义控件。 + /// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根 + /// 元素中: + /// + /// xmlns:MyNamespace="clr-namespace:DBInStudio.Desktop.Common;assembly=DBInStudio.Desktop.Common" + /// + /// 您还需要添加一个从 XAML 文件所在的项目到此项目的项目引用, + /// 并重新生成以避免编译错误: + /// + /// 在解决方案资源管理器中右击目标项目,然后依次单击 + /// “添加引用”->“项目”->[浏览查找并选择此项目] + /// + /// + /// 步骤 2) + /// 继续操作并在 XAML 文件中使用控件。 + /// + /// + /// + /// + public class PasswordControl : Control + { + static PasswordControl() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(PasswordControl), new FrameworkPropertyMetadata(typeof(PasswordControl))); + } + + + #region ... Variables ... + private PasswordBox mpb; + private TextBox mtb; + private bool mIgnorNotifyChanged = false; + #endregion ...Variables... + + #region ... Events ... + + #endregion ...Events... + + #region ... Constructor... + + #endregion ...Constructor... + + #region ... Properties ... + + /// + /// + /// + public string Password + { + get { return (string)GetValue(PasswordProperty); } + set { SetValue(PasswordProperty, value); } + } + + // Using a DependencyProperty as the backing store for Password. This enables animation, styling, binding, etc... + public static readonly DependencyProperty PasswordProperty = DependencyProperty.Register("Password", typeof(string), typeof(PasswordControl), new PropertyMetadata("",new PropertyChangedCallback(PasswordChanged))); + + + /// + /// + /// + /// + /// + private static void PasswordChanged(DependencyObject sender,DependencyPropertyChangedEventArgs arg) + { + (sender as PasswordControl).ApplyPasswordToPasswordBox(); + } + + + + /// + /// 显示Password + /// + public bool IsShowPassword + { + get { return (bool)GetValue(IsShowPasswordProperty); } + set { SetValue(IsShowPasswordProperty, value); } + } + + // Using a DependencyProperty as the backing store for IsShowPassword. This enables animation, styling, binding, etc... + public static readonly DependencyProperty IsShowPasswordProperty = DependencyProperty.Register("IsShowPassword", typeof(bool), typeof(PasswordControl), new PropertyMetadata(false,new PropertyChangedCallback(IsShowPasswordChanged))); + + private static void IsShowPasswordChanged(DependencyObject sender, DependencyPropertyChangedEventArgs arg) + { + (sender as PasswordControl).ApplyPasswordBoxVisiable(); + } + + #endregion ...Properties... + + #region ... Methods ... + + /// + /// + /// + private void ApplyPasswordBoxVisiable() + { + if(IsShowPassword) + { + mtb.Visibility = Visibility.Visible; + mpb.Visibility = Visibility.Hidden; + } + else + { + mtb.Visibility = Visibility.Hidden; + mpb.Visibility = Visibility.Visible; + } + } + + /// + /// + /// + private void ApplyPasswordToPasswordBox() + { + if (!mIgnorNotifyChanged) + { + if(mpb!=null) + mpb.Password = Password; + } + } + + /// + /// + /// + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + + mpb = GetTemplateChild("pb") as PasswordBox; + mtb = GetTemplateChild("tb") as TextBox; + if (mpb != null) + { + mpb.PasswordChanged += Mpb_PasswordChanged; + } + ApplyPasswordBoxVisiable(); + } + + /// + /// + /// + /// + /// + private void Mpb_PasswordChanged(object sender, RoutedEventArgs e) + { + mIgnorNotifyChanged = true; + this.Password = (sender as PasswordBox).Password; + mIgnorNotifyChanged = false; + } + #endregion ...Methods... + + #region ... Interfaces ... + + #endregion ...Interfaces... + } +} diff --git a/DbManager.Desktop/DBInStudio.Desktop.csproj b/DbManager.Desktop/DBInStudio.Desktop.csproj index 1b99e8ca94669816c08d1bc33dbc042908555f9f..e6271bde652fc5ddd38a488194c0f19225f64a2b 100644 --- a/DbManager.Desktop/DBInStudio.Desktop.csproj +++ b/DbManager.Desktop/DBInStudio.Desktop.csproj @@ -16,11 +16,17 @@ + + + + + + + - @@ -30,11 +36,17 @@ + + + + + + + - diff --git a/DbManager.Desktop/Image/Database2.png b/DbManager.Desktop/Image/Database2.png new file mode 100644 index 0000000000000000000000000000000000000000..e87f1be5e72ab19a50ee3876aeb950bd9fe650e1 Binary files /dev/null and b/DbManager.Desktop/Image/Database2.png differ diff --git a/DbManager.Desktop/Image/hidden.png b/DbManager.Desktop/Image/hidden.png new file mode 100644 index 0000000000000000000000000000000000000000..a62907f1a5fc1565b0966f7fdde997a96595c970 Binary files /dev/null and b/DbManager.Desktop/Image/hidden.png differ diff --git a/DbManager.Desktop/Image/permissions.png b/DbManager.Desktop/Image/permissions.png new file mode 100644 index 0000000000000000000000000000000000000000..be2f140df4bef4f2963a23aaa5e20c90d948972f Binary files /dev/null and b/DbManager.Desktop/Image/permissions.png differ diff --git a/DbManager.Desktop/Image/show.png b/DbManager.Desktop/Image/show.png new file mode 100644 index 0000000000000000000000000000000000000000..7559a1c5ac2fb339db8c6ecfbc9c3e7a65d87d71 Binary files /dev/null and b/DbManager.Desktop/Image/show.png differ diff --git a/DbManager.Desktop/Image/user.png b/DbManager.Desktop/Image/user.png new file mode 100644 index 0000000000000000000000000000000000000000..779b252c839244ef7bc9e851be36fc35b3c2bbb3 Binary files /dev/null and b/DbManager.Desktop/Image/user.png differ diff --git a/DbManager.Desktop/MainWindow.xaml b/DbManager.Desktop/MainWindow.xaml index 715b387aa9ab8bd30985766f0767cfbc7fd43045..ed0ec922bf7012c817e7e1728ae4ed93e4fddb74 100644 --- a/DbManager.Desktop/MainWindow.xaml +++ b/DbManager.Desktop/MainWindow.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:DBInStudio.Desktop" mc:Ignorable="d" - Title="{local:ResMarker MainwindowTitle}" Height="450" Width="800" WindowState="Maximized" WindowStartupLocation="CenterScreen" Icon="mars_2.png"> + Title="{local:ResMarker MainwindowTitle}" Height="450" Width="800" WindowState="Maximized" WindowStartupLocation="CenterScreen" Icon="/Image/Database2.png"> @@ -173,12 +173,29 @@ + + + + + + + + + + + + + + - -