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(); } } })); } }
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); }
public void Clean() { _refsToGo.Clear(); _refsToGo = null; _callback = null; _references.Clear(); _references = null; }
public MultiRefObject(string[] refsToGo, StorageLoadMultipleHandler callback) { _refsToGo = new List <string>(refsToGo); _callback = callback; }