@startuml Deployment Architecture !theme plain skinparam backgroundColor #FEFEFE title Geutebruck API - Deployment Architecture node "Windows Server" { node "GeViServer Process\nPID: 45612" as geviserver { artifact "GeViServer.exe console" as gvexe folder "C:\\GEVISOFT" { file "TestMKS.set\n(13 servers, 64 mappings)" as config file "GeViServer.exe" as exe file "GeViProcAPINET_4_0.dll" as sdk } port "7700" as p7700 port "7701" as p7701 port "7702" as p7702 port "7703" as p7703 } node "C# SDK Bridge Process\nPID: 48052" as sdkbridge { artifact "GeViScopeBridge.exe" as bridge folder "Release Build" { file "GeViScopeBridge.exe\n(.NET 8.0)" as bridgeexe file "GeViScope SDK DLLs" as sdkdlls file "gRPC binaries" as grpclibs } component "Configuration Service" as configsvc component "Camera Service" as camsvc component "Monitor Service" as monsvc component "CrossSwitch Service" as crosssvc port "50051" as p50051 } node "Python API Process\nPID: 46212" as pythonapi { artifact "uvicorn main:app" as uvicorn folder ".venv" { file "Python 3.12" as python file "FastAPI" as fastapi file "grpcio" as grpc file "uvicorn" as uv } component "REST Endpoints" as rest component "Configuration Router" as configrouter component "gRPC Client" as grpcclient port "8000" as p8000 } folder "PowerShell Scripts" { file "start-services.ps1" as start file "stop-services.ps1" as stop file "restart-services.ps1" as restart file "status-services.ps1" as status } } cloud "Network" { actor "Web Client" as web actor "Mobile App" as mobile actor "GeViSet" as geviset } ' Service Management start ..> geviserver : 1. Start with\n"console" arg\nWait for port 7700 start ..> sdkbridge : 2. Start SDK Bridge\nWait for port 50051 start ..> pythonapi : 3. Start uvicorn\nWait for port 8000 stop ..> pythonapi : 1. Stop uvicorn stop ..> sdkbridge : 2. Stop bridge stop ..> geviserver : 3. Stop server status ..> geviserver : Check PID,\nports 7700-7703 status ..> sdkbridge : Check PID,\nport 50051 status ..> pythonapi : Check PID, port 8000,\nHTTP health check ' Port Connections web --> p8000 : HTTP/REST mobile --> p8000 : HTTP/REST geviset -.-> p7702 : SetupClient\n(blocked when\nAPI runs) p8000 --> rest rest --> configrouter configrouter --> grpcclient grpcclient --> p50051 : gRPC p50051 --> configsvc p50051 --> camsvc p50051 --> monsvc p50051 --> crosssvc configsvc --> p7702 : SetupClient\nprotocol camsvc --> p7700 : SDK API monsvc --> p7700 : SDK API crosssvc --> p7700 : SDK API p7700 --> gvexe p7701 --> gvexe p7702 --> gvexe p7703 --> gvexe gvexe --> config : Read/Write note right of start **Startup Order:** 1. GeViServer (15-60s wait for port 7700) 2. SDK Bridge (10-30s wait for port 50051) 3. Python API (5-20s wait for port 8000) Each step waits for port to be listening before proceeding to next service. end note note right of geviserver **GeViServer:** • Started with "console" argument • Loads TestMKS.set on startup • Listens on ports 7700-7703 • Manages cameras, monitors, events • Stores configuration in binary .set format end note note right of sdkbridge **SDK Bridge:** • .NET 8.0 application • Wraps GeViScope SDK (C++ DLL) • Exposes gRPC services • Handles SetupClient protocol • Parses/writes binary .set files end note note right of pythonapi **Python API:** • FastAPI framework • Swagger UI at /docs • Authentication & authorization • Configuration management ✅ • Camera/monitor control • Health checks end note note bottom of config **Configuration File:** • Binary format (.set) • Hierarchical folder structure • Contains: - 13 G-Core servers - 64 action mappings - System settings - User accounts end note @enduml