Ejemplo n.º 1
0
        /// <summary>
        ///     Register a new Resource
        /// </summary>
        /// <param name="resource">Resource to register</param>
        /// <returns></returns>
        public Resource Register(Resource resource)
        {
            if (ContainsId(resource.ResourceId)) // Contains resource by Id
            {
                var existing = GetById(resource.ResourceId);
                Logger.LogError("Attempted to register resource ID {0} which already exists", resource.ResourceId);
                if (!(ResourceIdCollision?.Invoke(existing, resource)).GetValueOrDefault(false)
                    ) // if FALSE or NULL, break -- otherwise override stop behavior
                {
                    return(null);
                }
            }

            if (ContainsFingerprint(resource.DataFingerprint)) // Contains resource by fingerprint
            {
                var existing = GetByFingerprint(resource.DataFingerprint);
                Logger.LogError(
                    "Attempted to register resource {0} fingerprint {1} which already exists at resource {2}",
                    resource.ResourceId, resource.DataFingerprint, existing.ResourceId);
                if (!(ResourceFingerprintCollision?.Invoke(existing, resource)).GetValueOrDefault(false)
                    ) // if FALSE or NULL, break -- otherwise override stop behavior
                {
                    return(null);
                }
            }

            ResourcesById.TryAdd(resource.ResourceId, resource);
            ResourcesByFingerprint.TryAdd(resource.DataFingerprint, resource);

            Logger.LogDebug("Registered Resource {0} with fingerprint {1}", resource.ResourceId,
                            resource.DataFingerprint);
            ResourceRegistered?.Invoke(this, resource);
            return(resource);
        }
Ejemplo n.º 2
0
 public void On(ResourceRegistered e)
 {
     Id   = e.ResourceId;
     Name = e.Name;
 }