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-04-27 08:32:10 +03:00
parent 836a1fdeae
commit 443623d8df
16 changed files with 207 additions and 147 deletions

View File

@ -44,5 +44,7 @@ namespace Esyur.Resource
get;
set;
}
}
}

View File

@ -20,6 +20,8 @@ namespace Esyur.Resource
{
string name;
// public int IntVal { get; set; }
WeakReference<IResource> resource;
IStore store;
ResourceTemplate template;
@ -27,11 +29,15 @@ namespace Esyur.Resource
public delegate void ResourceModifiedEvent(IResource resource, string propertyName, object newValue);
public delegate void ResourceEventOccurredEvent(IResource resource, object issuer, Session[] receivers, string eventName, object[] args);
public delegate void ResourceEventOccurredEvent(IResource resource, string eventName, object[] args);
public delegate void CustomResourceEventOccurredEvent(IResource resource, object issuer, Func<Session, bool> receivers, string eventName, object[] args);
public delegate void ResourceDestroyedEvent(IResource resource);
public event ResourceModifiedEvent ResourceModified;
public event ResourceEventOccurredEvent ResourceEventOccurred;
public event CustomResourceEventOccurredEvent CustomResourceEventOccurred;
public event ResourceDestroyedEvent ResourceDestroyed;
bool loading = false;
@ -582,13 +588,21 @@ namespace Esyur.Resource
// internal void EmitResourceEvent(string name, string[] users, DistributedConnection[] connections, object[] args)
internal void EmitResourceEvent(object issuer, Session[] receivers, string name, object[] args)
internal void EmitCustomResourceEvent(object issuer, Func<Session, bool> receivers, string name, object[] args)
{
IResource res;
if (this.resource.TryGetTarget(out res))
{
CustomResourceEventOccurred?.Invoke(res, issuer, receivers, name, args);
}
}
ResourceEventOccurred?.Invoke(res, issuer, receivers, name, args);
internal void EmitResourceEvent(string name, object[] args)
{
IResource res;
if (this.resource.TryGetTarget(out res))
{
ResourceEventOccurred?.Invoke(res, name, args);
}
}
@ -891,7 +905,7 @@ namespace Esyur.Resource
// if (ca.Length == 0)
// continue;
ResourceEventHanlder proxyDelegate = (args) => EmitResourceEvent(null, null, evt.Name, args);
ResourceEventHanlder proxyDelegate = (args) => EmitResourceEvent(evt.Name, args);
evt.Info.AddEventHandler(resource, proxyDelegate);
}
@ -901,7 +915,7 @@ namespace Esyur.Resource
//if (ca.Length == 0)
// continue;
CustomResourceEventHanlder proxyDelegate = (issuer, receivers, args) => EmitResourceEvent(issuer, receivers, evt.Name, args);
CustomResourceEventHanlder proxyDelegate = (issuer, receivers, args) => EmitCustomResourceEvent(issuer, receivers, evt.Name, args);
evt.Info.AddEventHandler(resource, proxyDelegate);
}

View File

@ -34,11 +34,11 @@ using System.Threading.Tasks;
namespace Esyur.Resource
{
public delegate void ResourceEventHanlder(params object[] args);
// public delegate void CustomUsersEventHanlder(string[] usernames, params object[] args);
// public delegate void CustomUsersEventHanlder(string[] usernames, params object[] args);
//public delegate void CustomReceiversEventHanlder(DistributedConnection[] connections, params object[] args);
//public delegate void CustomInquirerEventHanlder(object inquirer, params object[] args);
public delegate void CustomResourceEventHanlder(object issuer, Session[] receivers, params object[] args);
public delegate void CustomResourceEventHanlder(object issuer, Func<Session, bool> receivers, params object[] args);// object issuer, Session[] receivers, params object[] args);
// public delegate void CustomReceiversEventHanlder(string[] usernames, DistributedConnection[] connections, params object[] args);

View File

@ -115,6 +115,9 @@ namespace Esyur.Resource
/// <returns>True, if no problem occurred.</returns>
public static async AsyncReply<bool> Open()
{
if (warehouseIsOpen)
return false;
warehouseIsOpen = true;
var resSnap = resources.Select(x =>
@ -526,7 +529,7 @@ namespace Esyur.Resource
}
public static IResource New(Type type, string name, IStore store = null, IResource parent = null, IPermissionsManager manager = null, object attributes = null, object properties = null)
public static IResource New(Type type, string name = null, IStore store = null, IResource parent = null, IPermissionsManager manager = null, object attributes = null, object properties = null)
{
type = ResourceProxy.GetProxy(type);
@ -618,12 +621,15 @@ namespace Esyur.Resource
/// <returns>Resource template.</returns>
public static ResourceTemplate GetTemplate(Type type)
{
var baseType = ResourceProxy.GetBaseType(type);
// loaded ?
foreach (var t in templates.Values)
if (t.ClassName == type.FullName)
if (t.ClassName == baseType.FullName)
return t;
var template = new ResourceTemplate(type);
var template = new ResourceTemplate(baseType);
templates.Add(template.ClassId, template);
return template;