[Add] Hot Reload
This commit is contained in:
+70
@@ -0,0 +1,70 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using SingularityGroup.HotReload.Editor.Cli;
|
||||
using SingularityGroup.HotReload.Editor.Localization;
|
||||
using UnityEditor;
|
||||
|
||||
namespace SingularityGroup.HotReload.Editor {
|
||||
internal sealed class ExposeServerOption : ComputerOptionBase {
|
||||
|
||||
public override string ShortSummary => Translations.Settings.OptionExposeServerShort;
|
||||
public override string Summary => Translations.Settings.OptionExposeServerFull;
|
||||
|
||||
public override void InnerOnGUI() {
|
||||
string description;
|
||||
if (GetValue()) {
|
||||
description = Translations.Settings.OptionExposeServerDescriptionEnabled;
|
||||
} else {
|
||||
description = Translations.Settings.OptionExposeServerDescriptionDisabled;
|
||||
}
|
||||
EditorGUILayout.LabelField(description, HotReloadWindowStyles.WrapStyle);
|
||||
}
|
||||
|
||||
public override bool GetValue() {
|
||||
return HotReloadPrefs.ExposeServerToLocalNetwork;
|
||||
}
|
||||
|
||||
public override void SetValue(SerializedObject so, bool val) {
|
||||
// AllowAndroidAppToMakeHttpRequestsOption
|
||||
if (val == HotReloadPrefs.ExposeServerToLocalNetwork) {
|
||||
return;
|
||||
}
|
||||
|
||||
HotReloadPrefs.ExposeServerToLocalNetwork = val;
|
||||
if (val) {
|
||||
// they allowed this one for mobile builds, so now we allow everything else needed for player build to work with HR
|
||||
new AllowAndroidAppToMakeHttpRequestsOption().SetValue(so, true);
|
||||
}
|
||||
RunTask(() => {
|
||||
RunOnMainThreadSync(() => {
|
||||
var isRunningResult = ServerHealthCheck.I.IsServerHealthy;
|
||||
if (isRunningResult) {
|
||||
var restartServer = EditorUtility.DisplayDialog(Translations.Dialogs.DialogTitleHotReload,
|
||||
string.Format(Translations.Dialogs.DialogMessageRestartExposeServer, Summary),
|
||||
Translations.Dialogs.DialogButtonRestartServer, Translations.Dialogs.DialogButtonDontRestart);
|
||||
if (restartServer) {
|
||||
CodePatcher.I.ClearPatchedMethods();
|
||||
EditorCodePatcher.RestartCodePatcher().Forget();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void RunTask(Action action) {
|
||||
var token = HotReloadWindow.Current.cancelToken;
|
||||
Task.Run(() => {
|
||||
if (token.IsCancellationRequested) return;
|
||||
try {
|
||||
action();
|
||||
} catch (Exception ex) {
|
||||
ThreadUtility.LogException(ex, token);
|
||||
}
|
||||
}, token);
|
||||
}
|
||||
|
||||
void RunOnMainThreadSync(Action action) {
|
||||
ThreadUtility.RunOnMainThread(action, HotReloadWindow.Current.cancelToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user