Improve output.

This commit is contained in:
Andrius Štikonas 2015-01-15 19:38:25 +00:00
parent 17a2b1325b
commit 9e327cee32
3 changed files with 19 additions and 40 deletions

View File

@ -18,13 +18,11 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "socket.h" #include "discover.h"
void readDiscoverDatagrams(QUdpSocket *udpSocketGet, std::vector<Socket> &sockets); void readDiscoverDatagrams(QUdpSocket *udpSocketGet, std::vector<Socket> &sockets);
void listSockets(std::vector<Socket> const &sockets); void listSockets(std::vector<Socket> const &sockets);
QByteArray discover = QByteArray::fromHex("68 64 00 06 71 61");
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QUdpSocket *udpSocketSend = new QUdpSocket(); QUdpSocket *udpSocketSend = new QUdpSocket();
@ -42,46 +40,24 @@ int main(int argc, char *argv[])
listSockets(sockets); listSockets(sockets);
char command; char command;
std::cin >> command; unsigned int number = 1;
switch(command) bool cont=true;
while(cont)
{ {
case 'q': std::cout << "s - pick another socket (default is 1)\nt - toggle power state\nq - quit" << std::endl;
break; std::cin >> command;
case 't': switch(command)
sockets.begin()->toggle();
}
return 0;
}
void readDiscoverDatagrams(QUdpSocket *udpSocketGet, std::vector<Socket> &sockets)
{
while (udpSocketGet->waitForReadyRead(1000)) // 1s
{
while (udpSocketGet->hasPendingDatagrams())
{ {
QByteArray datagramGet; case 'q':
datagramGet.resize(udpSocketGet->pendingDatagramSize()); cont = false;
QHostAddress sender; break;
quint16 senderPort; case 's':
std::cin >> number;
udpSocketGet->readDatagram(datagramGet.data(), datagramGet.size(), &sender, &senderPort); case 't':
sockets[number-1].toggle();
if (datagramGet != discover && datagramGet.left(2) == QByteArray::fromHex("68 64"))
{
bool duplicate = false;
for(std::vector<Socket>::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);
}
}
} }
} }
return 0;
} }
void listSockets(std::vector<Socket> const &sockets) void listSockets(std::vector<Socket> const &sockets)

View File

@ -18,6 +18,7 @@
#include "socket.h" #include "socket.h"
#include <algorithm> #include <algorithm>
#include <QThread>
Socket::Socket(QHostAddress IPaddress, QByteArray reply) Socket::Socket(QHostAddress IPaddress, QByteArray reply)
{ {
@ -37,7 +38,9 @@ Socket::Socket(QHostAddress IPaddress, QByteArray reply)
bool Socket::toggle() bool Socket::toggle()
{ {
sendDatagram(datagram[Subscribe]); // TODO: process replies sendDatagram(datagram[Subscribe]); // TODO: process replies
QThread::msleep(100); // wait a little to make toggle reliable
sendDatagram(datagram[powered ? PowerOff : PowerOn]); sendDatagram(datagram[powered ? PowerOff : PowerOn]);
powered = !powered;
} }
void Socket::sendDatagram(QByteArray datagram) void Socket::sendDatagram(QByteArray datagram)

View File

@ -28,11 +28,11 @@ public:
QHostAddress ip; QHostAddress ip;
QByteArray mac; QByteArray mac;
bool powered; bool powered;
enum {Subscribe, PowerOff, PowerOn};
private: private:
void sendDatagram(QByteArray datagram); void sendDatagram(QByteArray datagram);
enum {Subscribe, PowerOff, PowerOn};
QByteArray datagram[3]; QByteArray datagram[3];
QByteArray rmac; // Reveresed mac QByteArray rmac; // Reveresed mac
QUdpSocket *udpSocketSend; QUdpSocket *udpSocketSend;