/*! * * Copyright (c) 2026 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file main.cpp * \author (original) Stephen Quong * \date (original) 30-Jul-2026 * */ #include #include #include #include "DCSSimController.h" constexpr quint16 DEFAULT_MQTT_PORT = 1883; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QCoreApplication::setApplicationName("DCSsim"); QCommandLineParser parser; parser.setApplicationDescription("Diality Cloud System simulator"); parser.addHelpOption(); QCommandLineOption portOption(QStringList() << "p" << "port", "TCP listening port", "port", QString::number(DEFAULT_MQTT_PORT)); QCommandLineOption certOption("cert", "Server certificate PEM; enables TLS (requires --key).", "file"); QCommandLineOption keyOption("key", "Server private key PEM.", "file"); QCommandLineOption caOption("ca", "CA bundle PEM; clients must present a certificate it signs (mTLS).", "file"); parser.addOption(portOption); parser.addOption(certOption); parser.addOption(keyOption); parser.addOption(caOption); parser.process(app); bool ok = false; const uint port = parser.value(portOption).toUInt(&ok); if (!ok || port == 0 || port > 65535) { qCritical().noquote() << "DCSsim: invalid port" << parser.value(portOption); return 1; } if (parser.isSet(certOption) != parser.isSet(keyOption)) { qCritical().noquote() << "DCSsim: --cert and --key must be given together"; return 1; } if (parser.isSet(caOption) && !parser.isSet(certOption)) { qCritical().noquote() << "DCSsim: --ca requires --cert and --key"; return 1; } DCSSimController::TlsConfig tls; tls.certPath = parser.value(certOption); tls.keyPath = parser.value(keyOption); tls.caPath = parser.value(caOption); DCSSimController simController(static_cast(port), tls); if (!simController.listen()) { return 1; } return app.exec(); }