Útmutatók
Felület (UI)
A Komod böngészős felülete Blazor komponens(ek), amelyeket a KOFA kliense futás közben tölt be a csomagból. A felület csak megjelenít és parancsot küld; saját portja nincs, az adatot a szerver Komodtól kapja.
Projekt
A felület külön projekt (X.Ui, Microsoft.NET.Sdk.Razor), amely a szerver projekttel közös Package.props-ot használ. A Package.props KomodClientAssemblies tulajdonsága sorolja fel a betöltendő dll-eket. Ezt a kofa-komod és a kofa-komod-quickstart sablon beállítja.
Nézettípusok
A komponenst a [KomodView("<komod id>", ViewKind.X)] attribútum köti a Komodhoz, és a KomodComponentBase-ből származik:
ViewKind |
Hol jelenik meg |
|---|---|
Widget |
Dashboard csempe. |
Page |
A példány teljes oldala. |
Settings |
Egyedi beállítás-szerkesztő (különben automatikus űrlap). |
Egy Komodnak mindháromból lehet egy-egy.
<div style="display:flex;flex-direction:column;gap:6px;font-variant-numeric:tabular-nums">
<div style="font-size:1.8rem;font-weight:600">
@(_temperature is { } t ? t.ToString("0.0", CultureInfo.InvariantCulture) + " °C" : "–")
</div>
<div style="display:flex;align-items:center;gap:8px">
<button type="button" @onclick="() => AdjustTargetAsync(-0.5)">−</button>
<span>cél: @(_target?.ToString("0.0", CultureInfo.InvariantCulture) ?? "–") °C</span>
<button type="button" @onclick="() => AdjustTargetAsync(+0.5)">+</button>
</div>
<div style="font-size:.85rem;opacity:.8">Fűtés: @(_heating ? "BE" : "KI")</div>
@if (_error is not null)
{
<div style="font-size:.8rem;color:#c42b1c">@_error</div>
}
</div>
Az ős (KomodComponentBase) adta tagok
| Tag | Jelentés |
|---|---|
InstanceId, InstanceLabel, KomodId |
A példány azonosítói. |
Kofa (IKomodClientContext) |
A szerver elérése: feliratkozás, beállítás, parancs, fájl. |
Port("id") |
PortRef a példány egy portjára. |
AssetUrl("x.js") |
A csomag wwwroot/ fájljának URL-je. |
InjectAsync, InvokeCommandAsync |
Rövidítések a bemenet beküldésére és a parancsra. |
Settings, SettingsChanged |
Csak ViewKind.Settings nézetben: a szerkesztett beállítás és a módosítás jelzése. |
Élő adat
A SubscribeAsync<T> aszinkron folyamot ad. Mind kimeneti, mind bemeneti portra feliratkozhatsz; a szerver ritkítja a folyamot (maxRateHz), és csomag-újratöltés után magától újra feliratkozik.
protected override async Task OnInitializedAsync()
{
_target = ReadTarget(await Kofa.GetSettingsAsync(InstanceId, _cts.Token));
// Both an input and an output port can be subscribed; the server thins the stream to maxRateHz.
_loops.Add(Task.Run(async () =>
{
await foreach (var message in Kofa.SubscribeAsync<Scalar>(Port("temperature"), maxRateHz: 5, _cts.Token))
{
_temperature = message.Value.Value;
await InvokeAsync(StateHasChanged);
}
}));
_loops.Add(Task.Run(async () =>
{
await foreach (var message in Kofa.SubscribeAsync<BoolValue>(Port("heater"), maxRateHz: 5, _cts.Token))
{
_heating = message.Value.Value;
await InvokeAsync(StateHasChanged);
}
}));
}
Megjegyzés
A feliratkozó ciklust DisposeAsync-ben állítsd le a CancellationToken-nel (lásd a teljes sablonfájlt), különben az oldal elhagyása után is fut.
Beállítás-szerkesztő
Ha az automatikus űrlap nem elég, írj [KomodView("<id>", ViewKind.Settings)] komponenst. A Settings paraméterben a szerkesztett beállítást kapod (alapértékekkel kitöltve), a módosítást a SettingsChanged callbackkel jelzed. A módosítás a draftba kerül, és az Alkalmaz gomb után él.
Futás közbeni állításhoz (Widget vagy Page nézetből) az IKomodClientContext.GetSettingsAsync / SaveSettingsAsync való: a szerver ellenőriz, élőben alkalmaz (vagy újraindít, ha az OnSettingsChangedAsync false-t ad). Hiba esetén KomodClientException jön magyar üzenettel.
Statikus fájlok és JavaScript
A UI projekt wwwroot/ mappája a csomagba kerül, a szerver a /komods/<id>/<verzió>/wwwroot/ alatt szolgálja ki. A nézetben az AssetUrl adja az URL-t, JS modul így tölthető be:
_module = await JS.InvokeAsync<IJSObjectReference>("import", AssetUrl("remote-input.js"));
A billentyűzet, gamepad, pointer capture és hasonló eseménykezelés a Komod saját JS moduljában maradjon.
Figyelem
A wwwroot/ fájljai bejelentkezés nélkül letölthetők, ezért titkot ne tegyél beléjük. Szerver API-t a nézet ne relatív URL-lel hívjon, hanem az IKomodClientContext metódusaival.
Méret a dashboardon
A csempe magassága állítható. Ha a nézet ki tudja tölteni a helyet (térkép, kép, 3D), a gyökér elem magassága kövesse a --kofa-view-height CSS változót, saját alapértékkel:
<div style="position:relative;height:var(--kofa-view-height, 260px)">…</div>
Stílus
A Komod UI jelenleg nem hoz saját CSS fájlt a kliens oldalra: a stílust a komponensben, inline add meg (a sablon is így csinálja), vagy wwwroot/-ból tölts be egy <link>-et. Az alap betű- és színvilágot a kliens adja; világos és sötét témához kerüld a rögzített színeket.
Korlátok
- A kiadott kliens trimmelt, nem minden framework API elérhető. A
kofa-packfigyelmeztet. - A UI nem fér hozzá közvetlenül a szerver fájlrendszeréhez; fájl: Fájlok.