2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2025-06-27 13:33:13 +00:00
This commit is contained in:
2020-01-26 14:30:39 +03:00
parent 5f4660fde2
commit 61a1683c26
22 changed files with 409 additions and 346 deletions

View File

@ -37,7 +37,7 @@ namespace Esyur.Resource
{
AsyncReply<IResource> Get(string path);//, Func<IResource, bool> filter = null);
//AsyncReply<IResource> Retrieve(uint iid);
bool Put(IResource resource);
AsyncReply<bool> Put(IResource resource);
string Link(IResource resource);
bool Record(IResource resource, string propertyName, object value, ulong age, DateTime dateTime);
bool Modify(IResource resource, string propertyName, object value, ulong age, DateTime dateTime);

View File

@ -394,6 +394,7 @@ namespace Esyur.Resource
if (resource.TryGetTarget(out res))
{
var rt = pt.Serilize ? pt.Info.GetValue(res, null) : null;
props.Add(new PropertyValue(rt, ages[pt.Index], modificationDates[pt.Index]));
}
//}

View File

@ -111,30 +111,38 @@ namespace Esyur.Resource
/// <returns>True, if no problem occurred.</returns>
public static async AsyncReply<bool> Open()
{
warehouseIsOpen = true;
foreach (var rk in resources)
var resSnap = resources.Select(x => {
IResource r;
if (x.Value.TryGetTarget(out r))
return r;
else
return null;
}).Where(r=>r!=null).ToArray();
foreach (var r in resSnap)
{
IResource r;
if (rk.Value.TryGetTarget(out r))
{
//IResource r;
//if (rk.Value.TryGetTarget(out r))
//{
var rt = await r.Trigger(ResourceTrigger.Initialize);
if (!rt)
return false;
}
//}
}
foreach (var rk in resources)
foreach (var r in resSnap)
{
IResource r;
if (rk.Value.TryGetTarget(out r))
{
//IResource r;
//if (rk.Value.TryGetTarget(out r))
//{
var rt = await r.Trigger(ResourceTrigger.SystemInitialized);
if (!rt)
return false;
}
//}
}
warehouseIsOpen = true;
return true;
@ -422,6 +430,8 @@ namespace Esyur.Resource
/// <param name="parent">Parent resource. if not presented the store becomes the parent for the resource.</param>
public static void Put(IResource resource, string name, IStore store = null, IResource parent = null, ResourceTemplate customTemplate = null, ulong age = 0, IPermissionsManager manager = null, object attributes = null)
{
if (resource.Instance != null)
throw new Exception("Resource has a store.");
if (store == null)
{
@ -467,6 +477,8 @@ namespace Esyur.Resource
if (resource is IStore)
StoreConnected?.Invoke(resource as IStore, name);
//else
store.Put(resource);
@ -481,7 +493,8 @@ namespace Esyur.Resource
var t = resource.GetType();
Global.Counters["T-" + t.Namespace + "." + t.Name]++;
resources.Add(resource.Instance.Id, new WeakReference<IResource>(resource));
lock (resourcesLock)
resources.Add(resource.Instance.Id, new WeakReference<IResource>(resource));
if (warehouseIsOpen)
resource.Trigger(ResourceTrigger.Initialize);