Instance constructor

Instance(
  1. int _id,
  2. String _name,
  3. IResource _resource,
  4. IStore? _store, [
  5. TypeTemplate? customTemplate = null,
  6. int _instanceAge = 0,
])
Create new instance. Instance Id. Name of the instance. Resource to manage. Store responsible for the resource.

Implementation

Instance(this._id, this._name, this._resource, this._store,
    [TypeTemplate? customTemplate = null, this._instanceAge = 0]) {
  _attributes = new KeyList<String, dynamic>(this);
  _children = new AutoList<IResource, Instance>(this);
  _parents = new AutoList<IResource, Instance>(this);
  _managers = new AutoList<IPermissionsManager, Instance>(this);

  _children.on("add", children_OnAdd);
  _children.on("remove", children_OnRemoved);
  _parents.on("add", parents_OnAdd);
  _parents.on("remove", parents_OnRemoved);

  resource.on("destroy", resource_OnDestroy);

  if (customTemplate != null)
    _template = customTemplate;
  else
    _template = Warehouse.getTemplateByType(resource.runtimeType);

  // set ages
  for (int i = 0; i < _template.properties.length; i++) {
    _ages.add(0);
    _modificationDates.add(new DateTime(0)); //DateTime.MinValue);
  }

  /*
      // connect events
      Type t = resource.runtimeType;

      var events = t.GetTypeInfo().GetEvents(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

      foreach (var evt in events)
      {
          //if (evt.EventHandlerType != typeof(ResourceEventHanlder))
          //    continue;


          if (evt.EventHandlerType == typeof(ResourceEventHanlder))
          {
              var ca = (ResourceEvent[])evt.GetCustomAttributes(typeof(ResourceEvent), true);
              if (ca.Length == 0)
                  continue;

              ResourceEventHanlder proxyDelegate = (args) => EmitResourceEvent(null, null, evt.Name, args);
              evt.AddEventHandler(resource, proxyDelegate);

          }
          else if (evt.EventHandlerType == typeof(CustomResourceEventHanlder))
          {
              var ca = (ResourceEvent[])evt.GetCustomAttributes(typeof(ResourceEvent), true);
              if (ca.Length == 0)
                  continue;

              CustomResourceEventHanlder proxyDelegate = (issuer, receivers, args) => EmitResourceEvent(issuer, receivers, evt.Name, args);
              evt.AddEventHandler(resource, proxyDelegate);
          }


      }
      */
}