Beispiel #1
0
        public void GetReferenceFromID(string refID, StorageLoadHandler callback)
        {
            if (callback == null)
            {
                return;
            }

            ISaveable reference;

            if (_idToRefMap.TryGetValue(refID, out reference))
            {
                callback(true, reference);
            }
            else
            {
                if (!_refReadyActions.ContainsKey(refID))
                {
                    _refReadyActions.Add(refID, callback);
                }
                else
                {
                    _refReadyActions[refID] += callback;
                }
            }

            if (ReferenceRequestedEvent != null)
            {
                ReferenceRequestedEvent(refID);
            }
        }
Beispiel #2
0
        bool IStorageReferenceLoader.LoadRef <T>(string key, StorageLoadHandler <T> refLoadedCallback)
        {
            string refId = GetRefID(key);

            if (string.IsNullOrEmpty(refId))
            {
                refLoadedCallback(null);
                return(false);
            }

            _storageAccess.ActiveRefHandler.GetReferenceFromID(refId, (trueReferenceLoad, reference) =>
            {
                if (trueReferenceLoad)
                {
                    trueReferenceLoad = reference == null || reference.GetType().IsAssignableFrom(typeof(T)) && _keyToReferenceID.ContainsKey(key);
                }

                if (trueReferenceLoad)
                {
                    refLoadedCallback((T)reference);
                }
                else
                {
                    refLoadedCallback(default(T));
                }
            });

            return(true);
        }