Improve output.
This commit is contained in:
parent
17a2b1325b
commit
9e327cee32
54
main.cpp
54
main.cpp
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
2
socket.h
2
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;
|
||||
|
|
Loading…
Reference in New Issue