double numUpdates=0;
double averageLatency=0;
+static bool doBinary = false;
+
static int lwsWrite(struct libwebsocket *lws, const char* strToWrite, int len)
{
- //std::unique_ptr<char[]> buffer(new char[LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING]);
-
- //char *buf = buffer.get() + LWS_SEND_BUFFER_PRE_PADDING;
- //strcpy(buf, strToWrite);
-
- return libwebsocket_write(lws, (unsigned char*)strToWrite, len, LWS_WRITE_BINARY);
-}
+ int retval = -1;
-static int lwsWrite(struct libwebsocket *lws, const std::string& strToWrite)
-{
- std::unique_ptr<char[]> buffer(new char[LWS_SEND_BUFFER_PRE_PADDING + strToWrite.length() + LWS_SEND_BUFFER_POST_PADDING]);
+ if(doBinary)
+ {
+ retval = libwebsocket_write(lws, (unsigned char*)strToWrite, len, LWS_WRITE_BINARY);
+ }
+ else
+ {
+ std::unique_ptr<char[]> buffer(new char[LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING]);
+ char *buf = buffer.get() + LWS_SEND_BUFFER_PRE_PADDING;
+ strcpy(buf, strToWrite);
- char *buf = buffer.get() + LWS_SEND_BUFFER_PRE_PADDING;
- strcpy(buf, strToWrite.c_str());
+ retval = libwebsocket_write(lws, (unsigned char*)buf, len, LWS_WRITE_TEXT);
+ }
- //NOTE: delete[] on buffer is not needed since std::unique_ptr<char[]> is used
- return libwebsocket_write(lws, (unsigned char*)buf, strToWrite.length(), LWS_WRITE_TEXT);
+ return retval;
}
-
static int callback_http_only(libwebsocket_context *context,struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason,void *user, void *in, size_t len);
static struct libwebsocket_protocols protocols[] = {
{
{
VehicleProperty::Property prop = queuedRequests.front();
queuedRequests.pop_front();
- if (ListPlusPlus<VehicleProperty::Property>(&activeRequests).contains(prop))
+ if (contains(activeRequests,prop))
{
return;
}
reply["data"] = prop.c_str();
reply["transactionid"] = "d293f670-f0b3-11e1-aff1-0800200c9a66";
- QByteArray replystr = QJsonDocument::fromVariant(reply).toBinaryData();
+ QByteArray replystr;
+
+ if(doBinary)
+ replystr = QJsonDocument::fromVariant(reply).toBinaryData();
+ else
+ replystr = QJsonDocument::fromVariant(reply).toJson();
lwsWrite(clientsocket, replystr.data(), replystr.length());
}
std::string ip;
int port;
configuration = config;
+
+ if(config.find("binaryProtocol") != config.end())
+ {
+ doBinary = config["binaryProtocol"] == "true";
+ }
+
for (map<string,string>::iterator i=configuration.begin();i!=configuration.end();i++)
{
DebugOut() << __SMALLFILE__ <<":"<< __LINE__ << "Incoming setting for WebSocketSource:" << (*i).first << ":" << (*i).second << "\n";
toSend["name"] = "getSupportedEventTypes";
toSend["transactionid"] = amb::createUuid().c_str();
- QByteArray data = QJsonDocument::fromVariant(toSend).toBinaryData();
+ QByteArray replystr;
+
+ if(doBinary)
+ replystr = QJsonDocument::fromVariant(toSend).toBinaryData();
+ else
+ replystr = QJsonDocument::fromVariant(toSend).toJson();
- lwsWrite(wsi,data.data(),data.length());
+ lwsWrite(wsi,replystr.data(),replystr.length());
break;
}
case LWS_CALLBACK_CLIENT_RECEIVE:
{
QByteArray d((char*)in,len);
- QJsonDocument doc = QJsonDocument::fromBinaryData(d);
+ QJsonDocument doc;
+
+ if(doBinary)
+ doc = QJsonDocument::fromBinaryData(d);
+ else
+ {
+ doc = QJsonDocument::fromJson(d);
+ DebugOut(7)<<d.data()<<endl;
+ }
+
+ if(doc.isNull())
+ {
+ DebugOut(DebugOut::Error)<<"Invalid message"<<endl;
+ break;
+ }
+
QVariantMap call = doc.toVariant().toMap();
string type = call["type"].toString().toStdString();
}
void WebSocketSource::setSupported(PropertyList list)
{
- DebugOut() <<__SMALLFILE__ << ":" << __LINE__ <<"SET SUPPORTED"<<endl;
+ DebugOut() <<__SMALLFILE__ << ":" << __LINE__ <<" "<< __FUNCTION__ <<endl;
m_supportedProperties = list;
- m_re->updateSupported(list,PropertyList());
+ m_re->updateSupported(list,PropertyList(),this);
}
WebSocketSource::WebSocketSource(AbstractRoutingEngine *re, map<string, string> config) : AbstractSource(re, config)
replyvar["data"] = data;
replyvar["transactionid"] = uuid.c_str();
- QByteArray replystr = QJsonDocument::fromVariant(replyvar).toBinaryData();
+ QByteArray replystr;
+
+ if(doBinary)
+ replystr = QJsonDocument::fromVariant(replyvar).toBinaryData();
+ else
+ replystr = QJsonDocument::fromVariant(replyvar).toJson();
lwsWrite(clientsocket, replystr.data(), replystr.length());
}
replyvar["data"] = properties;
- QByteArray replystr = QJsonDocument::fromVariant(replyvar).toBinaryData();
+ QByteArray replystr;
+
+ if(doBinary)
+ replystr = QJsonDocument::fromVariant(replyvar).toBinaryData();
+ else
+ replystr = QJsonDocument::fromVariant(replyvar).toJson();
lwsWrite(clientsocket, replystr.data(), replystr.length());
}
replyvar["data"] = data;
replyvar["transactionid"] = amb::createUuid().c_str();
- QByteArray replystr = QJsonDocument::fromVariant(replyvar).toBinaryData();
+ QByteArray replystr;
+
+ if(doBinary)
+ replystr = QJsonDocument::fromVariant(replyvar).toBinaryData();
+ else
+ replystr = QJsonDocument::fromVariant(replyvar).toJson();
lwsWrite(clientsocket, replystr.data(), replystr.length());