v2.1.0
RemoteAppClient 2.1.0
An honesty release. The console stops asserting things it cannot know: Online now means a device is genuinely reachable, a machine that only looks dead gets labelled instead of buried, and — for the first time — you can ask a device where it has been. All components are 2.1.0.0.
Database schema change. The per-minute telemetry snapshot is replaced by an event log. Apply the idempotent
upgrade-2.1.0-device-events.sql(see Upgrading); a fresh install gets the table fromschema.sql.
Online that means online
- The badge could stay lit for hours after a machine fell off the network. The server's WebSocket had a keepalive interval but no timeout, so a socket whose peer had vanished was never torn down — the connection registry kept the dead handle and reported it as connected. One device sat "Online" with a four-hour-old last report while six commands were "delivered" into that dead socket. Sockets now time out (
KeepAliveTimeout), and the badge cross-checks the last report, so a lingering handle cannot outlive the truth. - Because of that, starting a session against an unreachable device raised a consent prompt nobody could answer. Commands now report whether they actually reached the device, and say so plainly when they did not.
- New state "nem vezérelhető" — telemetry is arriving but the command channel is not up. This used to render as plain offline, which is why a demonstrably alive machine could show up as dead. Liveness is defined in exactly one place now, so the badge, the filters and the history cannot drift apart.
- Both consoles now answer the same question the same way. The state decision moved into shared code, so the Windows list badge, the Windows detail panel and the Linux console can no longer disagree about one device — and they did: the detail panel still said offline while the badge beside it said nem vezérelhető, and the Linux console, which knew only online/offline, said offline for both. Failing to connect now names the actual state instead of asserting the machine is offline. (The telemetry panel's second Állapot row is renamed Jóváhagyás — it is the approval state, not liveness.)
- The agent's command loop can no longer die quietly. An unhandled exception ended the background service for good: the device kept sending telemetry — so it looked perfectly healthy — but never accepted another command until someone restarted the service by hand. The loop now catches itself and retries every 60 s.
A fleet with a past
- A new Előzmények tab (also on the right-click menu): when a device changed state (online / ingadozó / nem vezérelhető / offline), and when its IP moved. The reverse DNS is resolved and stored at write time — once a device has moved on, nothing can recover the name a past address used to have.
- The old
DeviceTelemetrytable wrote every device's full payload once a minute. It reached 755 MB across fifteen devices in three months, and no endpoint and no client had ever read a single row of it — every current value already lives denormalised on the device row. It is replaced byDeviceEvents, which records only transitions and is pruned at 90 days; a device that stays put and stays online now writes nothing at all. The database went from 811 MB to 4 MB. - Deleting a device no longer times out. One machine had accumulated 63,574 snapshot rows — enough to push the cascade past the request limit. The event log removes the cause, and the delete clears it too.
Smaller things
- Hozzáférési napló: the log tab and its context-menu entry now say what they actually show.
- The public IP is shown with its reverse DNS beside it, in the list and in the history.
- Console broker reconnects are serialized, and a port forward always resolves the current broker rather than one disposed mid-reconnect.
- The Linux operator console is fully localized — its device list, status messages and settings panel used to stay English while the rest of the UI switched language; nearly all of it reused keys the Windows client already had. Two long-standing slips came out with it: an uptime under an hour printed a hardcoded Hungarian word on the English UI, and the link-quality row the Windows panel shows was missing entirely.
- Dependency bumps (NuGet + GitHub Actions); the Avalonia family is aligned at 12.1.2 across the Linux console.
Upgrading
Server first. Apply src/RemoteServer/Data/Migrations/upgrade-2.1.0-device-events.sql — through the in-app Server update → choose SQL upload, or manually against the database — then deploy the server. It is idempotent, and it drops the old DeviceTelemetry table, which is where the reclaimed space comes from.
The wire contract is additive, so nothing breaks in either direction: a 2.0.x agent talks to a 2.1.0 server unchanged (there is no agent protocol change), and a 2.0.x console ignores the new field. A 2.1.0 console against a 2.0.x server is the one degraded combination — the Előzmények tab has no endpoint to call, and no device is ever shown as nem vezérelhető — so upgrade the server before the consoles.
Artifacts
RemoteAgent.exe,RemoteAgent.Updater.exe,RemoteClient.exe,RemoteClient.Lite.exe— Windows x64, self-contained single-fileRemoteServer-linux-x64.tar.gz— serverremoteclient_2.1.0_amd64.deb— Linux operator console