From 9e327cee321025bd372eda7e0f929e427d910f6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 15 Jan 2015 19:38:25 +0000 Subject: [PATCH] Improve output. --- main.cpp | 54 +++++++++++++++--------------------------------------- socket.cpp | 3 +++ socket.h | 2 +- 3 files changed, 19 insertions(+), 40 deletions(-) diff --git a/main.cpp b/main.cpp index b106ffa..97d4e2e 100644 --- a/main.cpp +++ b/main.cpp @@ -18,13 +18,11 @@ #include #include -#include "socket.h" +#include "discover.h" void readDiscoverDatagrams(QUdpSocket *udpSocketGet, std::vector &sockets); void listSockets(std::vector const &sockets); -QByteArray discover = QByteArray::fromHex("68 64 00 06 71 61"); - int main(int argc, char *argv[]) { QUdpSocket *udpSocketSend = new QUdpSocket(); @@ -42,46 +40,24 @@ int main(int argc, char *argv[]) listSockets(sockets); char command; - std::cin >> command; - switch(command) + unsigned int number = 1; + bool cont=true; + while(cont) { - case 'q': - break; - case 't': - sockets.begin()->toggle(); - } - return 0; -} - -void readDiscoverDatagrams(QUdpSocket *udpSocketGet, std::vector &sockets) -{ - while (udpSocketGet->waitForReadyRead(1000)) // 1s - { - while (udpSocketGet->hasPendingDatagrams()) + std::cout << "s - pick another socket (default is 1)\nt - toggle power state\nq - quit" << std::endl; + std::cin >> command; + switch(command) { - QByteArray datagramGet; - datagramGet.resize(udpSocketGet->pendingDatagramSize()); - QHostAddress sender; - quint16 senderPort; - - udpSocketGet->readDatagram(datagramGet.data(), datagramGet.size(), &sender, &senderPort); - - if (datagramGet != discover && datagramGet.left(2) == QByteArray::fromHex("68 64")) - { - bool duplicate = false; - for(std::vector::const_iterator i = sockets.begin() ; i != sockets.end(); ++i) - { - if (i->ip == sender) - duplicate = true; - } - if(!duplicate) - { - const Socket socket(sender, datagramGet); - sockets.push_back(socket); - } - } + case 'q': + cont = false; + break; + case 's': + std::cin >> number; + case 't': + sockets[number-1].toggle(); } } + return 0; } void listSockets(std::vector const &sockets) diff --git a/socket.cpp b/socket.cpp index ff7c154..b4fce55 100644 --- a/socket.cpp +++ b/socket.cpp @@ -18,6 +18,7 @@ #include "socket.h" #include +#include Socket::Socket(QHostAddress IPaddress, QByteArray reply) { @@ -37,7 +38,9 @@ Socket::Socket(QHostAddress IPaddress, QByteArray reply) bool Socket::toggle() { sendDatagram(datagram[Subscribe]); // TODO: process replies + QThread::msleep(100); // wait a little to make toggle reliable sendDatagram(datagram[powered ? PowerOff : PowerOn]); + powered = !powered; } void Socket::sendDatagram(QByteArray datagram) diff --git a/socket.h b/socket.h index 30a414b..1122547 100644 --- a/socket.h +++ b/socket.h @@ -28,11 +28,11 @@ public: QHostAddress ip; QByteArray mac; bool powered; - enum {Subscribe, PowerOff, PowerOn}; private: void sendDatagram(QByteArray datagram); + enum {Subscribe, PowerOff, PowerOn}; QByteArray datagram[3]; QByteArray rmac; // Reveresed mac QUdpSocket *udpSocketSend;