aboutsummaryrefslogtreecommitdiffstats
path: root/mock-server/main.cpp
blob: 4818d6fb57338a746f6cf95ec25e48d350191592 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
 * @file   main.cpp
 * @brief  Mock XPL2 server — echoes back on three ports.
 */
#include <QCoreApplication>
#include <QTcpServer>
#include <QTcpSocket>

static QTcpServer *
listenOn (quint16 port, const char *name, QObject *parent)
{
  auto *server = new QTcpServer (parent);

  QObject::connect (
      server, &QTcpServer::newConnection, server,
      [=] ()
        {
          while (auto *sock = server->nextPendingConnection ())
            {
              qInfo ("[%s:%d] client connected", name, port);

              QObject::connect (sock, &QTcpSocket::readyRead, sock,
                                [=] ()
                                  {
                                    QByteArray data = sock->readAll ();
                                    qInfo ("[%s:%d] echo %lld bytes", name,
                                           port, data.size ());
                                    sock->write (data);
                                  });

              QObject::connect (sock, &QTcpSocket::disconnected, sock,
                                [=] ()
                                  {
                                    qInfo ("[%s:%d] client disconnected", name,
                                           port);
                                    sock->deleteLater ();
                                  });
            }
        });

  if (!server->listen (QHostAddress::Any, port))
    {
      qCritical ("Failed to listen on %s port %d: %s", name, port,
                 qPrintable (server->errorString ()));
    }
  else
    {
      qInfo ("Listening on %s port %d", name, port);
    }

  return server;
}

int
main (int argc, char *argv[])
{
  QCoreApplication app (argc, argv);

  listenOn (9110, "Command", &app);
  listenOn (9111, "Imaging", &app);
  listenOn (9112, "Status", &app);

  return app.exec ();
}