aboutsummaryrefslogtreecommitdiffstats
path: root/src/Xpl2Client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Xpl2Client.cpp')
-rw-r--r--src/Xpl2Client.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/Xpl2Client.cpp b/src/Xpl2Client.cpp
new file mode 100644
index 0000000..db53792
--- /dev/null
+++ b/src/Xpl2Client.cpp
@@ -0,0 +1,86 @@
+/**
+ * @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());
+}