Files
spark/src/lib/api/public/QuickbusClientChannel.cpp
T

50 lines
1.8 KiB
C++

#include "QuickbusClientChannel.h"
#include "QuickbusClientChannel.h"
#include "ClientChannel.h"
namespace bts {
namespace api {
QuickbusClientChannel::QuickbusClientChannel(Quickbus& bus, const ServiceContext& context, const char* type_name, const char* service_qualifier) :
ClientChannel(context),
_pclient(api_client_create(&bus, type_name, service_qualifier))
{
}
QuickbusClientChannel::~QuickbusClientChannel() {
if (_pclient != nullptr) {
api_client_destroy(_pclient);
_pclient = nullptr;
}
}
void QuickbusClientChannel::send_core(const std::string& request_envalope, OnReply on_response) {
raw_response_callback trampoline = [](const char* buffer, size_t length, void* extraptr) {
OnReply* on_response = static_cast<OnReply*>(extraptr);
assert(on_response != nullptr);
(*on_response)(buffer, length);
delete on_response;
};
OnReply* heap_on_response = new OnReply(move(on_response));
api_client_send(_pclient, request_envalope.c_str(), request_envalope.size(), trampoline, heap_on_response);
}
ClientChannel::Unsubscribe QuickbusClientChannel::subscribe_core(const std::string & method_and_qualifier, OnSubscriptionCB cb) {
raw_subscription_callback trampoline = [](EventType event_type, const StreamUpdate* changes, int count, void* extra) {
OnSubscriptionCB* heap_cb = static_cast<OnSubscriptionCB*>(extra);
assert(heap_cb != nullptr);
(*heap_cb)(event_type, changes, count);
};
OnSubscriptionCB* heap_cb = new OnSubscriptionCB(cb);
auto subscription = api_client_subscribe(_pclient, method_and_qualifier.c_str(), trampoline, heap_cb);
return [this,subscription,heap_cb]() {
api_client_unsubscribe(_pclient, subscription);
delete heap_cb;
};
}
bool QuickbusClientChannel::is_sync_call_ok() {
return !api_client_is_on_qb_thread(_pclient);
}
}}//namespace