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.
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.