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 <vector>
#include "socket.h"
#include "discover.h"
void readDiscoverDatagrams(QUdpSocket *udpSocketGet, std::vector<Socket> &sockets);
void listSockets(std::vector<Socket> 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<Socket> &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<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);
}
}
case 'q':
cont = false;
break;
case 's':
std::cin >> number;
case 't':
sockets[number-1].toggle();
}
}
return 0;
}
void listSockets(std::vector<Socket> const &sockets)

View File

@ -18,6 +18,7 @@
#include "socket.h"
#include <algorithm>
#include <QThread>
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)

View File

@ -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;