薛之猫大王
17 hours ago da45ccae4c4b03fa50308b442a04ccfd3de160e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//
// GameApp.cs
// Create:
//      2019-10-29
// Description:
//      代码热更新服务类
// Author:
//      薛林强 <545626463@qq.com>
//
// Copyright (c) 2026 虚幻骑士科技
 
using System;
using System.Collections;
using System.IO;
using UnityEngine;
using log4net.Util;
using System.Collections.Generic;
using System.Threading;
using Skyunion;
 
public class HotFixService_IFix : Module, IHotFixService
{
    private Hotfix.Game mGame;
    #region 实现 IModule    
 
    public override void Init()
    {
        CoreUtils.assetService.LoadFileAsync(Path.Combine(Application.streamingAssetsPath, "Hotfix.patch.bytes"), (rDLLBytes) =>
        {
            try
            {
                if (rDLLBytes != null && rDLLBytes.Length > 0)
                {
                    IFix.Core.PatchManager.Load(new MemoryStream(rDLLBytes));
                }
            }
            finally
            {
                OnInitialized();
            }
        });
    }
    public override void AfterInit()
    {
        mGame = new Hotfix.Game();
        mGame.Initialize(mPluginManager, "HotFixService_IFix");
    }
 
    public override void Update()
    {
        if (mGame != null)
        {
            mGame.Update();
        }
    }
    public override void Shut()
    {
        base.Shut();
        if (mGame != null)
        {
            mGame.Shut();
        }
    }
    #endregion 实现 IModule
 
    #region 实现 HotFixService
    public HotfixMode GetHotfixMode()
    {
        return HotfixMode.IFix;
    }
    public IHotfixObject Instantiate(string rTypeName, params object[] rArgs)
    {
        var rObject = new HotfixObject_IFix(rTypeName);
        rObject.mObject = Activator.CreateInstance(Type.GetType(rTypeName), rArgs);
        return rObject;
    }
 
    public T Instantiate<T>(string rTypeName, params object[] rObjs)
    {
        return (T)Activator.CreateInstance(Type.GetType(rTypeName), rObjs);
    }
 
    public T Instantiate<T>(Type type)
    {
        return (T)Instantiate(type);
    }
 
    public object Instantiate(Type type)
    {
        return Activator.CreateInstance(type);
    }
 
    public object Invoke(IHotfixObject rHotfixObj, string rMethodName, params object[] rArgs)
    {
        if (rHotfixObj == null) return null;
        return rHotfixObj.Invoke(rMethodName, rArgs);
    }
 
    public object InvokeParent(IHotfixObject rHotfixObj, string rParentType, string rMethodName, params object[] rArgs)
    {
        if (rHotfixObj == null) return null;
        return rHotfixObj.InvokeParent(rParentType, rMethodName, rArgs);
    }
 
    public object InvokeStatic(string rTypeName, string rMethodName, params object[] rArgs)
    {
        var rType = Type.GetType(rTypeName);
        var method = rType.GetMethod(rMethodName);
        return method.Invoke(null, rArgs);
    }
    public object GetAppdomain()
    {
        return null;
    }
    #endregion 实现 IHotFixService
}