<add>增加nats连接对象
This commit is contained in:
commit
6007a425b5
|
|
@ -0,0 +1 @@
|
|||
/build
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
cmake_minimum_required(VERSION 3.16)
|
||||
project(NatsConnect)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
add_executable(${PROJECT_NAME} test.cpp)
|
||||
target_link_directories(${PROJECT_NAME} PUBLIC lib)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE nats)
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC include)
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#pragma once
|
||||
|
||||
#include <nats/nats.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
typedef void(*cb)(const char*, size_t);
|
||||
class NatsConnect {
|
||||
natsConnection* m_con = nullptr;
|
||||
cb m_cb;
|
||||
public:
|
||||
|
||||
NatsConnect() = default;
|
||||
explicit NatsConnect(const char* url) { connect(url); }
|
||||
~NatsConnect();
|
||||
|
||||
void connect(const char* url) noexcept;
|
||||
void disconnect() noexcept;
|
||||
void reconnect() noexcept;
|
||||
void publish(const char* subject, const char* data) noexcept;
|
||||
operator void*() const { return m_con; }
|
||||
|
||||
void subscribe(const char* subject, cb f) noexcept;
|
||||
static void handle(const char* msg, size_t len, NatsConnect* obj);
|
||||
};
|
||||
|
||||
|
||||
inline NatsConnect::~NatsConnect() {
|
||||
if (m_con) {
|
||||
natsConnection_Close(m_con);
|
||||
natsConnection_Destroy(m_con);
|
||||
}
|
||||
}
|
||||
|
||||
inline void NatsConnect::connect(const char* url) noexcept {
|
||||
nats_CheckCompatibility();
|
||||
const natsStatus s = natsConnection_ConnectTo(&m_con, url);
|
||||
if (s != NATS_OK) {
|
||||
printf("Error: %s\n", natsStatus_GetText(s));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
inline void NatsConnect::subscribe(const char *subject, cb f) noexcept {
|
||||
m_cb = f;
|
||||
natsSubscription *sub = nullptr;
|
||||
const natsStatus s = natsConnection_Subscribe(&sub, m_con, subject, [](natsConnection *nc, natsSubscription *sub, natsMsg *msg, void *closure) {
|
||||
handle(natsMsg_GetData(msg), natsMsg_GetDataLength(msg), (NatsConnect*)closure);
|
||||
}, this);
|
||||
if (s != NATS_OK) {
|
||||
printf("Error: %s\n", natsStatus_GetText(s));
|
||||
return;
|
||||
}
|
||||
natsSubscription_SetPendingLimits(sub, 1024, 1024);
|
||||
}
|
||||
|
||||
inline void NatsConnect::handle(const char *msg, size_t len, NatsConnect *obj) {
|
||||
obj->m_cb(msg, len);
|
||||
}
|
||||
Loading…
Reference in New Issue