rs2322tcp/cmd/rs2322tcp-client/main.go
2026-08-11 10:59:46 +02:00

63 lines
1.9 KiB
Go

/*
* ============================================================================
* Projekt.....: rs2322tcp
* Datei.......: cmd/rs2322tcp-client/main.go
* Copyright (C) 2026 Dieter Lang
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* Beschreibung:
* Einstiegspunkt für den grafischen rs2322tcp-Client.
*
* Der Client wird als eigenständige Desktop-Anwendung ausgeführt. Die
* grafische Oberfläche basiert auf Fyne und bildet sowohl die
* Statusanzeige als auch später die Konfiguration der lokalen virtuellen
* seriellen Ports ab.
*
* Die eigentliche Client- und Runtime-Logik bleibt in den internen
* Packages gekapselt. Diese Datei ist bewusst auf den Programmstart
* und die Übergabe an die GUI beschränkt.
* ============================================================================
*/
package main
import (
"fmt"
"fyne.io/fyne/v2/app"
"git.lang-dieter.de/rs2322tcp/internal/gui"
"git.lang-dieter.de/rs2322tcp/internal/version"
)
func main() {
fmt.Printf("rs2322tcp-client %s\n", version.Version)
application := app.NewWithID("git.lang-dieter.de.rs2322tcp.client")
guiApplication, err := gui.NewApp(
application,
"./configs/client.json",
)
if err != nil {
fmt.Printf("GUI konnte nicht gestartet werden: %v\n", err)
return
}
// Das technische Client-System wird nach dem Erzeugen des Fensters
// asynchron gestartet. Dadurch bleibt die GUI auch während des
// Verbindungsaufbaus sofort sichtbar und bedienbar.
guiApplication.Start()
// SetOnClosed gehört zum Fyne-Fenster, nicht zur Fyne-Anwendung.
//
// Beim Schließen des Hauptfensters wird die technische Client-
// Anwendung beendet. Dadurch werden Runtime, Bridges, virtuelle
// Ports und die Serververbindung sauber geschlossen.
guiApplication.Window().SetOnClosed(func() {
guiApplication.Close()
})
// ShowAndRun zeigt das Fenster und startet den Fyne-Eventloop.
guiApplication.ShowAndRun()
}