12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System;
- using System.Collections;
- using System.Reflection;
- using UnityEngine;
- using GFGGame.Launcher;
- namespace GFGGame
- {
- public class HotUpdateCodeLoader : SingletonMonoBase<HotUpdateCodeLoader>
- {
- public Type[] allTypes;
- public Type[] GetTypes()
- {
- return this.allTypes;
- }
- public void StartLoad()
- {
- StartCoroutine(StartLoadAssemblyHotfix());
- }
- IEnumerator StartLoadAssemblyHotfix()
- {
- LogServerHelperHttp.SendNodeLog((int)LogNode.StartLoadGameDll);
- //ET.Log.Debug("ILRuntimeLauncher StartLoadAssemblyHotfix");
- yield return new WaitForSeconds(0.1f);
- var dllPath = "Assets/Res/Code/Game.HotUpdate.dll.bytes";
- var asset = GFGAsset.Load<TextAsset>(dllPath);
- byte[] assBytes = asset.bytes;
- var pdbPath = "Assets/Res/Code/Game.HotUpdate.pdb.bytes";
- asset = GFGAsset.Load<TextAsset>(pdbPath);
- byte[] pdbBytes = asset.bytes;
- if (LauncherConfig.ILRuntimeMode)
- {
-
- }
- else
- {
- StartCoroutine(LoadAssemblyJustInTime(assBytes, pdbBytes));
- }
- GFGAsset.Release(dllPath);
- GFGAsset.Release(pdbPath);
- }
- IEnumerator LoadAssemblyJustInTime(byte[] assBytes, byte[] pdbBytes)
- {
- //mono模式
- var assembly = Assembly.Load(assBytes, pdbBytes);
- this.allTypes = assembly.GetTypes();
- System.Type type = assembly.GetType("GFGGame.HotUpdate.HotUpdateEntry");
- type.GetMethod("Start").Invoke(type, null);
- yield break;
- }
- }
- }
|