/** * @file Xpl2Client.cpp * @brief TCP client for the Alchemie XPL2 printhead protocol. */ #include "Xpl2Client.h" Xpl2Client::Xpl2Client(QObject *parent) : QObject(parent) { connect(&m_socket, &QTcpSocket::connected, this, &Xpl2Client::onConnected); connect(&m_socket, &QTcpSocket::disconnected, this, &Xpl2Client::onDisconnected); connect(&m_socket, &QTcpSocket::readyRead, this, &Xpl2Client::onReadyRead); connect(&m_socket, &QAbstractSocket::errorOccurred, this, &Xpl2Client::onErrorOccurred); } QString Xpl2Client::host() const { return m_host; } void Xpl2Client::setHost(const QString &host) { if (m_host == host) return; m_host = host; emit hostChanged(); } quint16 Xpl2Client::port() const { return m_port; } void Xpl2Client::setPort(quint16 port) { if (m_port == port) return; m_port = port; emit portChanged(); } bool Xpl2Client::isConnected() const { return m_socket.state() == QAbstractSocket::ConnectedState; } void Xpl2Client::connectToServer() { if (isConnected()) { emit statusMessage(QStringLiteral("Already connected")); return; } emit statusMessage( QStringLiteral("Connecting to %1:%2…").arg(m_host).arg(m_port)); m_socket.connectToHost(m_host, m_port); } void Xpl2Client::disconnectFromServer() { if (!isConnected()) return; m_socket.disconnectFromHost(); } void Xpl2Client::sendCommand(const QString &command) { if (!isConnected()) { emit errorOccurred(QStringLiteral("Not connected")); return; } QByteArray data = command.toUtf8() + '\n'; m_socket.write(data); emit statusMessage(QStringLiteral("Sent: %1").arg(command)); } void Xpl2Client::onConnected() { emit connectedChanged(); emit statusMessage(QStringLiteral("Connected to %1:%2") .arg(m_socket.peerName()) .arg(m_socket.peerPort())); } void Xpl2Client::onDisconnected() { emit connectedChanged(); emit statusMessage(QStringLiteral("Disconnected")); } void Xpl2Client::onReadyRead() { while (m_socket.canReadLine()) { QString line = QString::fromUtf8(m_socket.readLine()).trimmed(); emit responseReceived(line); } } void Xpl2Client::onErrorOccurred(QAbstractSocket::SocketError error) { Q_UNUSED(error) emit errorOccurred(m_socket.errorString()); }