C
Event Sender: Sending Messages to Applications
// Copyright (C) 2025 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial // This file is part of the Qt Safe Renderer module #ifndef TCPDATACONTROL_H #define TCPDATACONTROL_H #include "datacontrolinterface.h" #include <QTcpSocket> #include <QNetworkInterface> #include <QProcess> #include <QString> #include <QObject> #include <QTimer> class TCPDataControl : public DataControlInterface { Q_OBJECT Q_PROPERTY(QVariantList stringList READ getStringList NOTIFY stringListChanged) Q_PROPERTY(bool connectionBool READ connectionBool WRITE setConnectionBool NOTIFY myConnectionChanged) Q_PROPERTY(ConnectionState telltalesConnectionState READ telltalesConnectionState NOTIFY telltalesConnectionStateChanged) Q_PROPERTY(ConnectionState clusterConnectionState READ clusterConnectionState NOTIFY clusterConnectionStateChanged) Q_PROPERTY(QString telltalesHostPort READ telltalesHostPort CONSTANT) Q_PROPERTY(QString clusterPort READ clusterPort CONSTANT) public: explicit TCPDataControl(QObject *parent = nullptr); ~TCPDataControl(); enum ConnectionState { Disconnected, Connecting, Connected }; Q_SIGNAL void connectionStateChanged(ConnectionState state); Q_INVOKABLE void establishConnection(const QStringList &ips, int port); constexpr static quint16 TELLTALES_HOST_PORT = 32112; constexpr static quint16 TELLTALES_TARGET_PORT = 32123; constexpr static quint16 CLUSTER_PORT = 32124; QString telltalesHostPort() const; QString clusterPort() const; QVariantList getStringList() const; ConnectionState telltalesConnectionState() const; ConnectionState clusterConnectionState() const; static ConnectionState mapSocketState(QAbstractSocket::SocketState socketState); void setConnectionBool(bool b); bool headLight() const; bool parkLight() const; bool rightTurnLight() const; bool leftTurnLight() const; bool lightFailure() const; bool frontLeftDoorOpen() const; bool frontRightDoorOpen() const; bool rearLeftDoorOpen() const; bool rearRightDoorOpen() const; bool hoodOpen() const; bool trunkOpen() const; bool flatTire() const; bool hazardSignal() const; bool brake() const; bool crashArg() const; bool connectionBool() const; double oilTemp() const; double batteryPotential() const; double gasLevel() const; double direction() const; double longitude() const; double latitude() const; double vehicleSpeed() const; int gear() const; int oilPressure() const; int carId() const; int rpm() const; int engineTemp() const; public slots: void handleTcpError(QAbstractSocket::SocketError socketError); void setVehicleSpeed(double vehicleSpeed); void setLatitude(double latitude); void setLongitude(double longitude); void setDirection(double direction); void setFlatTire(bool flatTire); void setFrontLeftDoorOpen(bool doorOpen); void setFrontRightDoorOpen(bool doorOpen); void setRearLeftDoorOpen(bool doorOpen); void setRearRightDoorOpen(bool doorOpen); void setHoodOpen(bool doorOpen); void setTrunkOpen(bool doorOpen); void setLightFailure(bool lightFailure); void setGear(int gear); void setLeftTurnLight(bool leftTurnLight); void setRightTurnLight(bool rightTurnLight); void setHeadLight(bool headLight); void setParkLight(bool parkLight); void setCarId(int carId); void setHazardSignal(bool hazardSignal); void setBrake(bool brake); void setOilTemp(double oilTemp); void setOilPressure(int oilPressure); void setBatteryPotential(double batteryPotential); void setGasLevel(double gasLevel); void setRpm(int rpm); void setEngineTemp(int engineTemp); void setCrash(bool crashArg); signals: void stringListChanged(); void myConnectionChanged(); void telltalesConnectionStateChanged(ConnectionState state); void clusterConnectionStateChanged(ConnectionState state); void telltalesRunningServiceChanged(const QString &service); void clusterRunningServiceChanged(const QString &service); private slots: void onTelltalesConnectionStateChanged(QAbstractSocket::SocketState socketState); void onClusterConnectionStateChanged(QAbstractSocket::SocketState socketState); private: void write(const char *, qint64 ); void write(const char *); void setAddress(const QString &ip, int port); bool checkConnection(const QString &ip, int port); bool isHostEnvironment(const QString &ip) const; private: QTcpSocket m_tcpSocket; QTcpSocket m_telltalesSocket; QTcpSocket m_clusterSocket; QVariantList m_stringList; QString m_address; QString m_runningService; QString m_telltalesService; QString m_clusterService; bool m_frontLeftDoorOpen = false; bool m_frontRightDoorOpen = false; bool m_rearLeftDoorOpen = false; bool m_rearRightDoorOpen = false; bool m_hoodOpen = false; bool m_trunkOpen = false; bool m_headLight = false; bool m_parkLight = false; bool m_rightTurnLight = false; bool m_leftTurnLight = false; bool m_hazardSignal = false; bool m_brake = false; bool m_crash = false; bool m_connection = false; int m_port = 0; int m_carId = 0; }; #endif // TCPDATACONTROL_H