fix(site-runtime): resolve SiteRuntime-001/002/003 — route data-sourced writes to DCL, real per-attribute API results, race-free redeploy
This commit is contained in:
@@ -99,18 +99,31 @@ public class ScriptRuntimeContext
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets an attribute value. For data-connected attributes, forwards to DCL via Instance Actor.
|
||||
/// For static attributes, updates in-memory and persists to SQLite via Instance Actor.
|
||||
/// All mutations serialized through the Instance Actor mailbox.
|
||||
/// Sets an attribute value. For data-connected attributes the Instance Actor
|
||||
/// forwards the write to the DCL, which writes the physical device; the
|
||||
/// in-memory value is not optimistically updated. For static attributes the
|
||||
/// Instance Actor updates the in-memory value and persists the override to
|
||||
/// SQLite. All mutations are serialized through the Instance Actor mailbox.
|
||||
///
|
||||
/// The write is awaited so that a device-write failure on a data-connected
|
||||
/// attribute is surfaced synchronously to the calling script as an
|
||||
/// <see cref="InvalidOperationException"/>.
|
||||
/// </summary>
|
||||
public void SetAttribute(string attributeName, string value)
|
||||
public async Task SetAttribute(string attributeName, string value)
|
||||
{
|
||||
var correlationId = Guid.NewGuid().ToString();
|
||||
var command = new SetStaticAttributeCommand(
|
||||
correlationId, _instanceName, attributeName, value, DateTimeOffset.UtcNow);
|
||||
|
||||
// Tell (fire-and-forget) — mutation serialized through Instance Actor
|
||||
_instanceActor.Tell(command);
|
||||
// Ask — mutation serialized through the Instance Actor mailbox; the reply
|
||||
// carries the device-write outcome for data-connected attributes.
|
||||
var response = await _instanceActor.Ask<SetStaticAttributeResponse>(command, _askTimeout);
|
||||
|
||||
if (!response.Success)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"SetAttribute('{attributeName}') failed: {response.ErrorMessage}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user