My Driver01 sends the peckage to the Server every second:
void Driver01::timeOut()
{
buffer.append("Driver");
buffer.append(" ");
buffer.append("01");
buffer.append(" ");
buffer.
append(QString::number(value
));
if(socket->isWritable()) {
socket->write(buffer);
}
value++;
qDebug() << "Driver01" << buffer;
}
void Driver01::timeOut()
{
QByteArray buffer;
buffer.append("Driver");
buffer.append(" ");
buffer.append("01");
buffer.append(" ");
buffer.append(QString::number(value));
if(socket->isWritable()) {
socket->write(buffer);
}
value++;
qDebug() << "Driver01" << buffer;
}
To copy to clipboard, switch view to plain text mode
The Server receives the data. I want to send this data to the Viewer (Viewer is the GUI application).
Server
#include <QCoreApplication>
#include "server.h"
int main(int argc, char *argv[])
{
Server server;
server.startServer();
return a.exec();
}
#include <QCoreApplication>
#include "server.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Server server;
server.startServer();
return a.exec();
}
To copy to clipboard, switch view to plain text mode
server.cpp
#include "server.h"
#include "client.h"
#include <QDebug>
{
}
void Server::startServer()
{
qDebug() << "Server started";
}
else {
qDebug() << "Server could not start";
}
}
void Server::incomingConnection(int socketDescriptor) {
Client *client = new Client(this);
client->setSocket(socketDescriptor);
}
#include "server.h"
#include "client.h"
#include <QDebug>
Server::Server(QObject *parent) :
QTcpServer(parent)
{
}
void Server::startServer()
{
if (this->listen(QHostAddress::Any, 1234)) {
qDebug() << "Server started";
}
else {
qDebug() << "Server could not start";
}
}
void Server::incomingConnection(int socketDescriptor) {
Client *client = new Client(this);
client->setSocket(socketDescriptor);
}
To copy to clipboard, switch view to plain text mode
client.cpp
#include "client.h"
#include "viewertask.h"
#include "drivertask.h"
#include <QThreadPool>
#include <QDebug>
#include <QStringList>
{
QThreadPool::globalInstance()->setMaxThreadCount(11);
}
void Client::setSocket(int socketDescriptor)
{
connect(socket, SIGNAL(connected()), this, SLOT(connected()));
connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
socket->setSocketDescriptor(socketDescriptor);
qDebug() << socketDescriptor << " client connected";
}
void Client::connected() {
qDebug() << "Client connected event";
}
void Client::disconnected() {
qDebug() << "Client disconnected event";
}
void Client::readyRead() {
buffer = socket->readAll();
if (package.isEmpty()) {
return;
}
// Time Consumer
if (name == "Driver") {
DriverTask *driverTask = new DriverTask(elements);
driverTask->setAutoDelete(true);
connect(driverTask,
SIGNAL(result
(QString,
int,
int)),
this,
SLOT(taskDriverResult
(QString,
int,
int)), Qt
::QueuedConnection);
QThreadPool::globalInstance()->start(driverTask);
}
else {
ViewerTask *viewerTask = new ViewerTask;
viewerTask->setAutoDelete(true);
connect(viewerTask, SIGNAL(result(int)), this, SLOT(taskResult(int)), Qt::QueuedConnection);
QThreadPool::globalInstance()->start(viewerTask);
}
}
void Client::taskResult(int number)
{
buffer.append("- - - - - - - - - -");
//buffer.append(QString::number(number));
socket->write(buffer);
}
void Client
::taskDriverResult(QString name,
int id,
int number
) {
qDebug
() << name <<
" " <<
QString::number(id
) <<
" " <<
QString::number(number
);
// QByteArray buffer;
// buffer.append(name);
// buffer.append("");
// buffer.append(QString::number(id));
// buffer.append("");
// buffer.append(QString::number(number));
}
#include "client.h"
#include "viewertask.h"
#include "drivertask.h"
#include <QThreadPool>
#include <QDebug>
#include <QStringList>
Client::Client(QObject *parent) :
QObject(parent)
{
QThreadPool::globalInstance()->setMaxThreadCount(11);
}
void Client::setSocket(int socketDescriptor)
{
socket = new QTcpSocket(this);
connect(socket, SIGNAL(connected()), this, SLOT(connected()));
connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
socket->setSocketDescriptor(socketDescriptor);
qDebug() << socketDescriptor << " client connected";
}
void Client::connected() {
qDebug() << "Client connected event";
}
void Client::disconnected() {
qDebug() << "Client disconnected event";
}
void Client::readyRead() {
QByteArray buffer;
buffer = socket->readAll();
QString package(buffer);
if (package.isEmpty()) {
return;
}
QStringList elements = package.split(" ", QString::SkipEmptyParts);
QString name = elements[0];
// Time Consumer
if (name == "Driver") {
DriverTask *driverTask = new DriverTask(elements);
driverTask->setAutoDelete(true);
connect(driverTask, SIGNAL(result(QString, int, int)), this, SLOT(taskDriverResult(QString, int, int)), Qt::QueuedConnection);
QThreadPool::globalInstance()->start(driverTask);
}
else {
ViewerTask *viewerTask = new ViewerTask;
viewerTask->setAutoDelete(true);
connect(viewerTask, SIGNAL(result(int)), this, SLOT(taskResult(int)), Qt::QueuedConnection);
QThreadPool::globalInstance()->start(viewerTask);
}
}
void Client::taskResult(int number)
{
QByteArray buffer;
buffer.append("- - - - - - - - - -");
//buffer.append(QString::number(number));
socket->write(buffer);
}
void Client::taskDriverResult(QString name, int id, int number)
{
qDebug() << name << " " << QString::number(id) << " " << QString::number(number);
// QByteArray buffer;
// buffer.append(name);
// buffer.append("");
// buffer.append(QString::number(id));
// buffer.append("");
// buffer.append(QString::number(number));
}
To copy to clipboard, switch view to plain text mode
drivertask.cpp
#include "drivertask.h"
#include <QDebug>
{
this->name = elements[0];
this->id = elements[1].toInt();
this->value = elements[2].toInt();
}
void DriverTask::run()
{
emit result(name, id, value);
}
#include "drivertask.h"
#include <QDebug>
DriverTask::DriverTask(QStringList elements, QObject *parent) :
QObject(parent)
{
this->name = elements[0];
this->id = elements[1].toInt();
this->value = elements[2].toInt();
}
void DriverTask::run()
{
emit result(name, id, value);
}
To copy to clipboard, switch view to plain text mode
viewertask.cpp
#include "viewertask.h"
#include <QDebug>
ViewerTask::ViewerTask()
{
}
void ViewerTask::run()
{
// time consumer
qDebug() << "Viewer Task Start";
int iNumber = 0;
for (int i = 0; i < 100; i++) {
iNumber +=i;
}
qDebug() << "Viewer Task Done";
emit result(iNumber);
}
#include "viewertask.h"
#include <QDebug>
ViewerTask::ViewerTask()
{
}
void ViewerTask::run()
{
// time consumer
qDebug() << "Viewer Task Start";
int iNumber = 0;
for (int i = 0; i < 100; i++) {
iNumber +=i;
}
qDebug() << "Viewer Task Done";
emit result(iNumber);
}
To copy to clipboard, switch view to plain text mode
Bookmarks