From e9db668692569d5f2921d0c2440bd1afe8ba7dd1 Mon Sep 17 00:00:00 2001 From: Ramin Yaghoubzadeh <ryaghoubzadeh@uni-bielefeld.de> Date: Mon, 23 Feb 2015 23:26:09 +0100 Subject: [PATCH] C++: legacy-mode IUs working Sniffer: only display quotes for string-type payload values Injector: using unicode() and catching errors --- ipaacalib/cpp/include/ipaaca/ipaaca-ius.h | 8 +++++-- ipaacalib/cpp/src/ipaaca-internal.cc | 1 + ipaacalib/cpp/src/ipaaca-ius.cc | 12 ++++++++-- ipaacalib/cpp/src/ipaaca-json.cc | 28 ++++++++++++++++++++++- ipaacatools/scripts/ipaaca-iu-injector | 5 +++- ipaacatools/scripts/ipaaca-iu-sniffer | 9 +++++--- 6 files changed, 54 insertions(+), 9 deletions(-) diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h b/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h index eecdcfe..5affdde 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-ius.h @@ -127,7 +127,9 @@ IPAACA_HEADER_EXPORT class IU: public IUInterface {//{{{ IPAACA_HEADER_EXPORT inline ~IU() { //IPAACA_IMPLEMENT_ME } - IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, IUAccessMode access_mode=IU_ACCESS_PUSH, bool read_only=false, const std::string& payload_type="JSON" ); + [[deprecated("Please use the new argument order: category, payload_type, read_only")]] + IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, IUAccessMode access_mode, bool read_only=false, const std::string& payload_type="JSON" ); + IPAACA_HEADER_EXPORT static boost::shared_ptr<IU> create(const std::string& category, const std::string& payload_type="JSON", bool read_only=false); IPAACA_HEADER_EXPORT inline Payload& payload() _IPAACA_OVERRIDE_ { return _payload; } IPAACA_HEADER_EXPORT inline const Payload& const_payload() const _IPAACA_OVERRIDE_ { return _payload; } IPAACA_HEADER_EXPORT void commit() _IPAACA_OVERRIDE_; @@ -156,7 +158,9 @@ IPAACA_HEADER_EXPORT class Message: public IU {//{{{ IPAACA_HEADER_EXPORT inline ~Message() { //IPAACA_IMPLEMENT_ME } - IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, IUAccessMode access_mode=IU_ACCESS_MESSAGE, bool read_only=true, const std::string& payload_type="JSON" ); + [[deprecated("Please use the new argument order: category, payload_type")]] + IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, IUAccessMode access_mode, bool read_only=true, const std::string& payload_type="JSON" ); + IPAACA_HEADER_EXPORT static boost::shared_ptr<Message> create(const std::string& category, const std::string& payload_type="JSON"); protected: IPAACA_HEADER_EXPORT void _modify_links(bool is_delta, const LinkMap& new_links, const LinkMap& links_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; IPAACA_HEADER_EXPORT void _modify_payload(bool is_delta, const std::map<std::string, PayloadDocumentEntry::ptr>& new_items, const std::vector<std::string>& keys_to_remove, const std::string& writer_name = "") _IPAACA_OVERRIDE_; diff --git a/ipaacalib/cpp/src/ipaaca-internal.cc b/ipaacalib/cpp/src/ipaaca-internal.cc index d317850..6000baa 100644 --- a/ipaacalib/cpp/src/ipaaca-internal.cc +++ b/ipaacalib/cpp/src/ipaaca-internal.cc @@ -173,6 +173,7 @@ IPAACA_EXPORT std::string IUConverter::serialize(const AnnotatedData& data, std: item->set_key(kv.first); //item->set_value( kv.second->to_json_string_representation() ); //item->set_type("JSON"); + IPAACA_DEBUG("Payload type: " << obj->_payload_type) if (obj->_payload_type=="JSON") { item->set_value( kv.second->to_json_string_representation() ); item->set_type("JSON"); diff --git a/ipaacalib/cpp/src/ipaaca-ius.cc b/ipaacalib/cpp/src/ipaaca-ius.cc index fa28b85..9e9acf2 100644 --- a/ipaacalib/cpp/src/ipaaca-ius.cc +++ b/ipaacalib/cpp/src/ipaaca-ius.cc @@ -43,7 +43,11 @@ using namespace rsb::patterns; // IU//{{{ IPAACA_EXPORT IU::ptr IU::create(const std::string& category, IUAccessMode access_mode, bool read_only, const std::string& payload_type) { - IU::ptr iu = IU::ptr(new IU(category, access_mode, read_only, payload_type)); /* params */ //)); + return IU::create(category, payload_type, read_only); +} +IPAACA_EXPORT IU::ptr IU::create(const std::string& category, const std::string& payload_type, bool read_only) +{ + IU::ptr iu = IU::ptr(new IU(category, IU_ACCESS_PUSH, read_only, payload_type)); /* params */ //)); iu->_payload.initialize(iu); return iu; } @@ -134,7 +138,11 @@ IPAACA_EXPORT void IU::_internal_commit(const std::string& writer_name) // Message//{{{ Message::ptr Message::create(const std::string& category, IUAccessMode access_mode, bool read_only, const std::string& payload_type) { - Message::ptr iu = Message::ptr(new Message(category, access_mode, read_only, payload_type)); /* params */ //)); + return Message::create(category, payload_type); +} +Message::ptr Message::create(const std::string& category, const std::string& payload_type) +{ + Message::ptr iu = Message::ptr(new Message(category, IU_ACCESS_MESSAGE, true, payload_type)); /* params */ //)); iu->_payload.initialize(iu); return iu; } diff --git a/ipaacalib/cpp/src/ipaaca-json.cc b/ipaacalib/cpp/src/ipaaca-json.cc index de82246..8ceec93 100644 --- a/ipaacalib/cpp/src/ipaaca-json.cc +++ b/ipaacalib/cpp/src/ipaaca-json.cc @@ -177,6 +177,31 @@ int fakeiu_main(int argc, char** argv) } +int legacy_iu_main(int argc, char** argv) +{ + // produce and fill a new and a legacy IU with identical contents + + ipaaca::OutputBuffer::ptr ob = ipaaca::OutputBuffer::create("jsonTestSenderLegacy"); + ob->register_handler([](ipaaca::IUInterface::ptr iu, ipaaca::IUEventType event_type, bool local) { + std::cout << "Received remote update, new payload: " << iu->payload() << std::endl; + }); + std::cout << "--- Create IUs with category jsonTest" << std::endl; + ipaaca::IU::ptr iu1 = ipaaca::IU::create("jsonTest", "JSON"); + ipaaca::IU::ptr iu2 = ipaaca::IU::create("jsonTest", "STR"); + std::map<std::string, long> newmap = { {"fifty", 50}, {"ninety-nine", 99} }; + std::cout << "--- Set map" << std::endl; + iu1->payload()["map"] = newmap; + iu1->payload()["array"] = std::vector<std::string>{"aaa", "bbb", "ccc"}; + iu2->payload()["map"] = newmap; + iu2->payload()["array"] = std::vector<std::string>{"aaa", "bbb", "ccc"}; + std::cout << "--- Publishing IUs with this payload:" << std::endl; + std::cout << iu1->payload() << std::endl; + ob->add(iu1); + ob->add(iu2); + std::cout << "--- Waiting for changes for 5s " << std::endl; + sleep(5); + return 0; +} int iu_main(int argc, char** argv) { @@ -229,6 +254,7 @@ int iu_main(int argc, char** argv) int main(int argc, char** argv) { - return fakeiu_main(argc, argv); + return legacy_iu_main(argc, argv); + //return fakeiu_main(argc, argv); //return iu_main(argc, argv); } diff --git a/ipaacatools/scripts/ipaaca-iu-injector b/ipaacatools/scripts/ipaaca-iu-injector index 1159400..b785969 100755 --- a/ipaacatools/scripts/ipaaca-iu-injector +++ b/ipaacatools/scripts/ipaaca-iu-injector @@ -43,7 +43,10 @@ import ipaaca def iu_update_handler(iu, event_type, local): - print(event_type + ': ' + str(iu)) + try: + print(event_type + ': ' + unicode(iu)) + except: + print(u"An error occurred printing an IU for an event of type "+event_type) parser = ipaaca.IpaacaArgumentParser(description='Ipaaca IU Injector -- Sent ipaaca messages or IUs from the command line') diff --git a/ipaacatools/scripts/ipaaca-iu-sniffer b/ipaacatools/scripts/ipaaca-iu-sniffer index 3a98cee..ac244b6 100755 --- a/ipaacatools/scripts/ipaaca-iu-sniffer +++ b/ipaacatools/scripts/ipaaca-iu-sniffer @@ -61,10 +61,13 @@ def highlight_if_color(s, c='1'): def pretty_printed_dict(d): s='{\n' for k, v in d.items(): - v = str(v) + if isinstance(v, unicode) or isinstance(v, str): + v = "'"+unicode(v)+"'" + else: + v = unicode(v) v2 = v if len(v) <= arguments.max_size else v[:arguments.max_size] + '<excess length omitted>' v2.replace('\\','\\\\').replace('\n', highlight_if_color('\\n')) - s += "\t '%s': '%s',\n" % (highlight_if_color(unicode(k),'1'), unicode(v2)) + s += "\t '%s': %s,\n" % (highlight_if_color(unicode(k),'1'), unicode(v2)) s+='}' return s @@ -163,4 +166,4 @@ if __name__ == '__main__': os._exit(0) else: sys.exit(0) - \ No newline at end of file + -- GitLab