HotUpdateCodeLoader.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Collections;
  3. using System.Reflection;
  4. using UnityEngine;
  5. using GFGGame.Launcher;
  6. using System.Linq;
  7. namespace GFGGame
  8. {
  9. public class HotUpdateCodeLoader : SingletonMonoBase<HotUpdateCodeLoader>
  10. {
  11. public Type[] allTypes;
  12. public Type[] GetTypes()
  13. {
  14. return this.allTypes;
  15. }
  16. public void StartLoad()
  17. {
  18. StartCoroutine(StartLoadAssemblyHotfix());
  19. }
  20. private System.Reflection.Assembly gameAss;
  21. IEnumerator StartLoadAssemblyHotfix()
  22. {
  23. LogServerHelperHttp.SendNodeLog((int)LogNode.StartLoadGameDll);
  24. //ET.Log.Debug("ILRuntimeLauncher StartLoadAssemblyHotfix");
  25. yield return new WaitForSeconds(0.1f);
  26. #if !UNITY_EDITOR
  27. LoadAssemblyJustInTime();
  28. #else
  29. gameAss = AppDomain.CurrentDomain.GetAssemblies().First(assembly => assembly.GetName().Name == "Game.HotUpdate");
  30. #endif
  31. RunMain();
  32. }
  33. private void LoadAssemblyJustInTime()
  34. {
  35. var dllPath = $"{LauncherConfig.DllDirHotfix}Game.HotUpdate.dll.bytes";
  36. var asset = GFGAsset.Load<TextAsset>(dllPath);
  37. byte[] assBytes = asset.bytes;
  38. gameAss = Assembly.Load(assBytes);
  39. GFGAsset.Release(dllPath);
  40. }
  41. public void RunMain()
  42. {
  43. if (gameAss == null)
  44. {
  45. UnityEngine.Debug.LogError("dll未加载");
  46. return;
  47. }
  48. this.allTypes = gameAss.GetTypes();
  49. var appType = gameAss.GetType("GFGGame.HotUpdate.HotUpdateEntry");
  50. var mainMethod = appType.GetMethod("Start");
  51. mainMethod.Invoke(null, null);
  52. }
  53. }
  54. }