Esempio n. 1
0
        public void GetReferencesFromID(string refHolder, string[] refIDs, StorageLoadMultipleHandler callback)
        {
            if (callback == null)
            {
                return;
            }

            if (refIDs == null || refIDs.Length == 0)
            {
                callback(null);
                return;
            }

            _multiRefsReadyActions.Add(refHolder, new MultiRefObject(refIDs, callback));

            string refHolderIdReference = refHolder;

            for (int i = 0; i < refIDs.Length; i++)
            {
                string referenceID = refIDs[i];
                GetReferenceFromID(referenceID, new StorageLoadHandler((wasInStorage, instance) =>
                {
                    MultiRefObject refsObject;
                    if (_multiRefsReadyActions.TryGetValue(refHolderIdReference, out refsObject))
                    {
                        if (refsObject.CrossRefAway(referenceID, instance))
                        {
                            _multiRefsReadyActions.Remove(refHolderIdReference);
                            refsObject.Clean();
                        }
                    }
                }));
            }
        }
Esempio n. 2
0
        bool IStorageReferenceLoader.LoadRefs <T>(string key, StorageLoadMultipleHandler <T> refLoadedCallback)
        {
            if (!_keyToReferenceID.TryGetValue(key, out object refIDsObject))
            {
                refLoadedCallback(new T[] { });
                return(false);
            }

            string[] refIds = refIDsObject.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

            _storageAccess.ActiveRefHandler.GetReferencesFromID(key, refIds, (references) =>
            {
                if (references != null)
                {
                    Array castedReferencesArray = Array.CreateInstance(typeof(T), references.Length);
                    Array.Copy(references, castedReferencesArray, references.Length);
                    refLoadedCallback((T[])castedReferencesArray);
                }
                else
                {
                    refLoadedCallback(new T[] { });
                }
            });

            return(true);
        }
Esempio n. 3
0
 public void Clean()
 {
     _refsToGo.Clear();
     _refsToGo = null;
     _callback = null;
     _references.Clear();
     _references = null;
 }
Esempio n. 4
0
 public MultiRefObject(string[] refsToGo, StorageLoadMultipleHandler callback)
 {
     _refsToGo = new List <string>(refsToGo);
     _callback = callback;
 }