Пример #1
0
 public static bool Override_RequestResource_Internal(DataManager __instance, BattleTechResourceType resourceType, string identifier, PrewarmRequest prewarm, bool allowRequestStacking, ref bool ___isLoading)
 {
     try {
         if (UnpatchManager || string.IsNullOrEmpty(identifier))
         {
             return(false);
         }
         // Quickly skip duplicate request
         if (resourceType == lastResourceType && identifier == lastIdentifier)
         {
             return(false);
         }
         lastResourceType = resourceType;
         lastIdentifier   = identifier;
         DataManager me  = __instance;
         string      key = GetKey(resourceType, identifier);
         if (monitoringMech != null)
         {
             LogDependee(monitoringMech, key);
         }
         foreground.TryGetValue(key, out DataManager.DataManagerLoadRequest dataManagerLoadRequest);
         if (dataManagerLoadRequest != null)
         {
             if (dataManagerLoadRequest.State != DataManager.DataManagerLoadRequest.RequestState.Complete || !dataManagerLoadRequest.DependenciesLoaded(dataManagerLoadRequest.RequestWeight.RequestWeight))
             {
                 if (allowRequestStacking)
                 {
                     dataManagerLoadRequest.IncrementCacheCount();
                 }
             }
             else
             {
                 NotifyFileLoaded(me, dataManagerLoadRequest, ref ___isLoading);
             }
             return(false);
         }
         bool movedToForeground = GraduateBackgroundRequest(me, resourceType, identifier);
         bool skipLoad          = false;
         bool isTemplate        = identifier.ToLowerInvariant().Contains("template");
         if (!movedToForeground && !skipLoad && !isTemplate)
         {
             dataManagerLoadRequest = (DataManager.DataManagerLoadRequest)CreateByResourceType.Invoke(me, new object[] { resourceType, identifier, prewarm });
             if (foreground.Count <= 0)
             {
                 Info("Starting new queue");
                 stopwatch.Start();
             }
             if (DebugLog)
             {
                 Verbo("Queued: {0} ({1})", key, dataManagerLoadRequest.GetType());
             }
             //if ( key == "19_CombatGameConstants" ) Info( Logger.Stacktrace );
             foreground.Add(key, dataManagerLoadRequest);
             if (LoadingQueue && !dataManagerLoadRequest.IsComplete())
             {
                 foregroundLoading.Add(dataManagerLoadRequest);
             }
         }
         return(false);
     }                 catch (Exception ex) { return(KillManagerPatch(__instance, ex)); }
 }
Пример #2
0
 public static bool Override_RequestResourceAsync_Internal(DataManager __instance, BattleTechResourceType resourceType, string identifier, PrewarmRequest prewarm, uint ___backgroundRequestsCurrentAllowedWeight)
 {
     try {
         if (UnpatchManager || string.IsNullOrEmpty(identifier))
         {
             return(false);
         }
         DataManager me  = __instance;
         string      key = GetKey(resourceType, identifier);
         background.TryGetValue(key, out DataManager.DataManagerLoadRequest dataManagerLoadRequest);
         if (dataManagerLoadRequest != null)
         {
             if (dataManagerLoadRequest.State == DataManager.DataManagerLoadRequest.RequestState.Complete)
             {
                 if (!dataManagerLoadRequest.DependenciesLoaded(___backgroundRequestsCurrentAllowedWeight))
                 {
                     dataManagerLoadRequest.ResetRequestState();
                 }
                 else
                 {
                     dataManagerLoadRequest.NotifyLoadComplete();
                 }
             }
             else
             {
                 if (DebugLog)
                 {
                     Warn("Cannot move {0} to top of background queue.", GetKey(dataManagerLoadRequest));
                 }
                 // Move to top of queue. Not supported by HashTable.
                 //backgroundRequest.Remove( dataManagerLoadRequest );
                 //backgroundRequest.Insert( 0, dataManagerLoadRequest );
             }
             return(false);
         }
         bool isForeground = foreground.ContainsKey(key);
         bool isTemplate   = identifier.ToLowerInvariant().Contains("template");
         if (!isForeground && !isTemplate)
         {
             dataManagerLoadRequest = (DataManager.DataManagerLoadRequest)CreateByResourceType.Invoke(me, new object[] { resourceType, identifier, prewarm });
             dataManagerLoadRequest.SetAsync(true);
             if (DebugLog)
             {
                 Info("Queued Async: {0} ({1}) ", key, dataManagerLoadRequest.GetType());
             }
             background.Add(key, dataManagerLoadRequest);
         }
         return(false);
     }                 catch (Exception ex) { return(KillManagerPatch(__instance, ex)); }
 }