From fc94e603c5a458f201d1fea47ca485998ac27da7 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Fri, 14 Jun 2024 12:50:12 +0200 Subject: [PATCH] Added Logout --- main/MessageHelper.cpp | 51 +++++++++++++++++++++++++++++++++++++++--- main/MessageHelper.h | 12 ++++++++-- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/main/MessageHelper.cpp b/main/MessageHelper.cpp index 9232608..8d34677 100644 --- a/main/MessageHelper.cpp +++ b/main/MessageHelper.cpp @@ -175,12 +175,49 @@ void MessageHelper::createLoginMessage() { } } -QByteArrayList const &MessageHelper::createLoginMessageChunksToSend(char etx) { +void MessageHelper::createLogoutMessage() { + m_logoutMessage.clear(); + + m_logoutMessage.push_back((char)0x85); // 5 in 0x85 is the size + m_logoutMessage = m_loginMessage.append(QByteArray("Logout")); + + m_loginMessage.push_back((char)0x04); + m_loginMessage = m_loginMessage.append(QByteArray("Time")); + m_loginMessage.push_back((char)0x00); + m_loginMessage.push_back((char)0x13); + + QDateTime current = QDateTime::currentDateTime(); + // TODO: wieder entfernen + current.setTime(QTime(12, 0, 0)); + current.setDate(QDate(2024, 6, 12)); + + QByteArray time(current.toString(Qt::ISODate).toStdString().c_str()); + time[10] = ' '; + m_logoutMessage = m_logoutMessage.append(time); + + m_loginMessage.push_back((char)0x00); + + if (DBG_LEVEL >= DBG_INFORMATION) { + qCritical() << DBG_HEADER << "loginMessage" << m_logoutMessage.toHex(':'); + } +} + +QByteArrayList const &MessageHelper::createMessageChunksToSend(AsyncPosCommand cmd, char etx) { QByteArray encryptedPacketID(QByteArray("\x01\x02\x03\x04\x05\x06\x07\x08")); m_messageChunkList.clear(); - createLoginMessage(); - createRawPacket(PacketType::POS_ECR, encryptedPacketID, m_loginMessage); + + switch (cmd) { + case (int)MessageHelper::AsyncPosCommand::LOGIN: + createLoginMessage(); + createRawPacket(PacketType::POS_ECR, encryptedPacketID, m_loginMessage); + break; + case (int)MessageHelper::AsyncPosCommand::LOGOUT: + createLogoutMessage(); + createRawPacket(PacketType::POS_ECR, encryptedPacketID, m_logoutMessage); + break; + default:; + } if (DBG_LEVEL >= DBG_DEBUG) { qCritical() << DBG_HEADER << m_rawPacket.toHex(':'); @@ -296,6 +333,14 @@ QByteArrayList const &MessageHelper::createLoginMessageChunksToSend(char etx) { return m_messageChunkList; } +QByteArrayList MessageHelper::createLoginMessageChunksToSend(char etx) { + return createMessageChunksToSend(AsyncPosCommand::LOGIN, etx); +} + +QByteArrayList MessageHelper::createLogoutMessageChunksToSend(char etx) { + return createMessageChunksToSend(AsyncPosCommand::LOGOUT, etx); +} + bool MessageHelper::insertEncryptedPacketID(QByteArray const &encryptedPacketID) { if (encryptedPacketID.size() == PACKET_ID_SIZE) { // m_rawPacket has already full length diff --git a/main/MessageHelper.h b/main/MessageHelper.h index dab6fef..3fc61b9 100644 --- a/main/MessageHelper.h +++ b/main/MessageHelper.h @@ -17,6 +17,11 @@ public: // POS_HOST_FORMAT_1_UNENCRYPTED = 0x21 }; + enum AsyncPosCommand : std::uint8_t { + LOGIN = 0, + LOGOUT = 1 + }; + explicit MessageHelper(QString const &posID = "T-TPS-SELF2002in", QString const &apak = "8AC304380E0E476BA2558B75DB9E2516"); explicit MessageHelper(QByteArray const &posID, QString const &apak); @@ -29,8 +34,9 @@ public: bool insertEncryptedPacketID(QByteArray const &encryptedPacketID); - QByteArrayList const &getMessageChunksToSend(); - QByteArrayList const &createLoginMessageChunksToSend(char ext); + QByteArrayList createLoginMessageChunksToSend(char etx); + QByteArrayList createLogoutMessageChunksToSend(char etx); + QByteArrayList const &createMessageChunksToSend(AsyncPosCommand cmd, char etx); // private: @@ -40,11 +46,13 @@ public: QByteArray m_messageHeaderPrefix; QByteArray m_rawPacket; // without leading STX and trailing [ETX(1/2), LRC] QByteArray m_loginMessage; + QByteArray m_logoutMessage; QByteArrayList m_messageChunkList; bool setMessageHeaderPacketType(PacketType packetType); bool createMessageHeaderPrefix(PacketType packetType, QByteArray const &encryptedPacketID); void createLoginMessage(); + void createLogoutMessage(); static QByteArray const &mask(QByteArray &messageChunk); static QByteArray const &unMask(QByteArray &messageChunk);