JX / Junexis RuntimeRola w platformie →
Menu Runtime

Poznaj Runtime

WprowadzeniePierwsza wiadomośćMożliwościGeneratory, Storage i StateDostępność i ograniczenia

Runtime / wykonanie i komunikacja

Pierwsza wiadomość przez Runtime

Wyślij pomiar, odbierz go i zobacz wartość. Potem powtórz to dla 24.0. Ten przykład używa rzeczywistej biblioteki .NET z repozytorium junexis-runtime.

Mały, konkretny sukces.

Jedna wiadomość przechodzi przez lokalny kanał. Widzisz jej zawartość i liczniki wysyłania oraz odbioru. Nie potrzebujesz konta, NAS-a, serwera ani State.

Co tutaj działa?

Program C# tworzy Channel<Measurement> z pojemnością dwóch elementów. Wysyła wiadomość room-1 / 21.0, odbiera ją, a następnie robi to samo dla 24.0. Odbiór sprawdza względem wysłanych danych.

To wywołanie API biblioteki .NET w jednym procesie. Nie jest kodem Junexis .jnx, programem wygenerowanym przez kompilator ani testem połączenia urządzenie → serwer → przeglądarka.

Kod wykonanej próby

using System.Globalization;
using JunexisLang.Runtime;

await using var channel = new Channel<Measurement>(capacity: 2);

foreach (var temperature in new[] { 21.0, 24.0 })
{
    var sent = await channel.SendAsync(new Measurement("room-1", temperature));
    if (sent != SendResult.Ok)
        throw new InvalidOperationException("Wyslanie nie zakonczylo sie sukcesem.");

    var received = await channel.RecvAsync();
    if (!received.IsOk)
        throw new InvalidOperationException("Odbior nie zwrocil wartosci.");

    var measurement = received.Ok!.Value.Value;
    if (measurement.DeviceId != "room-1" || measurement.Celsius != temperature)
        throw new InvalidOperationException("Odebrana wiadomosc nie odpowiada wyslanej.");

    Console.WriteLine($"Odebrano {measurement.DeviceId}: {measurement.Celsius.ToString("0.0", CultureInfo.InvariantCulture)}");
}

Console.WriteLine($"Liczniki: wyslano={channel.Metrics.Sent}, odebrano={channel.Metrics.Received}");
if (channel.Metrics.Sent != 2 || channel.Metrics.Received != 2)
    throw new InvalidOperationException("Niepoprawne liczniki.");

internal sealed record Measurement(string DeviceId, double Celsius);

SendAsync przekazuje wiadomość do kanału. RecvAsync zwraca wynik odbioru; dopiero jego wariant Ok zawiera wiadomość. Pojemność kanału ogranicza bufor. W tym przykładzie każdy odbiór następuje zaraz po wysłaniu, więc nie testujemy oczekiwania na pełnym buforze.

Rzeczywisty wynik

Odebrano room-1: 21.0
Odebrano room-1: 24.0
Liczniki: wyslano=2, odebrano=2

To zapis uruchomienia lokalnej kompilacji Release. Liczniki potwierdzają dwie operacje wysłania i dwie odbioru w tej instancji. Nie potwierdzają trwałości po restarcie ani dostarczenia przez sieć.

Otwórz kod C# · Otwórz zapis wyniku.

Jak powtórzyć na przygotowanym warsztacie?

Potrzebujesz .NET 10, checkoutu junexis-runtime z jego zależnościami i zbudowanej biblioteki Release. Nie zakładamy dostępności publicznej paczki do pobrania.

Przygotowanie biblioteki i własnego konsumenta

W katalogu repozytorium junexis-runtime:

dotnet build JunexisLang.Runtime/JunexisLang.Runtime.csproj -c Release

W nowym katalogu przykładu utwórz projekt dotnet new console --framework net10.0, zastąp Program.cs kodem powyżej i dodaj do jego pliku .csproj poniższą referencję. Zastąp ścieżkę własną ścieżką do rzeczywiście zbudowanej biblioteki:

<ItemGroup>
  <Reference Include="JunexisLang.Runtime">
    <HintPath>C:\twoj-workspace\junexis-runtime\JunexisLang.Runtime\bin\Release\net10.0\JunexisLang.Runtime.dll</HintPath>
  </Reference>
</ItemGroup>

Uruchom dotnet run -c Release. To ograniczony konsument lokalnej DLL, a nie instrukcja instalacji całego wydania. Inne API Runtime mogą wymagać dodatkowych zależności i konfiguracji. Nie obiecujemy przenośnego zestawu na czysty komputer na podstawie tej próby.

A pierwszy system w Junexis?

Jeżeli chcesz pracować z .jnx, przejdź do Od czego zacząć. Tam pomiar przechodzi przez wygenerowany serwer Go i raport, a urządzenie zastępuje adapter. To inna droga wykonania niż powyższa biblioteka .NET.

Poznaj możliwości Runtime · Zobacz powiązania z generatorami i State.