Skip to content

Commit

Permalink
code reload
Browse files Browse the repository at this point in the history
  • Loading branch information
amylizzle committed Nov 18, 2024
1 parent 6062c18 commit 76c2d24
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
23 changes: 23 additions & 0 deletions OpenDreamRuntime/DreamManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,29 @@ public void ProcessDelQueue() {
}
}

public void HotReloadJson(string? jsonPath) {
if (string.IsNullOrEmpty(jsonPath) || !File.Exists(jsonPath))
throw new FileNotFoundException("Could not find the specified json file");

string jsonSource = File.ReadAllText(jsonPath);
DreamCompiledJson? json = JsonSerializer.Deserialize<DreamCompiledJson>(jsonSource);
if (json == null)
throw new Exception("Failed to deserialize the json file");

if (!json.Metadata.Version.Equals(OpcodeVerifier.GetOpcodesHash()))
throw new Exception("Compiler opcode version does not match the runtime version!");

_compiledJson = json;
var rootPath = Path.GetFullPath(Path.GetDirectoryName(jsonPath)!);
var resources = _compiledJson.Resources ?? Array.Empty<string>();

Check notice

Code scanning / InspectCode

Use collection expression syntax Note

Use collection expression
_dreamResourceManager.Initialize(rootPath, resources);
if(!string.IsNullOrEmpty(_compiledJson.Interface) && !_dreamResourceManager.DoesFileExist(_compiledJson.Interface))
throw new FileNotFoundException("Interface DMF not found at "+Path.Join(rootPath,_compiledJson.Interface));
_objectTree.LoadJson(json);
DreamProcNative.SetupNativeProcs(_objectTree);

}

Check warning

Code scanning / InspectCode

Incorrect blank lines: Incorrect number of blank lines near braces Warning

Incorrect number of blank lines near braces, expected maximum 0 instead of 1

public bool LoadJson(string? jsonPath) {
if (string.IsNullOrEmpty(jsonPath) || !File.Exists(jsonPath))
return false;
Expand Down
23 changes: 22 additions & 1 deletion OpenDreamRuntime/Procs/DebugAdapter/DreamDebugManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
using OpenDreamRuntime.Procs.DebugAdapter.Protocol;
using OpenDreamRuntime.Resources;
using Robust.Server;
using Robust.Shared.Configuration;
using OpenDreamShared;

namespace OpenDreamRuntime.Procs.DebugAdapter;

Expand All @@ -15,6 +17,7 @@ internal sealed class DreamDebugManager : IDreamDebugManager {
[Dependency] private readonly DreamResourceManager _resourceManager = default!;
[Dependency] private readonly ProcScheduler _procScheduler = default!;
[Dependency] private readonly IBaseServer _server = default!;
[Dependency] private readonly IConfigurationManager _configManager = default!;

private ISawmill _sawmill = default!;

Expand Down Expand Up @@ -353,6 +356,9 @@ private void OnRequest(DebugAdapterClient client, Request req) {
case RequestHotReloadResource requestHotReloadResource:
HandleRequestHotReloadResource(client, requestHotReloadResource);
break;
case RequestHotReloadBytecode requestHotReloadBytecode:
HandleRequestHotReloadBytecode(client, requestHotReloadBytecode);
break;
default:
req.RespondError(client, $"Unknown request \"{req.Command}\"");
break;
Expand Down Expand Up @@ -848,7 +854,7 @@ private void HandleRequestHotReloadResource(DebugAdapterClient client, RequestHo
requestHotReloadResource.RespondError(client, "No file provided for a hot reload");
return;
}

_sawmill.Debug("Debug adapter triggered resource hot reload for "+requestHotReloadResource.Arguments.FilePath);
try {
_dreamManager.HotReloadResource(requestHotReloadResource.Arguments.FilePath);
Expand All @@ -858,6 +864,21 @@ private void HandleRequestHotReloadResource(DebugAdapterClient client, RequestHo
}
}

private void HandleRequestHotReloadBytecode(DebugAdapterClient client, RequestHotReloadBytecode requestHotReloadBytecode) {
if (string.IsNullOrWhiteSpace(requestHotReloadBytecode.Arguments.FilePath)) {
_sawmill.Error("Debug adapter requested a bytecode hot reload but didn't provide a json file");
requestHotReloadBytecode.RespondError(client, "No file provided for a hot reload");
return;
}
_sawmill.Debug($"Debug adapter triggered bytecode hot reload for file {requestHotReloadBytecode.Arguments.FilePath}");

Check warning

Code scanning / InspectCode

Incorrect blank lines: Blank lines are missing elsewhere Warning

Blank lines are missing, expected minimum 1 instead of 0
try {
_dreamManager.HotReloadJson(_configManager.GetCVar(OpenDreamCVars.JsonPath));
requestHotReloadBytecode.Respond(client);
} catch (Exception e) {
requestHotReloadBytecode.RespondError(client, e.Message);
}
}

private IEnumerable<DisassembledInstruction> DisassemblySkipTake(List<DisassembledInstruction> list, int midpoint, int offset, int count) {
for (int i = midpoint + offset; i < midpoint + offset + count; ++i) {
if (i < 0) {
Expand Down
1 change: 1 addition & 0 deletions OpenDreamRuntime/Procs/DebugAdapter/Protocol/Request.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public Request() : base("request") { }
"disassemble" => json.Deserialize<RequestDisassemble>(),
"hotreloadinterface" => json.Deserialize<RequestHotReloadInterface>(),
"hotreloadresource" => json.Deserialize<RequestHotReloadResource>(),
"hotreloadbytecode" => json.Deserialize<RequestHotReloadBytecode>(),
// Caller will fail to recognize it and can respond with `success: false`.
_ => request,
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System.Text.Json.Serialization;
using JetBrains.Annotations;

namespace OpenDreamRuntime.Procs.DebugAdapter.Protocol;

[UsedImplicitly]
public sealed class RequestHotReloadBytecode : Request {
[JsonPropertyName("arguments")] public required RequestHotReloadBytecodeArguments Arguments { get; set; }

[UsedImplicitly]
public sealed class RequestHotReloadBytecodeArguments {
[JsonPropertyName("file")] public string? FilePath { get; set; }
}

public void Respond(DebugAdapterClient client) {
client.SendMessage(Response.NewSuccess(this));
}
}

0 comments on commit 76c2d24

Please sign in to comment.