提交 3423305c 编写于 作者: cdy816's avatar cdy816

日常更新

上级 c47851cd
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public struct IntPointData
{
public IntPointData(int x,int y)
{
X = x;
Y = y;
}
public int X { get; set; }
public int Y { get; set; }
}
/// <summary>
///
/// </summary>
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; }
}
/// <summary>
///
/// </summary>
public struct UIntPointData
{
public UIntPointData(uint x, uint y)
{
X = x;
Y = y;
}
public uint X { get; set; }
public uint Y { get; set; }
}
/// <summary>
///
/// </summary>
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; }
}
/// <summary>
///
/// </summary>
public struct LongPointData
{
public LongPointData(long x, long y)
{
X = x;
Y = y;
}
public long X { get; set; }
public long Y { get; set; }
}
/// <summary>
///
/// </summary>
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; }
}
/// <summary>
///
/// </summary>
public struct ULongPointData
{
public ULongPointData(ulong x, ulong y)
{
X = x;
Y = y;
}
public ulong X { get; set; }
public ulong Y { get; set; }
}
/// <summary>
///
/// </summary>
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; }
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
using System;
namespace Cdy.Tag.Consume
{
public interface IConsumeDriver
{
#region ... Variables ...
#endregion ...Variables...
#region ... Events ...
#endregion ...Events...
#region ... Constructor...
#endregion ...Constructor...
#region ... Properties ...
/// <summary>
///
/// </summary>
string Name { get; }
#endregion ...Properties...
#region ... Methods ...
/// <summary>
///
/// </summary>
/// <returns></returns>
bool Start();
/// <summary>
///
/// </summary>
/// <returns></returns>
bool Stop();
#endregion ...Methods...
#region ... Interfaces ...
#endregion ...Interfaces...
}
}
......@@ -55,6 +55,23 @@ namespace Cdy.Tag.Driver
/// <returns></returns>
bool SetTagValue(List<int> ids, object value);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="values"></param>
/// <returns></returns>
bool SetPointValue(int id, params object[] values);
/// <summary>
///
/// </summary>
/// <param name="ids"></param>
/// <param name="values"></param>
/// <returns></returns>
bool SetPointValue(List<int> ids, params object[] values);
/// <summary>
///
/// </summary>
......
......@@ -272,6 +272,16 @@ namespace Cdy.Tag
/// <returns></returns>
public abstract int DeCompressUIntValue(MarshalMemoryBlock source, int sourceAddr, List<DateTime> time, int timeTick, QueryValueMatchType type, HisQueryResult<uint> result);
/// <summary>
///
/// </summary>
/// <param name="source"></param>
/// <param name="sourceAddr"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="timeTick"></param>
/// <param name="result"></param>
/// <returns></returns>
public abstract int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult<uint> result);
/// <summary>
......@@ -334,6 +344,9 @@ namespace Cdy.Tag
/// <returns></returns>
public abstract int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult<ulong> result);
/// <summary>
///
/// </summary>
......@@ -459,6 +472,45 @@ namespace Cdy.Tag
public abstract int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult<string> result);
/// <summary>
///
/// </summary>
/// <param name="source"></param>
/// <param name="sourceAddr"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="timeTick"></param>
/// <param name="result"></param>
/// <returns></returns>
public abstract int DeCompressAllPointValue<T>(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult<T> result);
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="sourceAddr"></param>
/// <param name="time"></param>
/// <param name="timeTick"></param>
/// <param name="type"></param>
/// <returns></returns>
public abstract T DeCompressPointValue<T>(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type);
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="sourceAddr"></param>
/// <param name="time"></param>
/// <param name="timeTick"></param>
/// <param name="type"></param>
/// <param name="result"></param>
/// <returns></returns>
public abstract int DeCompressPointValue<T>(MarshalMemoryBlock source, int sourceAddr, List<DateTime> time, int timeTick, QueryValueMatchType type, HisQueryResult<T> result);
public abstract CompressUnitbase Clone();
......
......@@ -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++;
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
public void Add(IntPointData value, DateTime time, byte qulity)
{
AddPoint(value.X, value.Y, time, qulity);
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
public void Add(IntPoint3Data value, DateTime time, byte qulity)
{
AddPoint(value.X, value.Y, value.Z, time, qulity);
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
public void Add(UIntPointData value, DateTime time, byte qulity)
{
AddPoint(value.X, value.Y, time, qulity);
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
public void Add(UIntPoint3Data value, DateTime time, byte qulity)
{
AddPoint(value.X, value.Y, value.Z, time, qulity);
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
public void Add(LongPoint3Data value, DateTime time, byte qulity)
{
AddPoint(value.X, value.Y, value.Z, time, qulity);
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
public void Add(ULongPointData value, DateTime time, byte qulity)
{
AddPoint(value.X, value.Y, time, qulity);
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
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++;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="time"></param>
/// <param name="qulity"></param>
public void Add(ULongPoint3Data value, DateTime time, byte qulity)
{
AddPoint(value.X, value.Y, value.Z, time, qulity);
}
/// <summary>
///
/// </summary>
......@@ -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;
}
......
......@@ -96,8 +96,6 @@ namespace Cdy.Tag
void SetValue(Dictionary<int, Tuple<short, byte, DateTime>> values);
/// <summary>
///
/// </summary>
......@@ -363,10 +361,37 @@ namespace Cdy.Tag
/// <param name="values"></param>
void SetValue(Dictionary<int, Tuple<string, byte, DateTime>> values);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <param name="values"></param>
/// <returns></returns>
bool SetPointValue(int id, byte quality, DateTime time, params object[] values);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="values"></param>
/// <returns></returns>
bool SetPointValue(int id, byte quality, params object[] values);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="values"></param>
/// <returns></returns>
bool SetPointValue(int id, params object[] values);
#endregion
#region 数据读取接口
/// <summary>
///
/// </summary>
......@@ -497,6 +522,173 @@ namespace Cdy.Tag
/// <returns></returns>
string ReadStringValue(int id, Encoding encoding, out byte qulity, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
IntPointData ReadIntPointValue(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
UIntPointData ReadUIntPointValue(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
IntPoint3Data ReadIntPoint3Value(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
UIntPoint3Data ReadUIntPoint3Value(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
LongPointData ReadLongPointValue(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
ULongPointData ReadULongPointValue(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
LongPoint3Data ReadLongPoint3Value(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
ULongPoint3Data ReadULongPoint3Value(int id, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadULongPoint3Value(int id, out ulong x, out ulong y, out ulong z, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadLongPoint3Value(int id, out long x, out long y, out long z, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadULongPointValue(int id, out ulong x, out ulong y, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadLongPointValue(int id, out long x, out long y, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadUIntPoint3Value(int id, out uint x, out uint y, out uint z, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadIntPoint3Value(int id, out int x, out int y, out int z, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadUIntPointValue(int id, out uint x, out uint y, out byte quality, out DateTime time);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="quality"></param>
/// <param name="time"></param>
/// <returns></returns>
bool ReadIntPointValue(int id, out int x, out int y, out byte quality, out DateTime time);
#endregion
#endregion ...Methods...
......
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.IntPoint3;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.IntPoint;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.LongPoint3;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.LongPoint;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.UIntPoint3;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.UIntPoint;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.ULongPoint3;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public override TagType Type => TagType.ULongPoint;
}
}
......@@ -64,7 +64,39 @@ namespace Cdy.Tag
/// <summary>
///
/// </summary>
String
String,
/// <summary>
///
/// </summary>
IntPoint,
/// <summary>
///
/// </summary>
UIntPoint,
/// <summary>
///
/// </summary>
LongPoint,
/// <summary>
///
/// </summary>
ULongPoint,
/// <summary>
///
/// </summary>
IntPoint3,
/// <summary>
///
/// </summary>
UIntPoint3,
/// <summary>
///
/// </summary>
LongPoint3,
/// <summary>
///
/// </summary>
ULongPoint3
}
public static class TagTypeExtends
......
......@@ -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 ...
......
......@@ -33,6 +33,11 @@ namespace Cdy.Tag
/// </summary>
public bool EnableWrite { get; set; }
/// <summary>
/// 超级权限
/// </summary>
public bool SuperPermission { get; set; }
/// <summary>
/// 允许访问的变量组
/// </summary>
......
......@@ -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();
......
......@@ -117,9 +117,9 @@ namespace Cdy.Tag
/// <param name="user"></param>
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
/// <param name="user"></param>
public void ModifyUserGroup(UserGroup user)
{
if (Groups.ContainsKey(user.Name))
if (Groups.ContainsKey(user.FullName))
{
Groups[user.Name] = user;
Groups[user.FullName] = user;
}
}
......
......@@ -30,9 +30,14 @@ namespace Cdy.Tag
/// </summary>
public string Group { get; set; }
///// <summary>
///// 超级用户
///// </summary>
//public bool SuperUser { get; set; }
/// <summary>
///
/// </summary>
public List<string> Permissions { get; set; }
public List<string> Permissions { get; set; } = new List<string>();
}
}
......@@ -181,6 +181,286 @@ namespace DBDevelopClientApi
return re;
}
#region Develop User
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <param name="password"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
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<string> 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;
}
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <param name="password"></param>
/// <returns></returns>
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
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <returns></returns>
public Dictionary<string, string> QueryDatabaseUserGroups(string database)
{
Dictionary<string, string> re = new Dictionary<string, string>();
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<string> GetAllUserNames(string database)
{
List<string> re = new List<string>();
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="group"></param>
/// <returns></returns>
public List<Cdy.Tag.UserItem> GetUsersByGroup(string database,string group)
{
List<Cdy.Tag.UserItem> re = new List<Cdy.Tag.UserItem>();
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <returns></returns>
public List<Cdy.Tag.PermissionItem> GetAllDatabasePermission(string database)
{
List<Cdy.Tag.PermissionItem> re = new List<Cdy.Tag.PermissionItem>();
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="name"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="permission"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="name"></param>
/// <param name="parentName"></param>
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="oldName"></param>
/// <param name="newName"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="name"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="user"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="user"></param>
/// <param name="password"></param>
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="name"></param>
/// <returns></returns>
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
/// <summary>
///
/// </summary>
......@@ -249,6 +529,74 @@ namespace DBDevelopClientApi
return re;
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="group"></param>
/// <param name="totalCount"></param>
/// <param name="index"></param>
/// <returns></returns>
public Dictionary<int, Tuple<Cdy.Tag.Tagbase, Cdy.Tag.HisTag>> QueryTagByGroup(string database, string group, int index, out int totalCount)
{
Dictionary<int, Tuple<Cdy.Tag.Tagbase, Cdy.Tag.HisTag>> re = new Dictionary<int, Tuple<Cdy.Tag.Tagbase, Cdy.Tag.HisTag>>();
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<int, Cdy.Tag.Tagbase> mRealTag = new Dictionary<int, Cdy.Tag.Tagbase>();
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<int, Cdy.Tag.HisTag> mHisTag = new Dictionary<int, Cdy.Tag.HisTag>();
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<string, double>();
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<Cdy.Tag.Tagbase, Cdy.Tag.HisTag>(mRealTag[vv.Key], mHisTag[vv.Key]));
}
else
{
re.Add(vv.Key, new Tuple<Cdy.Tag.Tagbase, Cdy.Tag.HisTag>(mRealTag[vv.Key], null));
}
}
}
}
else
{
totalCount = -1;
}
return re;
}
/// <summary>
///
/// </summary>
......@@ -373,11 +721,11 @@ namespace DBDevelopClientApi
/// <param name="database"></param>
/// <param name="name"></param>
/// <param name="parentName"></param>
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
/// <param name="oldName"></param>
/// <param name="newName"></param>
/// <returns></returns>
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
/// <param name="database"></param>
/// <param name="name"></param>
/// <returns></returns>
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;
}
......
......@@ -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;
}
......@@ -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;
}
......@@ -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 });
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> 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 });
}
/// <summary>
......@@ -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 });
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> 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 });
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> 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 });
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<GetGroupMessageReply> 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);
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<GetDatabaseUsersReplay> 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);
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> 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 });
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> 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 });
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> 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 });
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<GetUsersReplay> 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);
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> 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
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> AddTagGroup(AddTagGroupRequest request, ServerCallContext context)
public override Task<BoolResultReplay> AddTagGroup(AddGroupRequest request, ServerCallContext context)
{
if (!CheckLoginId(request.LoginId, PermissionDocument.NewPermission))
{
......@@ -358,7 +622,7 @@ namespace DBDevelopService
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> RenameTagGroup(RenameTagGroupRequest request, ServerCallContext context)
public override Task<BoolResultReplay> RenameTagGroup(RenameGroupRequest request, ServerCallContext context)
{
if (!CheckLoginId(request.LoginId, PermissionDocument.ModifyPermission))
{
......@@ -380,7 +644,7 @@ namespace DBDevelopService
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> RemoveTagGroup(RemoveTagGroupRequest request, ServerCallContext context)
public override Task<BoolResultReplay> RemoveTagGroup(RemoveGroupRequest request, ServerCallContext context)
{
if (!CheckLoginId(request.LoginId, PermissionDocument.ModifyPermission))
{
......@@ -401,7 +665,7 @@ namespace DBDevelopService
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns>
public override Task<BoolResultReplay> MoveTagGroup(MoveTagGroupRequest request, ServerCallContext context)
public override Task<BoolResultReplay> MoveTagGroup(MoveGroupRequest request, ServerCallContext context)
{
if (!CheckLoginId(request.LoginId, PermissionDocument.ModifyPermission))
{
......
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();
}
/// <summary>
///
/// </summary>
/// <param name="prechar"></param>
/// <param name="msg"></param>
private static void OutByLine(string prechar,string msg)
{
Console.WriteLine(prechar+">" + msg);
}
/// <summary>
///
/// </summary>
/// <param name="prechar"></param>
/// <param name="msg"></param>
private static void OutInLine(string prechar, string msg)
{
Console.Write(prechar + ">" + msg);
}
/// <summary>
///
/// </summary>
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());
}
/// <summary>
///
/// </summary>
......@@ -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();
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="type"></param>
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()));
}
}
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
/// <param name="file"></param>
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();
}
/// <summary>
///
/// </summary>
/// <param name="mRealTagMode"></param>
/// <param name="mHisTagMode"></param>
/// <returns></returns>
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();
}
/// <summary>
///
/// </summary>
/// <param name="val"></param>
public static Tuple<Tagbase,HisTag> 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<string, double>();
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<Tagbase, HisTag>(realtag, histag);
}
return new Tuple<Tagbase, HisTag>(realtag, null);
}
/// <summary>
......@@ -186,22 +387,38 @@ namespace DBStudio
/// </summary>
/// <param name="database"></param>
/// <param name="file"></param>
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);
}
}
}
}
}
/// <summary>
......@@ -294,6 +511,16 @@ namespace DBStudio
}
}
/// <summary>
///
/// </summary>
/// <param name="database"></param>
private static void ClearTag(Database database)
{
database.RealDatabase.Tags.Clear();
database.HisDatabase.HisTags.Clear();
}
/// <summary>
///
/// </summary>
......@@ -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();
}
}
}
......@@ -104,5 +104,14 @@ namespace DBInStudioServer.Properties {
return ResourceManager.GetString("HMsg", resourceCulture);
}
}
/// <summary>
/// 查找类似 {0} {1} Tag 的本地化字符串。
/// </summary>
internal static string TagMsg {
get {
return ResourceManager.GetString("TagMsg", resourceCulture);
}
}
}
}
......@@ -132,4 +132,7 @@
<data name="HMsg" xml:space="preserve">
<value>display command list</value>
</data>
<data name="TagMsg" xml:space="preserve">
<value>{0} {1} Tag</value>
</data>
</root>
\ No newline at end of file
......@@ -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;
......
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public class IntPoint3HisRunTag:HisRunTag
{
public override byte SizeOfValue => 12;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public class IntPointHisRunTag:HisRunTag
{
public override byte SizeOfValue => 8;
}
}
//==============================================================
// 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
{
/// <summary>
///
/// </summary>
public class LongPoint3HisRunTag:HisRunTag
{
public override byte SizeOfValue => 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
{
/// <summary>
///
/// </summary>
public class LongPointHisRunTag:HisRunTag
{
public override byte SizeOfValue => 16;
}
}
此差异已折叠。
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
{
/// <summary>
/// 按照步骤 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 文件中使用控件。
///
/// <MyNamespace:PasswordControl/>
///
/// </summary>
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 ...
/// <summary>
///
/// </summary>
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)));
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="arg"></param>
private static void PasswordChanged(DependencyObject sender,DependencyPropertyChangedEventArgs arg)
{
(sender as PasswordControl).ApplyPasswordToPasswordBox();
}
/// <summary>
/// 显示Password
/// </summary>
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 ...
/// <summary>
///
/// </summary>
private void ApplyPasswordBoxVisiable()
{
if(IsShowPassword)
{
mtb.Visibility = Visibility.Visible;
mpb.Visibility = Visibility.Hidden;
}
else
{
mtb.Visibility = Visibility.Hidden;
mpb.Visibility = Visibility.Visible;
}
}
/// <summary>
///
/// </summary>
private void ApplyPasswordToPasswordBox()
{
if (!mIgnorNotifyChanged)
{
if(mpb!=null)
mpb.Password = Password;
}
}
/// <summary>
///
/// </summary>
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
mpb = GetTemplateChild("pb") as PasswordBox;
mtb = GetTemplateChild("tb") as TextBox;
if (mpb != null)
{
mpb.PasswordChanged += Mpb_PasswordChanged;
}
ApplyPasswordBoxVisiable();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Mpb_PasswordChanged(object sender, RoutedEventArgs e)
{
mIgnorNotifyChanged = true;
this.Password = (sender as PasswordBox).Password;
mIgnorNotifyChanged = false;
}
#endregion ...Methods...
#region ... Interfaces ...
#endregion ...Interfaces...
}
}
......@@ -16,11 +16,17 @@
<ItemGroup>
<None Remove="Image\database.png" />
<None Remove="Image\Database2.png" />
<None Remove="Image\export.png" />
<None Remove="Image\hidden.png" />
<None Remove="Image\import.png" />
<None Remove="Image\permissions.png" />
<None Remove="Image\save.png" />
<None Remove="Image\Security.png" />
<None Remove="Image\show.png" />
<None Remove="Image\user.png" />
<None Remove="Image\文件夹.png" />
<None Remove="Image\登录.png" />
<None Remove="mars_2.png" />
</ItemGroup>
<ItemGroup>
......@@ -30,11 +36,17 @@
<ItemGroup>
<Resource Include="Image\database.png" />
<Resource Include="Image\Database2.png" />
<Resource Include="Image\export.png" />
<Resource Include="Image\hidden.png" />
<Resource Include="Image\import.png" />
<Resource Include="Image\permissions.png" />
<Resource Include="Image\save.png" />
<Resource Include="Image\Security.png" />
<Resource Include="Image\show.png" />
<Resource Include="Image\user.png" />
<Resource Include="Image\文件夹.png" />
<Resource Include="Image\登录.png" />
<Resource Include="mars_2.png" />
</ItemGroup>
<ItemGroup>
......
......@@ -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">
<Window.Resources>
<local:IndexConverter x:Key="ic" />
<BooleanToVisibilityConverter x:Key="btv" />
......@@ -173,12 +173,29 @@
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:UserGroupRootViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" Height="24">
<Image Focusable="False" Source="/Image/user.png" VerticalAlignment="Center" Margin="0,0,4,0" Height="18" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
<TextBlock Text="{local:ResMarker User}" VerticalAlignment="Center" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:PermissionTreeItemViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" Height="24">
<Image Focusable="False" Source="/Image/permissions.png" VerticalAlignment="Center" Margin="0,0,4,0" Height="18" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
<TextBlock Text="{local:ResMarker Permission}" VerticalAlignment="Center" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
<StackPanel Orientation="Horizontal" Height="32" VerticalAlignment="Bottom" Background="#FFE7E8EC">
<Button Content="{local:ResMarker Add}" Command="{Binding AddGroupCommand}" Width="60" HorizontalAlignment="Left" VerticalAlignment="Center" Height="26" Margin="5,0" />
<Button Content="{local:ResMarker Remove}" Command="{Binding RemoveGroupCommand}" Width="60" HorizontalAlignment="Left" VerticalAlignment="Center" Height="26" Margin="5,0" />
</StackPanel>
<Border VerticalAlignment="Bottom" Background="#FFE7E8EC" Height="32" BorderBrush="Gray" BorderThickness="0,0,1,0">
<StackPanel Orientation="Horizontal" >
<Button Content="{local:ResMarker Add}" Command="{Binding AddGroupCommand}" Width="80" HorizontalAlignment="Left" VerticalAlignment="Center" Height="26" Margin="5,0" />
<Button Content="{local:ResMarker Remove}" Command="{Binding RemoveGroupCommand}" Width="80" HorizontalAlignment="Left" VerticalAlignment="Center" Height="26" Margin="5,0" />
</StackPanel>
</Border>
<GridSplitter VerticalAlignment="Stretch" Width="5" HorizontalAlignment="Right" Background="Transparent" />
<ContentControl Grid.Column="1" Content="{Binding ContentViewModel}"/>
</Grid>
......
......@@ -168,6 +168,15 @@ namespace DBInStudio.Desktop.Properties {
}
}
/// <summary>
/// 查找类似 EnableWrite 的本地化字符串。
/// </summary>
internal static string EnableWrite {
get {
return ResourceManager.GetString("EnableWrite", resourceCulture);
}
}
/// <summary>
/// 查找类似 erro 的本地化字符串。
/// </summary>
......@@ -186,6 +195,15 @@ namespace DBInStudio.Desktop.Properties {
}
}
/// <summary>
/// 查找类似 Group 的本地化字符串。
/// </summary>
internal static string Group {
get {
return ResourceManager.GetString("Group", resourceCulture);
}
}
/// <summary>
/// 查找类似 Id 的本地化字符串。
/// </summary>
......@@ -321,6 +339,24 @@ namespace DBInStudio.Desktop.Properties {
}
}
/// <summary>
/// 查找类似 Permission 的本地化字符串。
/// </summary>
internal static string Permission {
get {
return ResourceManager.GetString("Permission", resourceCulture);
}
}
/// <summary>
/// 查找类似 Permission list 的本地化字符串。
/// </summary>
internal static string PermissionList {
get {
return ResourceManager.GetString("PermissionList", resourceCulture);
}
}
/// <summary>
/// 查找类似 Record 的本地化字符串。
/// </summary>
......@@ -438,6 +474,15 @@ namespace DBInStudio.Desktop.Properties {
}
}
/// <summary>
/// 查找类似 Tag 的本地化字符串。
/// </summary>
internal static string Tag {
get {
return ResourceManager.GetString("Tag", resourceCulture);
}
}
/// <summary>
/// 查找类似 TagGroup 的本地化字符串。
/// </summary>
......@@ -465,6 +510,24 @@ namespace DBInStudio.Desktop.Properties {
}
}
/// <summary>
/// 查找类似 User 的本地化字符串。
/// </summary>
internal static string User {
get {
return ResourceManager.GetString("User", resourceCulture);
}
}
/// <summary>
/// 查找类似 User list 的本地化字符串。
/// </summary>
internal static string UserList {
get {
return ResourceManager.GetString("UserList", resourceCulture);
}
}
/// <summary>
/// 查找类似 UserName 的本地化字符串。
/// </summary>
......
......@@ -154,12 +154,18 @@
<data name="Driver" xml:space="preserve">
<value>Driver</value>
</data>
<data name="EnableWrite" xml:space="preserve">
<value>EnableWrite</value>
</data>
<data name="erro" xml:space="preserve">
<value>erro</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export</value>
</data>
<data name="Group" xml:space="preserve">
<value>Group</value>
</data>
<data name="Id" xml:space="preserve">
<value>Id</value>
</data>
......@@ -206,6 +212,12 @@
<data name="PercentValue" xml:space="preserve">
<value>Percent</value>
</data>
<data name="Permission" xml:space="preserve">
<value>Permission</value>
</data>
<data name="PermissionList" xml:space="preserve">
<value>Permission list</value>
</data>
<data name="Record" xml:space="preserve">
<value>Record</value>
</data>
......@@ -246,6 +258,9 @@
<data name="SlopeCompress" xml:space="preserve">
<value>Slope</value>
</data>
<data name="Tag" xml:space="preserve">
<value>Tag</value>
</data>
<data name="TagGroup" xml:space="preserve">
<value>TagGroup</value>
</data>
......@@ -255,6 +270,12 @@
<data name="UpdateTagFail" xml:space="preserve">
<value>Update tag {0} failed!</value>
</data>
<data name="User" xml:space="preserve">
<value>User</value>
</data>
<data name="UserList" xml:space="preserve">
<value>User list</value>
</data>
<data name="UserName" xml:space="preserve">
<value>UserName</value>
</data>
......
......@@ -29,7 +29,20 @@
<view:SlopeCompressParameterView />
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodel:UserGroupDetailViewModel}">
<view:UserGroupDetailView />
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodel:PermissionDetailViewModel}">
<view:PermissionDetailView />
</DataTemplate>
<BooleanToVisibilityConverter x:Key="bvc" />
<Style TargetType="{x:Type local:CustomWindowBase}">
<Setter Property="IsOK" Value="{Binding IsOK}" />
<Setter Property="IsCancel" Value="{Binding IsCancel}" />
......@@ -76,4 +89,70 @@
</Style>
<SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/>
<SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/>
<SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/>
<Style x:Key="ToggleButtonStyle1" TargetType="{x:Type ToggleButton}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="border" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="true">
<Grid>
<!--<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>-->
<Image x:Name="contentPresenter" Source="/DBInStudio;component/Image/hidden.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsChecked" Value="true">
<Setter Property="Source" TargetName="contentPresenter" Value="/DBInStudio;component/Image/show.png"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type local:PasswordControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:PasswordControl}">
<Grid Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<PasswordBox x:Name="pb" VerticalContentAlignment="Center" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" />
<TextBox x:Name="tb" VerticalContentAlignment="Center" Text="{Binding Password,Mode=TwoWay,RelativeSource={RelativeSource Mode=TemplatedParent}}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" />
<ToggleButton Background="Transparent" BorderThickness="0" Margin="10,0,0,0" Grid.Column="1" IsChecked="{Binding IsShowPassword,Mode=TwoWay,RelativeSource={RelativeSource Mode=TemplatedParent},UpdateSourceTrigger=PropertyChanged}" Width="30" Height="24" >
<Image Source="/Image/show.png" />
</ToggleButton>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
......@@ -11,7 +11,7 @@
<BooleanToVisibilityConverter x:Key="btv" />
</UserControl.Resources>
<Grid>
<DataGrid ScrollViewer.CanContentScroll="True" VirtualizingPanel.IsVirtualizing="True" RowDetailsVisibilityMode="VisibleWhenSelected" MinRowHeight="24" Margin="0,0,0,32" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding SelectGroupTags}" SelectedItem="{Binding CurrentSelectTag,Mode=TwoWay}" BorderThickness="0,0,0,1" Background="{x:Null}" >
<DataGrid ScrollViewer.CanContentScroll="True" VerticalScrollBarVisibility="Auto" ScrollViewer.ScrollChanged="DataGrid_ScrollChanged" VirtualizingPanel.IsVirtualizing="True" RowDetailsVisibilityMode="VisibleWhenSelected" MinRowHeight="24" Margin="0,0,0,32" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding SelectGroupTags}" SelectedItem="{Binding CurrentSelectTag,Mode=TwoWay}" BorderThickness="0,0,0,1" Background="{x:Null}" >
<DataGrid.Columns>
<DataGridTemplateColumn IsReadOnly="True" Width="Auto" MinWidth="30" Header="{local:ResMarker Id}">
<DataGridTemplateColumn.CellTemplate>
......
此差异已折叠。
此差异已折叠。
......@@ -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;
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册