...
Code Block |
---|
#ifndef TCP_CLIENT_H
#define TCP_CLIENT_H
#include <QxtNetwork/qxtrpcpeer.h>
class TCPClient : public QObject
{
Q_OBJECT
public:
TCPClient();
~TCPClient();
private:
QxtRPCPeer *client;
/// Serverin IP
QString hostIp;
/// Serverin portti
int hostPort;
/// Ollaanko yhteydessä vai ei
bool connected;
signals:
/// Signaalin (viestin) lähettäminen serverille
void sendSignal(QVector<QString>);
/// Signaali, kun serveriin yhdistäminen onnistuu
void connectedToServer();
/// Signaali, kun serveriin yhdistäminen epäonnistuu
void serverError();
private slots:
/// Slotti, joka yhdistää käyttäjän serveriin
void connectToServer();
/// Slotti, joka yhdistää käyttäjän serveriin (annettuun ip-osoitteeseen (QString)
/// ja annettuun porttiin (int))
void connectToServer(QString, int);
/// Yhteyden katkaiseminen serveriin
void disconnectFromServer();
/// Viestin lähetys, aktivoi sendSignal()-signaalin
void sendData(QVector<QString>);
/// Viestin vastaanotto serveriltä (esim. käyttöliittymän päivittäminen uusilla tiedoilla)
void receiveData(QVector<QString>);
/// Ilmoitus mikäli yhteyden luominen onnistui (ei pakollinen)
void connectionEstablished();
/// Ilmoitus mikäli yhteyden muodostamisessa ilmenee ongelmia (ei pakollinen)
void connectionError();
};
#endif // TCP_CLIENT_H
|
...
Code Block |
---|
#include "tcp_client.h" TCPClient::TCPClient() { /// Muodostetaan QxtRPCPeer-luokasta olio client = new QxtRPCPeer(); /// Oletus IP, johon yhdistetään mikäli käyttäjä ei syötä IP:tä hostIp = "127.0.0.1"; /// Oletusportti johon yhdistetään hostPort = 45123; /// Ollaanko yhteydessä? Oletuksena false connected = false; /// Jotta signaaleihin voidaan yhdistää QVector-tyyppisiä parametreja, on ne määrittettävä seuraavasti qRegisterMetaTypeStreamOperators< QVector<QString> >("QVector<QString>"); /// Liitetään signaalit slotteihin connect(this->client, SIGNAL(connectedToServer()), this, SLOT(connectionEstablished())); connect(this->client, SIGNAL(serverError(QAbstractSocket::SocketError)), this, SLOT(connectionError())); /// attachSignal-funktio kapseloi signaalin muotoon, jossa se voidaan lähettää verkkoyhteyden yli /// Funktion QString-parametri on tunniste, jolla signaali tunnistetaan serverin puolella ja /// pystytään yhdistämään tiettyyn slottiin. client->attachSignal(this, SIGNAL(sendSignal(QVector<QString>)), QString("signal1")); } TCPClient::~TCPClient() { /// Poistetaan muodostettu olio muistin säästämiseksi delete client; } /// Yhdistetään serveriin oletusarvoilla tai käyttäjän antamilla arvoilla void TCPClient::connectToServer() { /// Connect metodi muodostaa connectedToServer- tai serverError-signaalin client->connect(this->hostIp, this->hostPort); } void TCPClient::connectToServer(QString ip, int port) { client->connect(ip, port); } void TCPClient::disconnectFromServer() { client->disconnectServer(); connected = false; } void TCPClient::sendData(QVector<QString> data) { emit sendSignal(data); } void TCPClient::receiveData(QVector<QString>) { qDebug() << "message from server"; } void TCPClient::connectionEstablished() { connected = true; qDebug() << "connected"; } void TCPClient::connectionError() { qDebug() << "connection error"; } |
...