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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
diff --git a/DbManager.Desktop/Properties/Resources.Designer.cs b/DbManager.Desktop/Properties/Resources.Designer.cs
index 37ce8696e3e66be1de0ffdb559e718ad8879a3dc..5afa5e28c5ad347a1e656e15296bc1989aab863d 100644
--- a/DbManager.Desktop/Properties/Resources.Designer.cs
+++ b/DbManager.Desktop/Properties/Resources.Designer.cs
@@ -168,6 +168,15 @@ namespace DBInStudio.Desktop.Properties {
}
}
+ ///
+ /// 查找类似 EnableWrite 的本地化字符串。
+ ///
+ internal static string EnableWrite {
+ get {
+ return ResourceManager.GetString("EnableWrite", resourceCulture);
+ }
+ }
+
///
/// 查找类似 erro 的本地化字符串。
///
@@ -186,6 +195,15 @@ namespace DBInStudio.Desktop.Properties {
}
}
+ ///
+ /// 查找类似 Group 的本地化字符串。
+ ///
+ internal static string Group {
+ get {
+ return ResourceManager.GetString("Group", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Id 的本地化字符串。
///
@@ -321,6 +339,24 @@ namespace DBInStudio.Desktop.Properties {
}
}
+ ///
+ /// 查找类似 Permission 的本地化字符串。
+ ///
+ internal static string Permission {
+ get {
+ return ResourceManager.GetString("Permission", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Permission list 的本地化字符串。
+ ///
+ internal static string PermissionList {
+ get {
+ return ResourceManager.GetString("PermissionList", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Record 的本地化字符串。
///
@@ -438,6 +474,15 @@ namespace DBInStudio.Desktop.Properties {
}
}
+ ///
+ /// 查找类似 Tag 的本地化字符串。
+ ///
+ internal static string Tag {
+ get {
+ return ResourceManager.GetString("Tag", resourceCulture);
+ }
+ }
+
///
/// 查找类似 TagGroup 的本地化字符串。
///
@@ -465,6 +510,24 @@ namespace DBInStudio.Desktop.Properties {
}
}
+ ///
+ /// 查找类似 User 的本地化字符串。
+ ///
+ internal static string User {
+ get {
+ return ResourceManager.GetString("User", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 User list 的本地化字符串。
+ ///
+ internal static string UserList {
+ get {
+ return ResourceManager.GetString("UserList", resourceCulture);
+ }
+ }
+
///
/// 查找类似 UserName 的本地化字符串。
///
diff --git a/DbManager.Desktop/Properties/Resources.resx b/DbManager.Desktop/Properties/Resources.resx
index e0c68465449416368d66bc7f9cb65693a179177a..e3e5136f105154567416649cb6fb6542801dd881 100644
--- a/DbManager.Desktop/Properties/Resources.resx
+++ b/DbManager.Desktop/Properties/Resources.resx
@@ -154,12 +154,18 @@
Driver
+
+ EnableWrite
+
erro
Export
+
+ Group
+
Id
@@ -206,6 +212,12 @@
Percent
+
+ Permission
+
+
+ Permission list
+
Record
@@ -246,6 +258,9 @@
Slope
+
+ Tag
+
TagGroup
@@ -255,6 +270,12 @@
Update tag {0} failed!
+
+ User
+
+
+ User list
+
UserName
diff --git a/DbManager.Desktop/Themes/Generic.xaml b/DbManager.Desktop/Themes/Generic.xaml
index 92c8f7008e8676d3c6d113a58219be77b4d03522..c7eee4fb73f12382d4353a225c6793700f6ecfc4 100644
--- a/DbManager.Desktop/Themes/Generic.xaml
+++ b/DbManager.Desktop/Themes/Generic.xaml
@@ -29,7 +29,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DbManager.Desktop/View/PermissionDetailView.xaml b/DbManager.Desktop/View/PermissionDetailView.xaml
new file mode 100644
index 0000000000000000000000000000000000000000..be55fdfc2b444c390d11d53fa3200a1a60b9032c
--- /dev/null
+++ b/DbManager.Desktop/View/PermissionDetailView.xaml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DbManager.Desktop/View/PermissionDetailView.xaml.cs b/DbManager.Desktop/View/PermissionDetailView.xaml.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2b5b4b6ded3a36564e3597d1b8ad0c8af68638fc
--- /dev/null
+++ b/DbManager.Desktop/View/PermissionDetailView.xaml.cs
@@ -0,0 +1,26 @@
+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.View
+{
+ ///
+ /// PermissionDetailView.xaml 的交互逻辑
+ ///
+ public partial class PermissionDetailView : UserControl
+ {
+ public PermissionDetailView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/DbManager.Desktop/View/TagGroupDetailView.xaml b/DbManager.Desktop/View/TagGroupDetailView.xaml
index ef39697b87c09921ff9dee6fbde09e40f6929b7f..df481829dc7cb9092f4d4834331c29707c1ad033 100644
--- a/DbManager.Desktop/View/TagGroupDetailView.xaml
+++ b/DbManager.Desktop/View/TagGroupDetailView.xaml
@@ -11,7 +11,7 @@
-
+
diff --git a/DbManager.Desktop/View/TagGroupDetailView.xaml.cs b/DbManager.Desktop/View/TagGroupDetailView.xaml.cs
index 1662035caa36b36eb1f84167e13b0186180da79c..ea7f0fc597611d8f7b087d74a5a9bb751d9efd10 100644
--- a/DbManager.Desktop/View/TagGroupDetailView.xaml.cs
+++ b/DbManager.Desktop/View/TagGroupDetailView.xaml.cs
@@ -1,4 +1,5 @@
-using System;
+using DBInStudio.Desktop.ViewModel;
+using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
@@ -22,5 +23,13 @@ namespace DBInStudio.Desktop.View
{
InitializeComponent();
}
+
+ private void DataGrid_ScrollChanged(object sender, ScrollChangedEventArgs e)
+ {
+ if((e.ExtentHeight - e.VerticalOffset)<50)
+ {
+ (this.DataContext as TagGroupDetailViewModel).ContinueLoadData();
+ }
+ }
}
}
diff --git a/DbManager.Desktop/View/UserGroupDetailView.xaml b/DbManager.Desktop/View/UserGroupDetailView.xaml
new file mode 100644
index 0000000000000000000000000000000000000000..3acb33c9de4040b9b633c4e0346088fab6cc08dc
--- /dev/null
+++ b/DbManager.Desktop/View/UserGroupDetailView.xaml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DbManager.Desktop/View/UserGroupDetailView.xaml.cs b/DbManager.Desktop/View/UserGroupDetailView.xaml.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2a5d6c0321aafda64e412d9ac5523e46b9e4d7fc
--- /dev/null
+++ b/DbManager.Desktop/View/UserGroupDetailView.xaml.cs
@@ -0,0 +1,56 @@
+using DBInStudio.Desktop.ViewModel;
+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.View
+{
+ ///
+ /// UserGroupDetailView.xaml 的交互逻辑
+ ///
+ public partial class UserGroupDetailView : UserControl
+ {
+ public UserGroupDetailView()
+ {
+ InitializeComponent();
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void TextBox_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.Key == Key.Enter || e.Key == Key.Return)
+ {
+ (sender as TextBox).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
+ }
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void TextBox_Loaded(object sender, RoutedEventArgs e)
+ {
+ if ((sender as TextBox).IsVisible)
+ {
+ (sender as TextBox).Focus();
+ (sender as TextBox).CaretIndex = (sender as TextBox).Text.Length;
+ (sender as TextBox).SelectedText = " ";
+ (sender as TextBox).SelectedText = "";
+ }
+ }
+ }
+}
diff --git a/DbManager.Desktop/ViewModel/ITreeViewModel.cs b/DbManager.Desktop/ViewModel/ITreeViewModel.cs
index fe1a2e75a1f76111f6a372706fbcc85d24e1b2fd..a6edd2755e0c0a89d997db2115454a33afbea1d5 100644
--- a/DbManager.Desktop/ViewModel/ITreeViewModel.cs
+++ b/DbManager.Desktop/ViewModel/ITreeViewModel.cs
@@ -18,7 +18,7 @@ namespace DBInStudio.Desktop
{
#region ... Variables ...
- internal string mName;
+ internal string mName="";
private bool mIsSelected = false;
private bool mIsExpanded = false;
private bool mIsEdit;
diff --git a/DbManager.Desktop/ViewModel/LoginViewModel.cs b/DbManager.Desktop/ViewModel/LoginViewModel.cs
index 1fd559fc756fb30d17d7b276c89dc6e676564bbb..7c53d708010050cdd4cd1be3c7349401262cc6c6 100644
--- a/DbManager.Desktop/ViewModel/LoginViewModel.cs
+++ b/DbManager.Desktop/ViewModel/LoginViewModel.cs
@@ -148,7 +148,7 @@ namespace DBInStudio.Desktop.ViewModel
var pps = Process.GetProcessesByName("DBInStudioServer");
if(pps==null||pps.Length==0)
{
- Process.Start("DBInStudioServer.exe").WaitForExit(2000);
+ Process.Start("DBInStudioServer.exe").WaitForExit(20000);
}
}
}
diff --git a/DbManager.Desktop/ViewModel/MainViewModel.cs b/DbManager.Desktop/ViewModel/MainViewModel.cs
index a59cba8dba0bc28007d870fc134378eb58bc8ce6..1bb93b1565277982f5c15d5664b3f161edcb4bd3 100644
--- a/DbManager.Desktop/ViewModel/MainViewModel.cs
+++ b/DbManager.Desktop/ViewModel/MainViewModel.cs
@@ -354,6 +354,8 @@ namespace DBInStudio.Desktop
ListDatabaseViewModel ldm = new ListDatabaseViewModel();
if (ldm.ShowDialog().Value)
{
+ this.TagGroup.Clear();
+
mDatabase = ldm.SelectDatabase.Name;
var dbitem = new DatabaseViewModel() { Name = mDatabase,IsSelected=true,IsExpanded=true };
this.TagGroup.Add(dbitem);
@@ -361,7 +363,7 @@ namespace DBInStudio.Desktop
mRootTagGroupModel.Database = mDatabase;
dbitem.Children.Add(securityModel);
securityModel.Database = mDatabase;
-
+ securityModel.Init();
Task.Run(() => {
TagViewModel.Drivers = DevelopServiceHelper.Helper.GetRegistorDrivers(mDatabase);
QueryGroups();
@@ -379,7 +381,7 @@ namespace DBInStudio.Desktop
{
string sparent = mCurrentSelectTreeItem!=null && mCurrentSelectTreeItem is TagGroupViewModel? (mCurrentSelectTreeItem as TagGroupViewModel).FullName:string.Empty;
string name = GetNewGroupName();
- if(DevelopServiceHelper.Helper.AddGroup(mDatabase,name,sparent))
+ if(DevelopServiceHelper.Helper.AddTagGroup(mDatabase,name,sparent))
{
if (mCurrentSelectTreeItem != null && mCurrentSelectTreeItem is TagGroupViewModel)
{
@@ -459,6 +461,10 @@ namespace DBInStudio.Desktop
{
(ContentViewModel as TagGroupDetailViewModel).UpdateAll();
}
+ else if(ContentViewModel is PermissionTreeItemViewModel)
+ {
+ (ContentViewModel as PermissionDetailViewModel).Update();
+ }
if((mCurrentSelectTreeItem is TagGroupViewModel)||(mCurrentSelectTreeItem is RootTagGroupViewModel))
{
@@ -468,6 +474,22 @@ namespace DBInStudio.Desktop
}
(ContentViewModel as TagGroupDetailViewModel).GroupModel = mCurrentSelectTreeItem as TagGroupViewModel;
}
+ else if(mCurrentSelectTreeItem is UserTreeItemViewModel)
+ {
+ if(ContentViewModel == null || !(ContentViewModel is UserGroupDetailViewModel))
+ {
+ ContentViewModel = new UserGroupDetailViewModel();
+ }
+ (ContentViewModel as UserGroupDetailViewModel).Model = mCurrentSelectTreeItem as UserTreeItemViewModel;
+ }
+ else if(mCurrentSelectTreeItem is PermissionTreeItemViewModel)
+ {
+ if (ContentViewModel == null || !(ContentViewModel is PermissionTreeItemViewModel))
+ {
+ ContentViewModel = new PermissionDetailViewModel() { Database = this.mDatabase };
+ }
+ (ContentViewModel as PermissionDetailViewModel).Query();
+ }
else
{
ContentViewModel = null;
diff --git a/DbManager.Desktop/ViewModel/PermissionDetailViewModel.cs b/DbManager.Desktop/ViewModel/PermissionDetailViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..efeb9d0260a0c1196602c364a421d451d3106be2
--- /dev/null
+++ b/DbManager.Desktop/ViewModel/PermissionDetailViewModel.cs
@@ -0,0 +1,440 @@
+//==============================================================
+// Copyright (C) 2020 Inc. All rights reserved.
+//
+//==============================================================
+// Create by 种道洋 at 2020/5/3 19:29:26.
+// Version 1.0
+// 种道洋
+//==============================================================
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Windows.Input;
+
+namespace DBInStudio.Desktop.ViewModel
+{
+ ///
+ ///
+ ///
+ public class PermissionDetailViewModel : ViewModelBase
+ {
+
+ #region ... Variables ...
+ private System.Collections.ObjectModel.ObservableCollection mPermissions = new System.Collections.ObjectModel.ObservableCollection();
+
+ private ICommand mAddCommand;
+ private ICommand mRemoveCommand;
+
+ private PermissionItemViewModel mCurrentSelected;
+
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ public ICommand AddCommand
+ {
+ get
+ {
+ if(mAddCommand==null)
+ {
+ mAddCommand = new RelayCommand(() => {
+ Add();
+ });
+ }
+ return mAddCommand;
+ }
+ }
+
+ ///
+ ///
+ ///
+ public ICommand RemoveCommand
+ {
+ get
+ {
+ if(mRemoveCommand==null)
+ {
+ mRemoveCommand = new RelayCommand(() => {
+ Remove();
+ },()=> { return CurrentSelected != null && !CurrentSelected.IsSuper; });
+ }
+ return mRemoveCommand;
+ }
+ }
+
+
+
+ ///
+ ///
+ ///
+ public PermissionItemViewModel CurrentSelected
+ {
+ get
+ {
+ return mCurrentSelected;
+ }
+ set
+ {
+ if (mCurrentSelected != value)
+ {
+ Update();
+ mCurrentSelected = value;
+ OnPropertyChanged("CurrentSelected");
+ }
+ }
+ }
+
+
+ public ObservableCollection Permissions
+ {
+ get
+ {
+ return mPermissions;
+ }
+ set
+ {
+ mPermissions = value;
+ OnPropertyChanged("Permissions");
+ }
+ }
+
+ public string Database { get; set; }
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ ///
+ ///
+ ///
+ public void Query()
+ {
+ var pps = DBDevelopClientApi.DevelopServiceHelper.Helper.GetAllDatabasePermission(Database);
+ mPermissions.Clear();
+ foreach(var vv in pps)
+ {
+ var pp = new PermissionItemViewModel(vv);
+ mPermissions.Add(pp);
+ }
+ }
+
+ private string GetAvaiabelName(string name)
+ {
+ var names = this.Permissions.Select(e => e.Name).ToArray();
+ string ss = name;
+ for(int i=1;i
+ ///
+ ///
+ private void Add()
+ {
+ string sname = GetAvaiabelName("Permission");
+ Cdy.Tag.PermissionItem pitem = new Cdy.Tag.PermissionItem() { Name = sname };
+ //if(DBDevelopClientApi.DevelopServiceHelper.Helper.UpdateDatabasePermission(this.Database,pitem))
+ //{
+ this.Permissions.Add(new PermissionItemViewModel(pitem) { IsNew = true });
+ //}
+ }
+
+ ///
+ ///
+ ///
+ private void Remove()
+ {
+ if(DBDevelopClientApi.DevelopServiceHelper.Helper.RemoveDatabasePermission(this.Database,CurrentSelected.Name))
+ {
+ mPermissions.Remove(CurrentSelected);
+ }
+ }
+
+ ///
+ ///
+ ///
+ public void Update()
+ {
+ if (mCurrentSelected != null)
+ {
+ mCurrentSelected.IsNew = false;
+ DBDevelopClientApi.DevelopServiceHelper.Helper.UpdateDatabasePermission(this.Database, mCurrentSelected.Model);
+ }
+ }
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+ public class PermissionItemViewModel:ViewModelBase
+ {
+
+ #region ... Variables ...
+
+ private Cdy.Tag.PermissionItem mModel;
+
+ private string mGroupString;
+
+ private ICommand mGroupEditCommand;
+
+ private bool mIsNew = false;
+
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+ ///
+ ///
+ ///
+ public PermissionItemViewModel()
+ {
+
+ }
+
+ ///
+ ///
+ ///
+ ///
+ public PermissionItemViewModel(Cdy.Tag.PermissionItem mode)
+ {
+ mModel = mode;
+ MakeGroupString();
+ }
+
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ ///
+ ///
+ ///
+ public bool IsNew
+ {
+ get
+ {
+ return mIsNew;
+ }
+ set
+ {
+ if (mIsNew != value)
+ {
+ mIsNew = value;
+ OnPropertyChanged("IsNew");
+ OnPropertyChanged("CanNameEdit");
+ }
+ }
+ }
+
+
+ public bool IsNameReadOnly
+ {
+ get
+ {
+ return !mIsNew || mModel.SuperPermission;
+ }
+ }
+
+ public bool IsEnableEdit
+ {
+ get
+ {
+ return !mModel.SuperPermission;
+ }
+ }
+
+
+
+ ///
+ ///
+ ///
+ public ICommand GroupEditCommand
+ {
+ get
+ {
+ if(mGroupEditCommand == null)
+ {
+
+ }
+ return mGroupEditCommand;
+ }
+ }
+
+
+
+ ///
+ ///
+ ///
+ public Cdy.Tag.PermissionItem Model
+ {
+ get
+ {
+ return mModel;
+ }
+ set
+ {
+ if (mModel != value)
+ {
+ mModel = value;
+ OnPropertyChanged("Model");
+ }
+ }
+ }
+
+ ///
+ ///
+ ///
+ public string Name
+ {
+ get
+ {
+ return mModel.Name;
+ }
+ set
+ {
+ mModel.Name = value;
+ OnPropertyChanged("Name");
+ }
+ }
+
+ ///
+ ///
+ ///
+ public string Desc
+ {
+ get
+ {
+ return mModel.Desc;
+ }
+ set
+ {
+ mModel.Desc = value;
+ OnPropertyChanged("Desc");
+ }
+ }
+
+ ///
+ ///
+ ///
+ public bool IsSuper
+ {
+ get
+ {
+ return mModel.SuperPermission;
+ }
+ }
+
+ ///
+ ///
+ ///
+ public bool EnableWrite
+ {
+ get
+ {
+ return mModel.EnableWrite;
+ }
+ set
+ {
+ if (mModel.EnableWrite != value)
+ {
+ mModel.EnableWrite = value;
+ OnPropertyChanged("EnableWrite");
+ }
+ }
+ }
+
+ ///
+ ///
+ ///
+ public string GroupString
+ {
+ get
+ {
+ return mGroupString;
+ }
+ set
+ {
+ if (mGroupString != value)
+ {
+ mGroupString = value;
+ ParserGroupString();
+ OnPropertyChanged("GroupString");
+ }
+ }
+ }
+
+
+ ///
+ ///
+ ///
+ public List Group
+ {
+ get
+ {
+ return Model.Group;
+ }
+ set
+ {
+ if (Model.Group != value)
+ {
+ Model.Group = value;
+ }
+ MakeGroupString();
+ OnPropertyChanged("Group");
+ }
+ }
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ private void ParserGroupString()
+ {
+ Group = mGroupString.Split(new char[] { ',' }).ToList();
+ }
+
+ private void MakeGroupString()
+ {
+ StringBuilder sb = new StringBuilder();
+ foreach(var vv in Group)
+ {
+ sb.Append(vv + ",");
+ }
+ sb.Length = sb.Length > 0 ? sb.Length - 1 : sb.Length;
+ mGroupString = sb.ToString();
+ }
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+}
diff --git a/DbManager.Desktop/ViewModel/SecurityTreeItemViewModel.cs b/DbManager.Desktop/ViewModel/SecurityTreeItemViewModel.cs
index 8465a964c093f76be0e6aef2f3a499ed1fafdbac..3fc9828c6425d9902fb1a46a30ac3f196e68839e 100644
--- a/DbManager.Desktop/ViewModel/SecurityTreeItemViewModel.cs
+++ b/DbManager.Desktop/ViewModel/SecurityTreeItemViewModel.cs
@@ -7,9 +7,12 @@
// 种道洋
//==============================================================
+using DBDevelopClientApi;
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Text;
+using System.Windows;
namespace DBInStudio.Desktop
{
@@ -18,9 +21,189 @@ namespace DBInStudio.Desktop
///
public class SecurityTreeItemViewModel:HasChildrenTreeItemViewModel
{
+
+ #region ... Variables ...
+ private UserGroupRootViewModel mUserViewModel = new UserGroupRootViewModel();
+ private PermissionTreeItemViewModel mPermissionViewModel = new PermissionTreeItemViewModel();
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+ ///
+ ///
+ ///
public SecurityTreeItemViewModel()
{
Name = Res.Get("Security");
+
+ }
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ ///
+ ///
+ ///
+
+ public void Init()
+ {
+ Children.Clear();
+
+ Children.Add(mUserViewModel);
+ Children.Add(mPermissionViewModel);
+ mUserViewModel.Database = this.Database;
+ mPermissionViewModel.Database = this.Database;
+ QueryGroups();
+
+ }
+
+ private void QueryGroups()
+ {
+ Application.Current.Dispatcher.Invoke(() => {
+ this.mUserViewModel.Children.Clear();
+ });
+
+ var vv = DevelopServiceHelper.Helper.QueryDatabaseUserGroups(this.Database);
+ if (vv != null)
+ {
+ foreach (var vvv in vv.Where(e => string.IsNullOrEmpty(e.Value)))
+ {
+ Application.Current.Dispatcher.Invoke(() => {
+ UserTreeItemViewModel groupViewModel = new UserTreeItemViewModel() { mName = vvv.Key, Database = Database };
+ mUserViewModel.Children.Add(groupViewModel);
+ groupViewModel.InitData(vv);
+ });
+ }
+ }
+ }
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+ public class UserGroupRootViewModel : UserTreeItemViewModel
+ {
+
+ #region ... Variables ...
+
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+ public UserGroupRootViewModel()
+ {
+ Name = Res.Get("User");
+ }
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ public override string FullName => "";
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+
+ ///
+ ///
+ ///
+ public class UserTreeItemViewModel : HasChildrenTreeItemViewModel
+ {
+
+ #region ... Variables ...
+
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ ///
+ ///
+ ///
+ ///
+ public void InitData(Dictionary groups)
+ {
+ foreach (var vv in groups.Where(e => e.Value == this.FullName))
+ {
+ UserTreeItemViewModel groupViewModel = new UserTreeItemViewModel() { Name = vv.Key, Database = Database };
+ groupViewModel.Parent = this;
+ this.Children.Add(groupViewModel);
+ }
}
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
}
+
+
+ public class PermissionTreeItemViewModel : HasChildrenTreeItemViewModel
+ {
+
+ #region ... Variables ...
+
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+ ///
+ ///
+ ///
+ public PermissionTreeItemViewModel()
+ {
+ Name = Res.Get("Permission");
+ }
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+
}
diff --git a/DbManager.Desktop/ViewModel/TagGroupDetailViewModel.cs b/DbManager.Desktop/ViewModel/TagGroupDetailViewModel.cs
index 79116f3080df791077d8540c1d981eb802f4639a..359ae2910c3352ccf92a3c4813cf697ee65efaee 100644
--- a/DbManager.Desktop/ViewModel/TagGroupDetailViewModel.cs
+++ b/DbManager.Desktop/ViewModel/TagGroupDetailViewModel.cs
@@ -36,6 +36,11 @@ namespace DBInStudio.Desktop.ViewModel
private TagViewModel mCurrentSelectTag;
+ private int mTotalPageNumber = 0;
+ private int mCurrentPageIndex = 0;
+
+ private bool mIsLoading = false;
+
#endregion ...Variables...
#region ... Events ...
@@ -48,6 +53,26 @@ namespace DBInStudio.Desktop.ViewModel
#region ... Properties ...
+ ///
+ ///
+ ///
+ public bool IsLoading
+ {
+ get
+ {
+ return mIsLoading;
+ }
+ set
+ {
+ if (mIsLoading != value)
+ {
+ mIsLoading = value;
+ OnPropertyChanged("IsLoading");
+ }
+ }
+ }
+
+
///
///
///
@@ -155,7 +180,8 @@ namespace DBInStudio.Desktop.ViewModel
{
UpdateAll();
mGroupModel = value;
- QueryTags();
+ mTotalPageNumber = -1;
+ ContinueQueryTags();
}
}
}
@@ -251,8 +277,63 @@ namespace DBInStudio.Desktop.ViewModel
}
}
- System.Threading.Tasks.Task.Run(() => { QueryTags();});
+ System.Threading.Tasks.Task.Run(() => { mCurrentPageIndex--; ContinueQueryTags(); });
+
+ }
+
+ public void ContinueLoadData()
+ {
+ if (!IsLoading)
+ {
+ IsLoading = true;
+ System.Threading.Tasks.Task.Run(() => { ContinueQueryTags(); IsLoading = false; });
+ }
+ }
+
+ ///
+ ///
+ ///
+ private void ContinueQueryTags()
+ {
+ if (mTotalPageNumber == -1)
+ {
+ var vtags = new System.Collections.ObjectModel.ObservableCollection();
+ mCurrentPageIndex = 0;
+
+ var vv = DevelopServiceHelper.Helper.QueryTagByGroup(this.GroupModel.Database, this.GroupModel.FullName,mCurrentPageIndex, out mTotalPageNumber);
+ if (vv != null)
+ {
+ foreach (var vvv in vv)
+ {
+ TagViewModel model = new TagViewModel(vvv.Value.Item1, vvv.Value.Item2);
+ vtags.Add(model);
+ }
+ }
+ SelectGroupTags = vtags;
+ }
+ else
+ {
+ if (mTotalPageNumber > mCurrentPageIndex)
+ {
+ mCurrentPageIndex++;
+ int totalcount = 0;
+
+ var vv = DevelopServiceHelper.Helper.QueryTagByGroup(this.GroupModel.Database, this.GroupModel.FullName, mCurrentPageIndex, out totalcount);
+ if (vv != null)
+ {
+ foreach (var vvv in vv)
+ {
+ Application.Current.Dispatcher.BeginInvoke(new Action(() =>
+ {
+ TagViewModel model = new TagViewModel(vvv.Value.Item1, vvv.Value.Item2);
+ SelectGroupTags.Add(model);
+ }));
+ }
+ }
+ }
+ }
+
}
///
diff --git a/DbManager.Desktop/ViewModel/TagViewModel.cs b/DbManager.Desktop/ViewModel/TagViewModel.cs
index c86b658754272e88dd2bdfad0beb7a49a0450333..917d0f78dc2335e5beff24391f89515458251800 100644
--- a/DbManager.Desktop/ViewModel/TagViewModel.cs
+++ b/DbManager.Desktop/ViewModel/TagViewModel.cs
@@ -877,7 +877,7 @@ namespace DBInStudio.Desktop
public override void Remove()
{
string sname = this.FullName;
- if (DevelopServiceHelper.Helper.RemoveGroup(Database, sname))
+ if (DevelopServiceHelper.Helper.RemoveTagGroup(Database, sname))
{
if (Parent != null && Parent is HasChildrenTreeItemViewModel)
{
@@ -895,7 +895,7 @@ namespace DBInStudio.Desktop
///
public override bool OnRename(string oldName, string newName)
{
- return DevelopServiceHelper.Helper.ReNameGroup(Database,this.FullName, newName);
+ return DevelopServiceHelper.Helper.ReNameTagGroup(Database,this.FullName, newName);
}
///
@@ -935,7 +935,7 @@ namespace DBInStudio.Desktop
///
public RootTagGroupViewModel()
{
- Name = Res.Get("TagGroup");
+ Name = Res.Get("Tag");
}
#endregion ...Constructor...
diff --git a/DbManager.Desktop/ViewModel/UserGroupDetailViewModel.cs b/DbManager.Desktop/ViewModel/UserGroupDetailViewModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..84fb8dc187c5a5209ec6ee99fc7b304795fa0408
--- /dev/null
+++ b/DbManager.Desktop/ViewModel/UserGroupDetailViewModel.cs
@@ -0,0 +1,546 @@
+//==============================================================
+// Copyright (C) 2020 Inc. All rights reserved.
+//
+//==============================================================
+// Create by 种道洋 at 2020/5/1 22:07:12.
+// Version 1.0
+// 种道洋
+//==============================================================
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Windows.Input;
+
+namespace DBInStudio.Desktop.ViewModel
+{
+ ///
+ ///
+ ///
+ public class UserGroupDetailViewModel : ViewModelBase
+ {
+
+ #region ... Variables ...
+
+ private UserTreeItemViewModel mModel;
+
+ private ObservableCollection mUsers = new ObservableCollection();
+
+ private UserItemViewModel mCurrentSelectedUser;
+
+ private ICommand mAddCommand;
+
+ private ICommand mRemoveCommand;
+
+ private List mPermissionCach = null;
+
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+ ///
+ ///
+ ///
+ public UserGroupDetailViewModel()
+ {
+
+ }
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ ///
+ ///
+ ///
+ public ICommand AddCommand
+ {
+ get
+ {
+ if(mAddCommand==null)
+ {
+ mAddCommand = new RelayCommand(() => {
+ AddUser();
+ });
+ }
+ return mAddCommand;
+ }
+ }
+
+ ///
+ ///
+ ///
+ public ICommand RemoveCommand
+ {
+ get
+ {
+ if(mRemoveCommand==null)
+ {
+ mRemoveCommand = new RelayCommand(() => {
+ RemoveUser();
+ },()=> { return mCurrentSelectedUser != null; });
+ }
+ return mRemoveCommand;
+ }
+ }
+
+
+ ///
+ ///
+ ///
+ public UserItemViewModel CurrentSelectedUser
+ {
+ get
+ {
+ return mCurrentSelectedUser;
+ }
+ set
+ {
+ if (mCurrentSelectedUser != value)
+ {
+ if (mCurrentSelectedUser != null)
+ {
+ mCurrentSelectedUser.CheckPermission();
+ mCurrentSelectedUser.Update();
+ }
+ mCurrentSelectedUser = value;
+ OnPropertyChanged("CurrentSelectedUser");
+ }
+ }
+ }
+
+
+ ///
+ ///
+ ///
+ public ObservableCollection Users
+ {
+ get
+ {
+ return mUsers;
+ }
+ set
+ {
+ mUsers = value;
+ OnPropertyChanged("Users");
+ }
+ }
+
+
+ ///
+ ///
+ ///
+ public UserTreeItemViewModel Model
+ {
+ get
+ {
+ return mModel;
+ }
+ set
+ {
+ if (mModel != value)
+ {
+ mModel = value;
+ OnPropertyChanged("Model");
+ mPermissionCach = null;
+ System.Threading.Tasks.Task.Run(() => {
+ QueryUsers();
+ });
+ }
+ }
+ }
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public string GetAvailableName(string name)
+ {
+ var users = DBDevelopClientApi.DevelopServiceHelper.Helper.GetAllUserNames(this.Model.Database);
+ string sname = name;
+ for(int i=1;i
+ ///
+ ///
+ ///
+ ///
+ public bool CheckNameAvaiable(string name)
+ {
+ var users = DBDevelopClientApi.DevelopServiceHelper.Helper.GetAllUserNames(this.Model.Database);
+ return !users.Contains(name);
+ }
+
+ ///
+ ///
+ ///
+ private void AddUser()
+ {
+ string newUserName = GetAvailableName("user");
+ Cdy.Tag.UserItem user = new Cdy.Tag.UserItem() { Name = newUserName, Group = this.Model.FullName };
+ var umode = new UserItemViewModel() { Model = user,IsNew=true,IsEdit=true,ParentModel=this };
+
+ umode.IntPermission(mPermissionCach);
+ Users.Add(umode);
+
+ CurrentSelectedUser = umode;
+ }
+
+ ///
+ ///
+ ///
+ private void RemoveUser()
+ {
+ mCurrentSelectedUser.ParentModel = null;
+
+ int id = Users.IndexOf(mCurrentSelectedUser);
+ if(!mCurrentSelectedUser.IsNew)
+ {
+ if(DBDevelopClientApi.DevelopServiceHelper.Helper.RemoveDatabaseUser(Model.Database,mCurrentSelectedUser.Name))
+ {
+ Users.Remove(mCurrentSelectedUser);
+ }
+ }
+ else
+ {
+ Users.Remove(mCurrentSelectedUser);
+ }
+
+
+ mCurrentSelectedUser = null;
+
+ if (Users.Count > id) CurrentSelectedUser = Users[id];
+
+ else CurrentSelectedUser = Users[Users.Count - 1];
+
+
+ }
+
+ ///
+ ///
+ ///
+ public void QueryUsers()
+ {
+ ObservableCollection utmp = new ObservableCollection();
+ var users = DBDevelopClientApi.DevelopServiceHelper.Helper.GetUsersByGroup(this.Model.Database, this.Model.FullName);
+ if (users != null)
+ {
+ foreach (var vv in users)
+ utmp.Add(new UserItemViewModel() { Model = vv,ParentModel=this });
+ }
+ Users = utmp;
+
+ if (mPermissionCach == null)
+ mPermissionCach = DBDevelopClientApi.DevelopServiceHelper.Helper.GetAllDatabasePermission(this.Model.Database).Select(e => e.Name).ToList();
+
+ foreach (var vv in Users)
+ {
+ vv.IntPermission(mPermissionCach);
+ }
+
+ if (Users.Count > 0) CurrentSelectedUser = Users[0];
+ }
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+ public class UserItemViewModel : ViewModelBase
+ {
+
+ #region ... Variables ...
+
+ private List mPermissionModel;
+
+ private bool mIsNew = false;
+
+ private bool mIsEdit = false;
+
+
+ private bool mIsPasswordChanged = false;
+
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+
+ ///
+ ///
+ ///
+ public bool IsEdit
+ {
+ get
+ {
+ return mIsEdit;
+ }
+ set
+ {
+ if (mIsEdit != value)
+ {
+ mIsEdit = value;
+ OnPropertyChanged("IsEdit");
+ }
+ }
+ }
+
+
+ ///
+ ///
+ ///
+ public bool IsNew
+ {
+ get
+ {
+ return mIsNew;
+ }
+ set
+ {
+ if (mIsNew != value)
+ {
+ mIsNew = value;
+ OnPropertyChanged("IsNew");
+ }
+ }
+ }
+
+
+ ///
+ ///
+ ///
+ public List PermissionModel
+ {
+ get
+ {
+ return mPermissionModel;
+ }
+ set
+ {
+ if (mPermissionModel != value)
+ {
+ mPermissionModel = value;
+ OnPropertyChanged("PermissionModel");
+ }
+ }
+ }
+
+
+
+ public Cdy.Tag.UserItem Model { get; set; }
+
+ ///
+ ///
+ ///
+ public string Name
+ {
+ get
+ {
+ return Model.Name;
+ }
+ set
+ {
+ if (Model.Name!=value && ParentModel.CheckNameAvaiable(value))
+ {
+ Model.Name = value;
+ }
+ if(IsEdit)
+ {
+ IsEdit = false;
+ Update();
+ }
+
+ OnPropertyChanged("Name");
+ }
+ }
+
+ ///
+ ///
+ ///
+ public string Password
+ {
+ get
+ {
+ return Model.Password;
+ }
+ set
+ {
+ mIsPasswordChanged = true;
+ Model.Password = value;
+ OnPropertyChanged("Password");
+ }
+ }
+
+ ///
+ ///
+ ///
+ public List Permissions
+ {
+ get
+ {
+ return Model.Permissions;
+ }
+ set
+ {
+ if(Model.Permissions!=value)
+ {
+ Model.Permissions = value;
+ }
+ OnPropertyChanged("Permissions");
+ }
+ }
+
+ ///
+ ///
+ ///
+ public UserGroupDetailViewModel ParentModel { get; set; }
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ ///
+ ///
+ ///
+ public void IntPermission(List allpermission)
+ {
+ List ptmp = new List();
+ foreach (var vv in allpermission)
+ {
+ PermissionItemModel pm = new PermissionItemModel() { Name = vv };
+ pm.IsSelected = this.Permissions.Contains(vv);
+ ptmp.Add(pm);
+ }
+ PermissionModel = ptmp;
+ }
+
+ ///
+ ///
+ ///
+ public void CheckPermission()
+ {
+ if(this.PermissionModel!=null)
+ this.Permissions = this.PermissionModel.Where(e => e.IsSelected).Select(e => e.Name).ToList();
+ }
+
+ ///
+ ///
+ ///
+ public void Update()
+ {
+ if (this.ParentModel == null) return;
+
+ DBDevelopClientApi.DevelopServiceHelper.Helper.UpdateDatabaseUser(this.ParentModel.Model.Database, this.Model);
+ IsNew = false;
+ if (mIsPasswordChanged)
+ {
+ mIsPasswordChanged = false;
+ DBDevelopClientApi.DevelopServiceHelper.Helper.UpdateDatabaseUserPassword(this.ParentModel.Model.Database, this.Name, this.Model.Password);
+ }
+ }
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+ ///
+ ///
+ ///
+ public class PermissionItemModel:ViewModelBase
+ {
+
+ #region ... Variables ...
+ private bool mIsSelected = false;
+ private string mName = "";
+ #endregion ...Variables...
+
+ #region ... Events ...
+
+ #endregion ...Events...
+
+ #region ... Constructor...
+
+ #endregion ...Constructor...
+
+ #region ... Properties ...
+ ///
+ ///
+ ///
+ public bool IsSelected
+ {
+ get
+ {
+ return mIsSelected;
+ }
+ set
+ {
+ if (mIsSelected != value)
+ {
+ mIsSelected = value;
+ OnPropertyChanged("IsSelected");
+ }
+ }
+ }
+
+ ///
+ ///
+ ///
+ public string Name
+ {
+ get
+ {
+ return mName;
+ }
+ set
+ {
+ if (mName != value)
+ {
+ mName = value;
+ OnPropertyChanged("Name");
+ }
+ }
+ }
+
+
+ #endregion ...Properties...
+
+ #region ... Methods ...
+
+ #endregion ...Methods...
+
+ #region ... Interfaces ...
+
+ #endregion ...Interfaces...
+ }
+
+
+}
diff --git a/DbManager.Desktop/mars_2.png b/DbManager.Desktop/mars_2.png
deleted file mode 100644
index bf614d66cd143bc02ece539b6a92ea0a7a21301c..0000000000000000000000000000000000000000
Binary files a/DbManager.Desktop/mars_2.png and /dev/null differ
diff --git a/Mars.sln b/Mars.sln
index 745cc77476ce27396f94b29a3c0c65e045c02e12..bea7eebd0f61a142055ed021e00833ea075111cb 100644
--- a/Mars.sln
+++ b/Mars.sln
@@ -41,6 +41,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InStudio", "InStudio", "{1D
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{2C104906-798F-4EEB-931C-F01600EA9F7F}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cdy.Tag.Consume", "Cdy.Tag.Consume\Cdy.Tag.Consume.csproj", "{1B99F842-E366-43E8-8FAF-A14A10740B9E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -107,6 +109,10 @@ Global
{F6B8840F-9F8C-4194-923F-BCF0BA1D9BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6B8840F-9F8C-4194-923F-BCF0BA1D9BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6B8840F-9F8C-4194-923F-BCF0BA1D9BF3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1B99F842-E366-43E8-8FAF-A14A10740B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1B99F842-E366-43E8-8FAF-A14A10740B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1B99F842-E366-43E8-8FAF-A14A10740B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1B99F842-E366-43E8-8FAF-A14A10740B9E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -127,6 +133,7 @@ Global
{E347F2F3-FF6A-46EA-B6A3-31334F626EF6} = {95F6A9D4-42A9-483A-80F8-EADDD6CEFEDE}
{4EDEE8A2-D89D-4040-B786-5374C65E8074} = {95F6A9D4-42A9-483A-80F8-EADDD6CEFEDE}
{F6B8840F-9F8C-4194-923F-BCF0BA1D9BF3} = {95F6A9D4-42A9-483A-80F8-EADDD6CEFEDE}
+ {1B99F842-E366-43E8-8FAF-A14A10740B9E} = {2C104906-798F-4EEB-931C-F01600EA9F7F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {577CCEC3-4CDB-458A-B93D-F8579C2C3D8F}
diff --git a/SimDriver/Driver.cs b/SimDriver/Driver.cs
index 4f639b187a2c08d46bc95a75f457ad4ae01a541f..12eae3af77ea63cbd260166d427e5d8df3b20908 100644
--- a/SimDriver/Driver.cs
+++ b/SimDriver/Driver.cs
@@ -4,6 +4,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
+using System.IO;
namespace SimDriver
{
@@ -21,6 +22,9 @@ namespace SimDriver
private IRealTagDriver mTagService;
private bool mIsBusy = false;
+
+ private StreamWriter mWriter;
+
#endregion ...Variables...
#region ... Events ...
@@ -28,7 +32,15 @@ namespace SimDriver
#endregion ...Events...
#region ... Constructor...
-
+ ///
+ ///
+ ///
+ public Driver()
+ {
+ var vfile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.GetType().Assembly.Location), DateTime.Now.ToString("yyyyMMddHHmmss") + ".log");
+ mWriter = new StreamWriter( System.IO.File.Open(vfile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite));
+
+ }
#endregion ...Constructor...
#region ... Properties ...
@@ -38,6 +50,9 @@ namespace SimDriver
///
public string Name => "Sim";
+ ///
+ ///
+ ///
public string[] Registors
{
get
@@ -50,7 +65,14 @@ namespace SimDriver
#region ... Methods ...
-
+ ///
+ ///
+ ///
+ ///
+ private void Log(string sval)
+ {
+ mWriter.WriteLine(sval);
+ }
///
///
@@ -92,32 +114,35 @@ namespace SimDriver
mNumber++;
mNumber = mNumber > (short)360 ? (short)0 : mNumber;
-//#if DEBUG
-// Stopwatch sw = new Stopwatch();
-// sw.Start();
-//#endif
- foreach(var vv in mTagIdCach)
+ //#if DEBUG
+ // Stopwatch sw = new Stopwatch();
+ // sw.Start();
+ //#endif
+ double fval = Math.Cos(mNumber / 180.0 * Math.PI);
+ double sval = Math.Sin(mNumber / 180.0 * Math.PI);
+
+ Log("Sim:Sin " + fval + " " + "Sim:Cos " + sval + " "+ "Sim:step " + mNumber +" "+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
+
+ foreach (var vv in mTagIdCach)
{
if (vv.Key == "Sim:cos")
{
- double fval = Math.Cos(mNumber / 180.0 * Math.PI);
mTagService.SetTagValue(vv.Value, fval);
}
else if (vv.Key == "Sim:sin")
{
- double fval = Math.Sin(mNumber / 180.0 * Math.PI);
- mTagService.SetTagValue(vv.Value, fval);
+ mTagService.SetTagValue(vv.Value, sval);
}
else if (vv.Key == "Sim:step")
{
mTagService.SetTagValue(vv.Value, mNumber);
}
}
-//#if DEBUG
-// sw.Stop();
+ //#if DEBUG
+ // sw.Stop();
-// LoggerService.Service.Info("Sim Driver","set value elapsed:"+ sw.ElapsedMilliseconds +" total count:"+mNumber+" cos:"+ Math.Cos(mNumber / 180.0 * Math.PI)+" sin:"+ Math.Sin(mNumber / 180.0 * Math.PI));
-//#endif
+ // LoggerService.Service.Info("Sim Driver","set value elapsed:"+ sw.ElapsedMilliseconds +" total count:"+mNumber+" cos:"+ Math.Cos(mNumber / 180.0 * Math.PI)+" sin:"+ Math.Sin(mNumber / 180.0 * Math.PI));
+ //#endif
mIsBusy = false;
}
@@ -128,6 +153,7 @@ namespace SimDriver
public bool Stop()
{
mScanTimer.Stop();
+ mWriter.Close();
return true;
}