#include #include #include #include #include using namespace std; #include "cbhomeclient.h" #include "message.h" // #include "3dparty/bus_nng/bn_api.h" #include "bhome_msg_api.pb.h" using namespace bhome_msg; static cproc* make_proc(const char* name, const char* id){ cproc* pinfo = (cproc*)calloc(1,sizeof(cproc)); auto assign = [](char** d, size_t* l, const char* tmp){ *l = strlen(tmp); *d = (char*)malloc(*l); memcpy(*d, tmp, *l); }; assign(&pinfo->name.str, &pinfo->name.size, name); assign(&pinfo->id.str, &pinfo->id.size, id); return pinfo; } static unique_ptr pub(const vector& topics){ auto ptr = unique_ptr(new thread([&]{ creg reg; memset(®, 0, sizeof(reg)); reg.pinfo = make_proc("pub", "pubid"); reg.topic_pub = cstr_arr_new(topics.size()); size_t i = 0; for(; i < topics.size(); i++){ cstr_arr_add(®.topic_pub, topics.at(0).data(), topics.at(0).size(), i); } void* handle = bus_client_init(NULL, 0, ®); size_t count = 0; string base_msg("test_pub_sub=="); this_thread::sleep_for(chrono::seconds(3)); while (true) { for(auto && i : topics){ auto msg = base_msg + "test_ps pub message "+i+"-->msg-"+to_string(count++); MsgPublish pbmsg; pbmsg.set_topic(i); pbmsg.set_data(msg); auto data = pbmsg.SerializeAsString(); // TestPub(i.c_str(), i.length(), data.c_str(), data.length()); int pubres = bus_client_pubmsg(handle, (void*)data.data(), data.size()); printf("======>> bus_client_pubmsg [%s]\n", msg.c_str()); this_thread::sleep_for(chrono::seconds{2}); } } })); ptr->detach(); return ptr; } int main(int argc, char const *argv[]) { vector topics{ "cbhomeclient_test_pubsub" }; auto p = pub(topics); // while (true) this_thread::sleep_for(chrono::seconds{1}); creg reg; memset(®, 0, sizeof(reg)); reg.pinfo = make_proc("sub", "subid"); reg.topic_sub = cstr_arr_new(topics.size()); size_t i = 0; for(; i < topics.size(); i++){ cstr_arr_add(®.topic_sub, topics.at(0).data(), topics.at(0).size(), i); } void* handle = bus_client_init(NULL, 0, ®); while (true) { auto msg = bus_client_get_submsg(handle); printf("msg topic [%s] data [%s]\n", msg->topic.str, msg->msg.str); } bus_client_free(handle); return 0; }