implement json forwarder

Former-commit-id: 5519118304bd5690e6b512481347579339e78ac9
This commit is contained in:
redpanther 2016-02-15 20:53:03 +01:00
parent b01b5eb005
commit df91527557
5 changed files with 45 additions and 14 deletions

View File

@ -9,12 +9,19 @@
// QT includes // QT includes
#include <QList> #include <QList>
#include <QStringList> #include <QStringList>
#include <QHostAddress>
// Utils includes // Utils includes
#include <utils/ColorRgb.h> #include <utils/ColorRgb.h>
class MessageForwarder class MessageForwarder
{ {
public: public:
struct JsonSlaveAddress {
QHostAddress addr;
quint16 port = 19444;
};
MessageForwarder(); MessageForwarder();
~MessageForwarder(); ~MessageForwarder();
@ -23,9 +30,9 @@ public:
void sendMessage(); void sendMessage();
QStringList getProtoSlaves(); QStringList getProtoSlaves();
QList<MessageForwarder::JsonSlaveAddress> getJsonSlaves();
private: private:
bool _running; QStringList _protoSlaves;
QList<MessageForwarder::JsonSlaveAddress> _jsonSlaves;
QStringList _protoSlaves;
}; };

View File

@ -275,13 +275,19 @@ MessageForwarder * Hyperion::createMessageForwarder(const Json::Value & forwarde
if ( ! forwarderConfig["json"].isNull() && forwarderConfig["json"].isArray() ) if ( ! forwarderConfig["json"].isNull() && forwarderConfig["json"].isArray() )
{ {
for (const Json::Value& addr : forwarderConfig["json"]) for (const Json::Value& addr : forwarderConfig["json"])
{
std::cout << "Json forward to " << addr.asString() << std::endl;
forwarder->addJsonSlave(addr.asString()); forwarder->addJsonSlave(addr.asString());
}
} }
if ( ! forwarderConfig["proto"].isNull() && forwarderConfig["proto"].isArray() ) if ( ! forwarderConfig["proto"].isNull() && forwarderConfig["proto"].isArray() )
{ {
for (const Json::Value& addr : forwarderConfig["proto"]) for (const Json::Value& addr : forwarderConfig["proto"])
{
std::cout << "Proto forward to " << addr.asString() << std::endl;
forwarder->addProtoSlave(addr.asString()); forwarder->addProtoSlave(addr.asString());
}
} }
} }

View File

@ -1,8 +1,7 @@
#include <hyperion/MessageForwarder.h> #include <hyperion/MessageForwarder.h>
MessageForwarder::MessageForwarder() : MessageForwarder::MessageForwarder()
_running(false)
{ {
} }
@ -13,7 +12,19 @@ MessageForwarder::~MessageForwarder()
void MessageForwarder::addJsonSlave(std::string slave) void MessageForwarder::addJsonSlave(std::string slave)
{ {
std::cout << slave << std::endl; QStringList parts = QString(slave.c_str()).split(":");
if (parts.size() != 2)
throw std::runtime_error(QString("Wrong address: unable to parse address (%1)").arg(slave.c_str()).toStdString());
bool ok;
quint16 port = parts[1].toUShort(&ok);
if (!ok)
throw std::runtime_error(QString("Wrong address: Unable to parse the port number (%1)").arg(parts[1]).toStdString());
JsonSlaveAddress c;
c.addr = QHostAddress(parts[0]);
c.port = port;
_jsonSlaves << c;
} }
void MessageForwarder::addProtoSlave(std::string slave) void MessageForwarder::addProtoSlave(std::string slave)
@ -23,12 +34,14 @@ void MessageForwarder::addProtoSlave(std::string slave)
void MessageForwarder::sendMessage() void MessageForwarder::sendMessage()
{ {
if ( ! _running )
return;
} }
QStringList MessageForwarder::getProtoSlaves() QStringList MessageForwarder::getProtoSlaves()
{ {
return _protoSlaves; return _protoSlaves;
} }
QList<MessageForwarder::JsonSlaveAddress> MessageForwarder::getJsonSlaves()
{
return _jsonSlaves;
}

View File

@ -16,6 +16,7 @@
// hyperion util includes // hyperion util includes
#include <hyperion/ImageProcessorFactory.h> #include <hyperion/ImageProcessorFactory.h>
#include <hyperion/ImageProcessor.h> #include <hyperion/ImageProcessor.h>
#include <hyperion/MessageForwarder.h>
#include <hyperion/ColorTransform.h> #include <hyperion/ColorTransform.h>
#include <utils/ColorRgb.h> #include <utils/ColorRgb.h>
@ -254,11 +255,16 @@ void JsonClientConnection::handleMessage(const std::string &messageString)
void JsonClientConnection::forwardJsonMessage(const Json::Value & message) void JsonClientConnection::forwardJsonMessage(const Json::Value & message)
{ {
QTcpSocket client; QTcpSocket client;
client.connectToHost(QHostAddress("127.0.0.1"), 19444); QList<MessageForwarder::JsonSlaveAddress> list = _hyperion->getForwarder()->getJsonSlaves();
if ( client.waitForConnected(500) )
for ( int i=0; i<list.size(); i++ )
{ {
sendMessage(message,&client); client.connectToHost(list.at(i).addr, list.at(i).port);
client.close(); if ( client.waitForConnected(500) )
{
sendMessage(message,&client);
client.close();
}
} }
} }

View File

@ -18,7 +18,6 @@ ProtoServer::ProtoServer(Hyperion *hyperion, uint16_t port) :
QStringList slaves = forwarder->getProtoSlaves(); QStringList slaves = forwarder->getProtoSlaves();
for (int i = 0; i < slaves.size(); ++i) { for (int i = 0; i < slaves.size(); ++i) {
std::cout << "Proto forward to " << slaves.at(i).toLocal8Bit().constData() << std::endl;
ProtoConnection* p = new ProtoConnection(slaves.at(i).toLocal8Bit().constData()); ProtoConnection* p = new ProtoConnection(slaves.at(i).toLocal8Bit().constData());
p->setSkipReply(true); p->setSkipReply(true);
_proxy_connections << p; _proxy_connections << p;