CHANGELOG - EVAC Cloud Connect (English)
==========================================


Version 1.2.1.0 - 2026-06-19
----------------------------

Changes:
- Ability to cancel the connection attempt to a remote EVAC device from the "Connecting..." dialog; when cancelled, the app stays on or returns to the panel with the EVAC devices list.
- Endpoint URL check with retries before opening the gRPC channel (up to 15 attempts with a 3 s interval, random jitter and a 5 s timeout per attempt); if the URL does not respond correctly a connection error is returned.
- Optimized loading and updating of the EVAC devices list: the list is shown earlier while heartbeat, partners and connected states are still being retrieved, without blocking the UI after login.
- Scroll position is preserved when the EVAC Devices and Discovered Devices lists are updated.
- Added the "version" field to the search filter of the EVAC devices list.
- Device counter added to the EVAC devices list and to the list of equipment discovered on the connected EVAC device's local network.
- The EVAC connection form is hidden during disconnection to prevent unwanted interactions.
- In datagrid button cells, no button is drawn when the cell value is null or empty.
- ONE 500 and ONE 150 models are included in the filter of equipment not compatible with remote connection that is hidden when connecting to an EVAC device.
- Text changes: the device loading dialog now reads "Loading EVAC Devices..." and the connection error message reads "Connection failed".


Version 1.2.0.0 - 2026-05-25
----------------------------

Changes:
- Multi-user account support: new user/profile selection step after login, with its own form, columns and account/email information.
- New Superadmin profile integrated in the client and in the authentication flow.
- In the EVAC devices list: with Manufacturer profile both Partner and Account columns are shown; with other profiles only Account is shown. The former Partner column is renamed to Account.
- The Expired column is removed from the EVAC devices list (no longer used).
- After connecting to an EVAC device, the equipment found on its local network that are not compatible with remote connection are filtered out.
- The connection panel now shows the user's account and the account the connected EVAC device belongs to.
- Text changes: the "Core Device Web" button becomes "EVAC Settings web", and "Core system"/"Core device" is replaced with "EVAC device".

Fixes:
- Fixed the updating of the connected status in the evac systems list.
- Various fixes that improve the app's overall stability and usability.


Version 1.1.1.2 - 2026-01-15
----------------------------

Changes:
- Stream stability improvements: UDP keepalive, HTTP timeouts, RPC error counter and auto-restart protection.
- Full streaming optimization: HealthMonitor removed, async blocks removed, buffer pooling and zero-copy operations added.
- GC and network configuration tweaks.
- System sounds removed, shared TCP/UDP port and controlled endpoint shutdown.
- DataGridView improvements (no focus rectangle, better Open Port button response).

Fixes:
- Removed buffer accumulation in the TCP proxy that caused random 300-800 ms pauses; data is now sent immediately.
- Fixed occasional slowdowns during communication.
- Fixed an issue that produced duplicated devices in the discover list.


Version 1.1.1.1 - 2025-10-06
----------------------------

Changes:
- NuGet packages updated (Google.Protobuf, Newtonsoft.Json, Serilog, System.Reactive, MSBuild.Obfuscar).
- Robust logging system for 24/7 production with Serilog (categories, 90-day retention, sensitive data masked).
- TCP/UDP buffer optimization with jumbo frame support and no loss of interactive latency.
- UI improvements: automatic row height in datagrids, system sounds suppression, Log In button validation, automatic save of the user's email, automatic focus on filters and a search filter in Discovered Devices.
- Requirements check: Windows 11 (Build 22000+) or Windows Server 2025+ is now required for bidirectional gRPC.
- Fixed local port 22022 for SSH connections (with automatic fallback).
- Sorting by any column in the system list is now allowed.
- Improved login form readability (larger fonts).
- Better scroll bar handling in the connection panel.

