From: Michael Carpenter Date: Sat, 16 Mar 2013 17:23:48 +0000 (-0400) Subject: Changes for json-c instead of json-glib X-Git-Tag: submit/tizen/20130618.181635~32^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=996c437600d9babcc08d5a54e19e9b4b56cfe02f;p=profile%2Fivi%2Fautomotive-message-broker.git Changes for json-c instead of json-glib --- diff --git a/ambd/pluginloader.cpp b/ambd/pluginloader.cpp index c06d60b..11487e0 100644 --- a/ambd/pluginloader.cpp +++ b/ambd/pluginloader.cpp @@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #include #include +#include //#include @@ -36,16 +37,31 @@ using namespace std; * **********************************************/ +std::string get_file_contents(const char *filename) +{ + //FILE *in = fopen(filename,"r"); + + std::ifstream in(filename, std::ios::in); + std::string output; + std::string line; + while(in.good()) + { + getline(in,line); + output.append(line); + } + return output; +} PluginLoader::PluginLoader(string configFile, AbstractRoutingEngine* re, int argc, char** argv): f_create(NULL), routingEngine(re), mMainLoop(nullptr) { DebugOut()<<"Loading config file: "< #include #include -#include +//#include #include #include "debugout.h" #include "bluetooth.hpp" diff --git a/plugins/websocketsourceplugin/websocketsource.cpp b/plugins/websocketsourceplugin/websocketsource.cpp index a755061..c335f2f 100644 --- a/plugins/websocketsourceplugin/websocketsource.cpp +++ b/plugins/websocketsourceplugin/websocketsource.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +//#include #include #include #include "uuidhelper.h" @@ -235,266 +235,223 @@ static int callback_http_only(libwebsocket_context *context,struct libwebsocket DebugOut(2)<<"websocket source pre-json parse time: "<message<char_offset < len) // XXX shouldn't access internal fields { - DebugOut(0) << __SMALLFILE__ <<":"<< __LINE__ << "Error getting root node of json"< > pairdata; if (type == "valuechanged") { - json_reader_read_member(reader,"data"); - if (json_reader_is_object(reader)) + json_object *dataobject = json_object_object_get(rootobject,"data"); + + json_object *valueobject = json_object_object_get(rootobject,"value"); + json_object *timestampobject = json_object_object_get(rootobject,"timestamp"); + json_object *sequenceobject= json_object_object_get(rootobject,"sequence"); + + string value = string(json_object_get_string(valueobject)); + string timestamp = string(json_object_get_string(timestampobject)); + string sequence = string(json_object_get_string(sequenceobject)); + //printf("Value changed: %s, %s\n",name.c_str(),data.front().c_str()); + DebugOut() << __SMALLFILE__ <<":"<< __LINE__ << "Value changed:" << name << value << endl; + //Name should be a valid property + // routingEngine->updateProperty(VehicleProperty::VehicleSpeed, velocity); + //data.front() + try { - //Proper object. - json_reader_read_member(reader,"value"); - std::string value = json_reader_get_string_value(reader); - json_reader_end_member(reader); + AbstractPropertyType* type = VehicleProperty::getPropertyTypeForPropertyNameValue(name,value); + type->timestamp = boost::lexical_cast(timestamp); + type->sequence = boost::lexical_cast(sequence); + m_re->updateProperty(name, type, source->uuid()); + double currenttime = amb::currentTime(); + + /** This is now the latency between when something is available to read on the socket, until + * a property is about to be updated in AMB. This includes libwebsockets parsing and the + * JSON parsing in this section. + */ - json_reader_read_member(reader,"timestamp"); - std::string timestamp = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - json_reader_read_member(reader,"sequence"); - std::string sequence= json_reader_get_string_value(reader); - json_reader_end_member(reader); - //printf("Value changed: %s, %s\n",name.c_str(),data.front().c_str()); - DebugOut() << __SMALLFILE__ <<":"<< __LINE__ << "Value changed:" << name << value << endl; - //Name should be a valid property - // routingEngine->updateProperty(VehicleProperty::VehicleSpeed, velocity); - //data.front() - try - { - AbstractPropertyType* type = VehicleProperty::getPropertyTypeForPropertyNameValue(name,value); - type->timestamp = boost::lexical_cast(timestamp); - type->sequence = boost::lexical_cast(sequence); - m_re->updateProperty(name, type, source->uuid()); + DebugOut(2)<<"websocket parse latency: "<<(currenttime - oldTimestamp)*1000<<"ms"<timestamp)*1000<<"ms"<timestamp)*1000<<"ms"< 0) { - //printf("Exception %s\n",ex.what()); - DebugOut() << __SMALLFILE__ <<":"<< __LINE__ << "Exception:" << ex.what() << "\n"; } - //printf("Done\n"); - /*if (name == "get") - { - if (data.size() > 0) - { - } - }*/ - } + }*/ } else if (type == "methodReply") { + json_object *dataobject = json_object_object_get(rootobject,"data"); if (name == "getSupportedEventTypes") { - json_reader_read_member(reader,"data"); //printf("Got supported events!\n"); DebugOut() << __SMALLFILE__ <<":"<< __LINE__ << "Got getSupportedEventTypes request"<setSupported(props); //m_re->updateSupported(m_supportedProperties,PropertyList()); } else if (name == "getRanged") { - json_reader_read_member(reader,"data"); - if (json_reader_is_array(reader)) + std::list propertylist; + array_list *dataarray = json_object_get_array(dataobject); + for (int i=0;i propertylist; - for(int i=0; i < json_reader_count_elements(reader); i++) - { - json_reader_read_member(reader,"value"); - std::string value = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - json_reader_read_member(reader,"timestamp"); - std::string timestamp = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - json_reader_read_member(reader,"sequence"); - std::string sequence = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - AbstractPropertyType* type = VehicleProperty::getPropertyTypeForPropertyNameValue(source->uuidRangedReplyMap[id]->property,value); - propertylist.push_back(type); - - } - if (source->uuidRangedReplyMap.find(id) != source->uuidRangedReplyMap.end()) - { - source->uuidRangedReplyMap[id]->values = propertylist; - source->uuidRangedReplyMap[id]->success = true; - source->uuidRangedReplyMap[id]->completed(source->uuidRangedReplyMap[id]); - source->uuidRangedReplyMap.erase(id); - } - else - { - DebugOut() << "getRanged methodReply has been recieved, without a request being in!. This is likely due to a request coming in after the timeout has elapsed.\n"; - } - while (propertylist.size() > 0) - { + json_object *arrayobj = (json_object*)array_list_get_idx(dataarray,i); + json_object *valueobject = json_object_object_get(arrayobj,"value"); + json_object *timestampobject = json_object_object_get(arrayobj,"timestamp"); + json_object *sequenceobject = json_object_object_get(arrayobj,"sequence"); + std::string value = json_object_get_string(valueobject); + std::string timestamp = json_object_get_string(timestampobject); + std::string sequence = json_object_get_string(sequenceobject); + json_object_put(valueobject); + json_object_put(timestampobject); + json_object_put(sequenceobject); - AbstractPropertyType *type = propertylist.front(); - delete type; - propertylist.pop_front(); - } + AbstractPropertyType* type = VehicleProperty::getPropertyTypeForPropertyNameValue(source->uuidRangedReplyMap[id]->property,value); + propertylist.push_back(type); + //props.push_back(string(json_object_get_string(arrayobj))); + } + array_list_free(dataarray); + if (source->uuidRangedReplyMap.find(id) != source->uuidRangedReplyMap.end()) + { + source->uuidRangedReplyMap[id]->values = propertylist; + source->uuidRangedReplyMap[id]->success = true; + source->uuidRangedReplyMap[id]->completed(source->uuidRangedReplyMap[id]); + source->uuidRangedReplyMap.erase(id); + } + else + { + DebugOut() << "getRanged methodReply has been recieved, without a request being in!. This is likely due to a request coming in after the timeout has elapsed.\n"; + } + while (propertylist.size() > 0) + { + + AbstractPropertyType *type = propertylist.front(); + delete type; + propertylist.pop_front(); } - json_reader_end_member(reader); } else if (name == "get") { - json_reader_read_member(reader,"data"); - if (json_reader_is_object(reader)) + + DebugOut() << __SMALLFILE__ << ":" << __LINE__ << "Got \"GET\" event:" << pairdata.size()<uuidReplyMap.find(id) != source->uuidReplyMap.end()) { - DebugOut() << __SMALLFILE__ << ":" << __LINE__ << "Got \"GET\" event:" << pairdata.size()<timestamp = boost::lexical_cast(timestamp); + v->sequence = boost::lexical_cast(sequence); if (source->uuidReplyMap.find(id) != source->uuidReplyMap.end()) { - json_reader_read_member(reader,"property"); - std::string property = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - json_reader_read_member(reader,"value"); - std::string value = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - json_reader_read_member(reader,"timestamp"); - std::string timestamp = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - - json_reader_read_member(reader,"sequence"); - std::string sequence = json_reader_get_string_value(reader); - json_reader_end_member(reader); - - AbstractPropertyType* v = VehicleProperty::getPropertyTypeForPropertyNameValue(property,value); - v->timestamp = boost::lexical_cast(timestamp); - v->sequence = boost::lexical_cast(sequence); - if (source->uuidReplyMap.find(id) != source->uuidReplyMap.end()) - { - source->uuidReplyMap[id]->value = v; - source->uuidReplyMap[id]->success = true; - source->uuidReplyMap[id]->completed(source->uuidReplyMap[id]); - source->uuidReplyMap.erase(id); - } - else - { - DebugOut() << "get methodReply has been recieved, without a request being in!. This is likely due to a request coming in after the timeout has elapsed.\n"; - } - - delete v; + source->uuidReplyMap[id]->value = v; + source->uuidReplyMap[id]->success = true; + source->uuidReplyMap[id]->completed(source->uuidReplyMap[id]); + source->uuidReplyMap.erase(id); } + else + { + DebugOut() << "get methodReply has been recieved, without a request being in!. This is likely due to a request coming in after the timeout has elapsed.\n"; + } + delete v; } else { DebugOut() << __SMALLFILE__ << ":" << __LINE__ << "GET Method Reply INVALID! Multiple properties detected, only single are supported!!!" << "\n"; } - json_reader_end_member(reader); + //data will contain a property/value map. } + json_object_put(dataobject); } - + json_object_put(rootobject); ///TODO: this will probably explode: //mlc: I agree with Kevron here, it does explode. //if(error) g_error_free(error); - g_object_unref(reader); - g_object_unref(parser); - + break; - } } case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED: {