2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2025-06-27 13:33:13 +00:00

Static Arrays

This commit is contained in:
2021-07-14 05:14:26 +03:00
parent d6b2a27221
commit 7940c152f0
24 changed files with 384 additions and 491 deletions

View File

@ -44,12 +44,12 @@ namespace Esiur.Net.IIP
{
KeyList<uint, DistributedResource> resources = new KeyList<uint, DistributedResource>();
KeyList<uint, AsyncReply<DistributedResource>> resourceRequests = new KeyList<uint, AsyncReply<DistributedResource>>();
KeyList<Guid, AsyncReply<ResourceTemplate>> templateRequests = new KeyList<Guid, AsyncReply<ResourceTemplate>>();
KeyList<Guid, AsyncReply<TypeTemplate>> templateRequests = new KeyList<Guid, AsyncReply<TypeTemplate>>();
KeyList<string, AsyncReply<IResource>> pathRequests = new KeyList<string, AsyncReply<IResource>>();
Dictionary<Guid, ResourceTemplate> templates = new Dictionary<Guid, ResourceTemplate>();
Dictionary<Guid, TypeTemplate> templates = new Dictionary<Guid, TypeTemplate>();
KeyList<uint, AsyncReply> requests = new KeyList<uint, AsyncReply>();
@ -1095,11 +1095,11 @@ namespace Esiur.Net.IIP
var msg = new BinaryList();
var templates = new List<ResourceTemplate>();
var templates = new List<TypeTemplate>();
foreach (var resource in list)
templates.AddRange(ResourceTemplate.GetDependencies(resource.Instance.Template).Where(x => !templates.Contains(x)));
templates.AddRange(TypeTemplate.GetDependencies(resource.Instance.Template).Where(x => !templates.Contains(x)));
foreach(var t in templates)
foreach (var t in templates)
{
msg.AddInt32(t.Content.Length)
.AddUInt8Array(t.Content);
@ -1122,19 +1122,18 @@ namespace Esiur.Net.IIP
void IIPRequestTemplateFromClassName(uint callback, string className)
{
Warehouse.GetTemplateByClassName(className).Then((t) =>
var t = Warehouse.GetTemplateByClassName(className);
if (t != null)
SendReply(IIPPacket.IIPPacketAction.TemplateFromClassName, callback)
.AddInt32(t.Content.Length)
.AddUInt8Array(t.Content)
.Done();
else
{
if (t != null)
SendReply(IIPPacket.IIPPacketAction.TemplateFromClassName, callback)
.AddInt32(t.Content.Length)
.AddUInt8Array(t.Content)
.Done();
else
{
// reply failed
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
}
});
// reply failed
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
}
}
void IIPRequestTemplateFromClassId(uint callback, Guid classId)
@ -2037,14 +2036,14 @@ namespace Esiur.Net.IIP
/// </summary>
/// <param name="classId">Class GUID.</param>
/// <returns>ResourceTemplate.</returns>
public AsyncReply<ResourceTemplate> GetTemplate(Guid classId)
public AsyncReply<TypeTemplate> GetTemplate(Guid classId)
{
if (templates.ContainsKey(classId))
return new AsyncReply<ResourceTemplate>(templates[classId]);
return new AsyncReply<TypeTemplate>(templates[classId]);
else if (templateRequests.ContainsKey(classId))
return templateRequests[classId];
var reply = new AsyncReply<ResourceTemplate>();
var reply = new AsyncReply<TypeTemplate>();
templateRequests.Add(classId, reply);
SendRequest(IIPPacket.IIPPacketAction.TemplateFromClassId)
@ -2053,8 +2052,8 @@ namespace Esiur.Net.IIP
.Then((rt) =>
{
templateRequests.Remove(classId);
templates.Add(((ResourceTemplate)rt[0]).ClassId, (ResourceTemplate)rt[0]);
Warehouse.PutTemplate(rt[0] as ResourceTemplate);
templates.Add(((TypeTemplate)rt[0]).ClassId, (TypeTemplate)rt[0]);
Warehouse.PutTemplate(rt[0] as TypeTemplate);
reply.Trigger(rt[0]);
}).Error((ex) =>
{
@ -2134,9 +2133,9 @@ namespace Esiur.Net.IIP
}
public AsyncReply<ResourceTemplate[]> GetLinkTemplates(string link)
public AsyncReply<TypeTemplate[]> GetLinkTemplates(string link)
{
var reply = new AsyncReply<ResourceTemplate[]>();
var reply = new AsyncReply<TypeTemplate[]>();
var l = DC.ToBytes(link);
@ -2147,7 +2146,7 @@ namespace Esiur.Net.IIP
.Then((rt) =>
{
var templates = new List<ResourceTemplate>();
var templates = new List<TypeTemplate>();
// parse templates
var data = (byte[])rt[0];
@ -2156,7 +2155,7 @@ namespace Esiur.Net.IIP
{
var cs = data.GetUInt32(offset);
offset += 4;
templates.Add(ResourceTemplate.Parse(data, offset, cs));
templates.Add(TypeTemplate.Parse(data, offset, cs));
offset += cs;
}
@ -2208,9 +2207,9 @@ namespace Esiur.Net.IIP
if (resource == null)
{
var template = Warehouse.GetTemplateByClassId((Guid)rt[0], true);
if (template?.ResourceType != null)
dr = Activator.CreateInstance(template.ResourceType, this, id, (ulong)rt[1], (string)rt[2]) as DistributedResource;
var template = Warehouse.GetTemplateByClassId((Guid)rt[0], TemplateType.Wrapper);
if (template?.DefinedType != null)
dr = Activator.CreateInstance(template.DefinedType, this, id, (ulong)rt[1], (string)rt[2]) as DistributedResource;
else
dr = new DistributedResource(this, id, (ulong)rt[1], (string)rt[2]);
}