This commit is contained in:
CortexCore 2024-05-04 16:12:06 +08:00
parent 4db0176004
commit ac92d68a88
7 changed files with 179 additions and 17 deletions

99
src/Models/IDIS_Model.cs Normal file
View File

@ -0,0 +1,99 @@
using System.ComponentModel;
using System.Reflection;
using IDIS.Models;
using Newtonsoft.Json;
namespace IDIS.Model
{
public record IDIS_Model
{
[JsonIgnore]
public virtual string[] Tags { get; set; } = Array.Empty<string>();
public virtual IDIS_Register_Data.ValueInfo[] AsValueInfo()
{
var list = new List<IDIS_Register_Data.ValueInfo>();
list.Add(new IDIS_Register_Data.ValueInfo
{
Data = new IDIS_Register_Data.ValueData
{
Value = string.Join(";",Tags),
Format = "string"
},
Index = 0,
Type = "Tags"
});
var index = 1;
foreach (var x in GetProperties())
{
var valueInfo = new IDIS_Register_Data.ValueInfo
{
Data =new IDIS_Register_Data.ValueData()
{
Value = x.GetValue(this)!.ToString()!,
Format = x.PropertyType.Name,
},
Index = index++,
Type = x.Name
};
list.Add(valueInfo);
}
return list.ToArray();
}
public virtual IDIS_Template AsTemplate()
{
var template = new IDIS_Template
{
Description = "This is a template",
Prefix = "88.123.99",
Version = "1.0.0"
};
var metaList = new List<IDIS_Template_Item>
{
new()
{
IdType = "tags",
Name = "标签",
MetaData = new IDIS_Template_Item_MetaData()
{
MinLength = 0,
MaxLength = 255,
Type = "string"
}
}
};
foreach (var x in GetProperties())
{
var item = new IDIS_Template_Item
{
IdType = x.Name,
};
var meta = new IDIS_Template_Item_MetaData();
if (x.GetCustomAttribute<DisplayNameAttribute>() is { } displayName)
{
item.Name = displayName.DisplayName;
}
meta.Type = x.PropertyType.Name;
meta.MinLength = 0;
meta.MaxLength = 255;
item.MetaData = meta;
metaList.Add(item);
}
template.Items = metaList.ToArray();
return template;
}
private PropertyInfo[] GetProperties()
{
return GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(x => x.Name is not ("EqualityContract" or "Tags"))
.ToArray();
}
}
}

View File

@ -0,0 +1,35 @@
using Newtonsoft.Json;
namespace IDIS.Models;
[Serializable]
public record IDIS_Query_Data
{
public record QueryData
{
[JsonProperty("format")]
public string Format;
[JsonProperty("value")]
public string Value;
}
public record QueryInfo
{
[JsonProperty("data")]
public QueryData Data;
[JsonProperty("auth")]
public string Auth;
[JsonProperty("index")]
public int Index;
[JsonProperty("type")]
public string Type;
}
[JsonProperty("code")]
public int Code;
[JsonProperty("prefix")]
public string Prefix;
[JsonProperty("handle")]
public string Handle;
[JsonProperty("templateVersion")]
public string TemplateVersion;
[JsonProperty("value")]
public QueryInfo[] Value=Array.Empty<QueryInfo>();
}

View File

@ -7,10 +7,30 @@ namespace IDIS.Models;
/// </summary>
public class IDIS_Register_Data
{
public record ValueData
{
[JsonProperty("format")]
public string Format;
[JsonProperty("value")]
public string Value;
}
public record ValueInfo
{
[JsonProperty("auth")]
public string Auth;
[JsonProperty("index")]
public int Index;
[JsonProperty("data")]
public ValueData Data;
[JsonProperty("type")]
public string Type;
}
[JsonProperty("handle")]
public required string Handle;
[JsonProperty("templateVersion")]
public required string TemplateVersion;
[JsonProperty("value")]
public required Dictionary<string, object> Value;
public required ValueInfo[] Value;
}

View File

