예제 #1
0
        bool IRegistry.LookUp(string id, out IRegistrable registrable)
        {
            var flag = LookUp(id, out var parameter);

            registrable = parameter;
            return(flag);
        }
예제 #2
0
 public void Unregister(IRegistrable registrable)
 {
     if (Parent.LookUp(registrable.Id, out _))
     {
         throw new AccessViolationException();
     }
     Registry.Unregister(registrable);
 }
예제 #3
0
 internal void CheckType(IRegistrable registrable)
 {
     if (registrable == null)
     {
         throw new ArgumentNullException(nameof(registrable));
     }
     if (!TargetType.IsInstanceOfType(registrable))
     {
         throw new ArgumentException($"type not match, required: {TargetType}, given: {registrable.GetType()}");
     }
 }
예제 #4
0
 public bool LookUp(string id, out IRegistrable registrable)
 {
     if (Registry.LookUp(id, out registrable))
     {
         return(true);
     }
     if (Parent.LookUp(id, out registrable))
     {
         return(true);
     }
     registrable = default;
     return(false);
 }
예제 #5
0
 public bool LookUp(string id, out IRegistrable registrable)
 {
     if (id != null)
     {
         lock (_registered)
             // ReSharper disable once AssignmentInConditionalExpression
             if (_registered.TryGetValue(id, out registrable))
             {
                 return(true);
             }
     }
     registrable = default;
     return(false);
 }
예제 #6
0
        public void Unregister(IRegistrable registrable)
        {
            CheckType(registrable);
            var id = registrable.Id;

            lock (_registered)
                if (!_registered.ContainsKey(id) || !ReferenceEquals(_registered[id], registrable))
                {
                    throw new ArgumentException($"unregistered: {id}");
                }
                else
                {
                    _registered.Remove(id);
                }
        }
예제 #7
0
        public void Register(IRegistrable registrable)
        {
            CheckType(registrable);
            var id = registrable.Id;

            lock (_registered)
                if (_registered.ContainsKey(id))
                {
                    throw new ArgumentException($"identifier already used: {id}");
                }
                else
                {
                    _registered[id] = registrable;
                }
        }
예제 #8
0
 /*
  * Return the entity otherwise null
  * **/
 public IRegistrable FindEntity(Type _entityType,uint _gameObjectUniqueKey)
 {
     IRegistrable result = null;
     if (TypeRegisterMap.ContainsKey(_entityType))
     {
         var mapType = TypeRegisterMap[_entityType];
         if (mapType.ContainsKey(_gameObjectUniqueKey))
             result = mapType[_gameObjectUniqueKey];
         else Debug.LogWarning("Player with netword id " + _gameObjectUniqueKey + " not found");
     }
     else {
         Debug.LogWarning("Type "+ _entityType.ToString() + " not found in the types map");
     }
     return result;
 }
        public static int Register(IRegistrable registrable)
        {
            var info = registrable.GetRegistrationInfo();

            if (info == null)
            {
                return(-1);
            }

            info.Id = _nextId;

            RegisteredList.Add(info);

            _nextId = RegisteredList.Count + 1;

            return(info.Id);
        }
        //With BRIDGE pattern, implement Register method so it will accept both a Person and an Item
        public static int Register(IRegistrable registarable)
        {
            //get info from an lib object
            var info = registarable.GetRegistrationInfo();

            if (info == null)
            {
                return(-1);
            }

            //get new id for for the registered object
            info.Id = _nextId;

            //add to registration repository
            _registeredList.Add(info);

            //store next available id
            _nextId = _registeredList.Count + 1;

            //return success
            return(info.Id);
        }
예제 #11
0
 void IRegistry.Unregister(IRegistrable registrable) => Unregister((GlobalParameter)registrable);
예제 #12
0
 public bool RemoveEntity(IRegistrable _entity)
 {
     var aEntityType = _entity.GetType();
     var networkId = _entity.GetUniqueKey();
     return TypeRegisterMap[aEntityType].Remove(networkId);
 }
예제 #13
0
 public void AddEntity(IRegistrable _entity)
 {
     var aEntityType = _entity.GetType();
     var networkId = _entity.GetUniqueKey();
     TypeRegisterMap[aEntityType][networkId] = _entity;
 }
예제 #14
0
 //Implement Register method by utilizing RegistrationRepository (complete missing parts)
 public int Register(IRegistrable registrableItem)
 {
     return(RegistrationRepository.Register(registrableItem));
 }