Start implementing support for changing the socket name and password.

This commit is contained in:
Andrius Štikonas 2015-01-31 15:28:34 +00:00
parent e17074384a
commit 06aeb187d5
3 changed files with 121 additions and 57 deletions

View File

@ -29,7 +29,7 @@ int main(int argc, char *argv[])
QUdpSocket *udpSocketGet = new QUdpSocket(); QUdpSocket *udpSocketGet = new QUdpSocket();
udpSocketSend->connectToHost(QHostAddress::Broadcast, 10000); udpSocketSend->connectToHost(QHostAddress::Broadcast, 10000);
udpSocketGet->bind(QHostAddress::Any, 10000); udpSocketGet->bind(QHostAddress::Any, 10000, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
udpSocketSend->write(discover); udpSocketSend->write(discover);
udpSocketSend->disconnectFromHost(); udpSocketSend->disconnectFromHost();
@ -45,13 +45,19 @@ int main(int argc, char *argv[])
while (cont) while (cont)
{ {
listSockets(sockets); listSockets(sockets);
std::cout << "d - show table data\ns - pick another socket (default is 1)\np - toggle power state\nq - quit" << std::endl; std::cout << "d - update table data\nn - change socket name\ns - pick another socket (default is 1)\np - toggle power state\nq - quit" << std::endl;
std::cin >> command; std::cin >> command;
switch (command) switch (command)
{ {
case 'd': case 'd':
sockets[number].tableData(); sockets[number].tableData();
break; break;
case 'n':
// std::cout << "Enter new name (max 16 characters)" << std::endl;
// string name;
// std::cin >> name;
sockets[number].changeSocketName();
break;
case 'p': case 'p':
sockets[number].toggle(); sockets[number].toggle();
break; break;
@ -73,6 +79,9 @@ void listSockets(std::vector<Socket> const &sockets)
{ {
for (std::vector<Socket>::const_iterator i = sockets.begin() ; i != sockets.end(); ++i) for (std::vector<Socket>::const_iterator i = sockets.begin() ; i != sockets.end(); ++i)
{ {
std::cout << "___________________________________________________________________________\n" << std::endl;
std::cout << "IP Address: " << i->ip.toString().toStdString() << "\t MAC Address: " << i->mac.toHex().toStdString() << "\t Power: " << (i->powered ? "On" : "Off") << std::endl; std::cout << "IP Address: " << i->ip.toString().toStdString() << "\t MAC Address: " << i->mac.toHex().toStdString() << "\t Power: " << (i->powered ? "On" : "Off") << std::endl;
std::cout << "Socket Name: " << i->name.toStdString() << "\t Remote Password: " << i->remotePassword.toStdString() << std::endl;
} }
std::cout << "___________________________________________________________________________\n" << std::endl;
} }

File diff suppressed because one or more lines are too long

View File

@ -25,21 +25,25 @@ public:
Socket(QHostAddress, QByteArray); Socket(QHostAddress, QByteArray);
void toggle(); void toggle();
void tableData(); void tableData();
void changeSocketName(/*QString name*/);
bool parseReply(QByteArray);
QHostAddress ip; QHostAddress ip, localIP;
QByteArray mac; QByteArray mac;
bool powered; bool powered;
QString name, remotePassword; QString name, remotePassword;
private: private:
enum Datagram {Subscribe, PowerOff, PowerOn, TableData, SocketData, TimingData, MaxCommands}; enum Datagram {Subscribe, PowerOff, PowerOn, TableData, SocketData, TimingData, WriteSocketData, MaxCommands};
void sendDatagram(Datagram); void sendDatagram(Datagram);
void readDatagrams(QUdpSocket *udpSocketGet, Datagram d); void readDatagrams(QUdpSocket *udpSocketGet);
QByteArray fromIP(unsigned char, unsigned char, unsigned char, unsigned char);
QByteArray commandID[MaxCommands]; QByteArray commandID[MaxCommands];
QByteArray datagram[MaxCommands]; QByteArray datagram[MaxCommands];
QByteArray rmac; // Reveresed mac QByteArray rmac; // Reveresed mac
QByteArray socketTableNumber, socketTableVersion, timingTableNumber, timingTableVersion;
const QByteArray magicKey = QByteArray::fromHex("68 64"); // recognize datagrams from the socket const QByteArray magicKey = QByteArray::fromHex("68 64"); // recognize datagrams from the socket
const QByteArray twenties = QByteArray::fromHex("20 20 20 20 20 20"); // mac address padding const QByteArray twenties = QByteArray::fromHex("20 20 20 20 20 20"); // mac address padding