@ -6,7 +6,7 @@ namespace IDIS.Models
/// <summary>
/// 基于IDIS v1的标识模板值
/// </summary>
public class IDIS_Template_Item
public record IDIS_Template_Item
{
public IDIS_Template_Item(){}
public IDIS_Template_Item(string name,string idType)
@ -19,6 +19,6 @@ namespace IDIS.Models
[JsonProperty("idType")]
public string IdType { get; set; } = string.Empty;
[JsonProperty("metaData")]
public IDIS_Template_Item_MetaData[] MetaData { get; set; } = Array.Empty<IDIS_Template_Item_MetaData>();
public IDIS_Template_Item_MetaData MetaData { get; set; }
}
}

View File

@ -4,7 +4,7 @@ using Newtonsoft.Json;
namespace IDIS
{
public class IDIS_Template_Item_MetaData
public record IDIS_Template_Item_MetaData
{
public IDIS_Template_Item_MetaData()
{

View File

@ -25,21 +25,30 @@ namespace IDIS.Services
/// </summary>
event Action OnDisconnected;
/// <summary>
/// 解析标识的回调的回调
/// </summary>
event Action<IDIS_Query_Data> OnQuery;
/// <summary>
/// 注册标识的回调
/// </summary>
event Action<string,string> OnRegister;
/// <summary>
/// 基于标识模板注册标识
/// </summary>
/// <param name="handle">标识码</param>
/// <param name="templateVersion">标识模板</param>
/// <param name="value">值,通常为字典</param>
/// <returns></returns>
UniTask<IDIS_Response> RegisterAsync(string handle, string templateVersion,IDictionary<string,object> value);
UniTask RegisterAsync(string handle, string templateVersion,IDIS_Register_Data.ValueInfo[] value);
/// <summary>
/// 异步删除标识
/// </summary>
/// <param name="code">标识码</param>
/// <returns>是否删除成功</returns>
UniTask<IDIS_Response> DeleteAsync(string code);
UniTask DeleteAsync(string code);
/// <summary>
/// 异步删除标识
@ -47,7 +56,7 @@ namespace IDIS.Services
/// <param name="code">标识码</param>
/// <param name="index">标识索引</param>
/// <returns></returns>
UniTask<IDIS_Response> DeleteIdDataAsync(string code, int index);
UniTask DeleteIdDataAsync(string code, int index);
/// <summary>
/// 更新标识值
@ -55,14 +64,14 @@ namespace IDIS.Services
/// <param name="code">标识码</param>
/// <param name="value">需要更新的标识列表</param>
/// <returns></returns>
UniTask<IDIS_Response> UpdateAsync(string code, IDictionary<string,object> value);
UniTask UpdateAsync(string code, IDictionary<string,object> value);
/// <summary>
/// 异步解析标识
/// </summary>
/// <param name="code">标识码</param>
/// <returns><see cref="IDIS_Response"/></returns>
UniTask<IDIS_Response> QueryAsync(string code);
UniTask<IDIS_Query_Data> QueryAsync(string code);
/// <summary>
/// 标识码是否已注册

View File

@ -11,34 +11,33 @@ namespace IDIS.Services
{
event Action<IDIS_Template> OnTemplateCreated;
event Action<IDIS_Template> OnTemplateDeleted;
/// <summary>
/// 查询数据模板
/// 查询标识模板
/// </summary>
/// <param name="prefix">前缀</param>
/// <param name="version">模板版本</param>
/// <returns></returns>
UniTask<IDIS_Response> QueryAsync(string prefix, string version);
UniTask<IDIS_Template> QueryAsync(string prefix, string version);
/// <summary>
/// 获取所有数据模板
/// </summary>
/// <returns></returns>
UniTask<IDIS_Response> ToArrayAsync();
UniTask<IDIS_Template[]> ToArrayAsync();
/// <summary>
/// 保存数据模板
/// <para>模板不存在时为会新增模板信息</para>
/// </summary>
/// <param name="template">模板信息</param>
/// <returns></returns>
UniTask<IDIS_Response> SaveAsync(IDIS_Template template);
UniTask SaveAsync(IDIS_Template template);
/// <summary>
/// 删除数据模板
/// </summary>
/// <param name="prefix"></param>
/// <param name="version"></param>
/// <returns></returns>
UniTask<IDIS_Response> DeleteAsync (string prefix, string version);
UniTask DeleteAsync (string prefix, string version);
}
}