Fixes:
- Fixed major memory leaks in certificate validation, session timer, TCP port check, UdpClient and healthMonitorTimer (impact: from ~186 MB/month to < 100 KB/day).
- Fixed UI freeze when pressing Log Out, Refresh List and Connect.
- Fixed UDP connection close path that called methods on null instances.
- Fixed the TCP reconnection race condition that caused the first RDP connection to fail.
- Fixed handling of ObjectDisposedException and NullReferenceException to prevent infinite reconnection loops.
- Restored multiple simultaneous SSH connections to the same local port.
- Removed progressive degradation in consecutive TCP/UDP transfers (speeds remain stable).
- Removed zombie tasks that stayed alive after a disconnection.
- Fixed the Connected field synchronization with Firebase and change detection across all relevant fields.
- Fixed filtering to include the Partner field and to work only on visible columns.
- Prevented mistaken connections while filtering.
- Fixed column resizing and layout adjustments in several forms.
- Suppressed beep sound on keyboard events and dialogs.


Version 1.1.0.0 - 2025-02-21
----------------------------

Changes:
- Port recycling on TCP and UDP streams.
- When a UDP stream is created, port 60000 is preferred so that it does not have to be specified in LDA applications.
- New property to get the Control web URL with the access credentials.
- New button to open the Control web directly for EVAC Control systems.
- New activestream property on TCP and UDP to know the stream state.
- New event notifying connection exceptions in the TCP client.
- Overloaded constructor to specify the port to use (with fallback to a free port).

Fixes:
- Static function to check whether a TCP port is in use (avoids conflicts when assigning ports).


Version 1.0.0.20 - 2024-12-17
-----------------------------

Changes:
- After disconnecting from EVAC Core, the app returns to the Core selection screen without having to log in again.
- The "connection lost" message is now shown as a MessageBox over the main form.
- New event that notifies all discovered devices at once.
- Connection status label colors changed so it does not look like a button.
- Updated FirebaseClient library with the new expiration date request.

Fixes:
- Added try/catch in the endpoint copy function.
- When the connection to a system is lost, the app returns to the system selection screen (instead of the login screen).
- If a device disappears from discover, it is automatically removed from the list.


Version 1.0.0.0 - 2024-08-06
----------------------------

Changes:
- Application renamed to "Evac Cloud Connect".
- UI split into Login, Core System Selection and Core System Connection.
- Device discover on the Core LAN, remote UDP connections to NEO devices and SSH connection to the Core.
- TCP "tunnel" implemented (SendTcpData rpc) for SSH connections with the Core.
- Support for multiple simultaneous TCP connections with per-client send queues.
- Extended authentication with application profiles (access granted only to Installer or higher).
- Retry policy for transient gRPC failures.
- Button to open the eCore configuration web (visible only with Installer profile or higher).
- "Copy Connection Endpoint" option added to context menus.
- Informative fields about the connected eCore system model.
- New Discover specific for EVAC Cloud Connect.
- Indicator in the title bar when the build is beta or debug.
- Projects updated to .NET Framework 4.8.1, single obfuscated executable generated, release pdb generation disabled.
- Renamed UdpToGrpcClient to L4ToGrpcClient.

Fixes:
- Fixed UDP stream reuse by different applications connecting to the same remote IP.
- Fixes in application shutdown so the cloud endpoint is properly released.
- Fixed the session token expiration calculation.
- Fixed unnecessary extra stream when starting the TCP tunnel for the SSH connection.
- Fixes in connection state detection (LastConnectionDate and HeartBeatConfig).
- Fixed null reference errors in DiscoverPlusTask.
- Authentication error message shown when the obtained profile is "none".


Version 0.0.9.0 - 2023-09-29
----------------------------

Changes:
- Initial version of the application.
- Connection management with eCore through eCloud.
- FireBaseClient subrepo added for eCloud authentication.
- DeviceStream class to associate a bidirectional gRPC stream with a NEO device on the local network of the eCore platform.
- Methods to add/remove UDP bridge connections between applications and remote NEO devices.
- Timer to renew the user session token to keep the gRPC channel open.
