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