71 lines
2.8 KiB
C#
71 lines
2.8 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using SingularityGroup.HotReload.Editor.Cli;
|
|
using UnityEditor;
|
|
|
|
namespace SingularityGroup.HotReload.Editor {
|
|
internal sealed class ExposeServerOption : ComputerOptionBase {
|
|
|
|
public override string ShortSummary => "Allow Devices to Connect";
|
|
public override string Summary => "Allow Devices to Connect (WiFi)";
|
|
|
|
public override void InnerOnGUI() {
|
|
string description;
|
|
if (GetValue()) {
|
|
description = "The HotReload server is reachable from devices on the same Wifi network";
|
|
} else {
|
|
description = "The HotReload server is available to your computer only. Other devices cannot connect to it.";
|
|
}
|
|
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("Hot Reload",
|
|
$"When changing '{Summary}', the Hot Reload server must be restarted for this to take effect." +
|
|
"\nDo you want to restart it now?",
|
|
"Restart server", "Don't restart");
|
|
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);
|
|
}
|
|
}
|
|
}
|