8 месяцев назад
История
README.md
psl - publisher/subscriber library
Простейшая библиотека, реализующая архитектуру “Издатель/подписчик”. Для работы с ней необходимо подключить заголовочный файл “psl.h”. Затем в любом из взаимодействующих программ создать брокера, который занимается маршрутизацией сообщений. После этого создать клиента, который подключается к брокеру, подписаться на “каналы”, установить функцию обратного вызова и счастливо пользоваться.
#include "psl.h"
# В одном из процессов будущей общей сети необходимо создать брокера сообщений
psl_broker *b = psl_broker_new(PSL_DEFAULT_PORT);
# Затем, создать клиентскую часть, передав указатель на пользовательские данные
psl_client *c = psl_client_new(NULL);
*
# Передача указателя на пользовательские данные
static const char *msg = "Hello, world!";
psl_client_set_user_data(msg);
# Установить функцию обратного вызова на событие подключения
void on_connect(psl_client *c, void *user_data, int code)
{
# Если соединение установлено, то возвращается 0. Строку ошибки можно получить функцией psl_strerror.
# "Подписаться" на канал. Если какой-либо процесс отправил данные на этот канал, то при получении сообщения будет вызвана функция обратного вызова, установленная при инициализации или позднее
if (!code)
{
psl_client_subscribe(c, "#");
psl_client_subscribe(c, "test/topic");
}
}
psl_client_set_connect_callback(c, on_connect);
# Установить функцию обратного вызова при получении сообщения
void on_message(psl_client *c, void *user_data, const char *topic, char *buffer, int buffer_size)
{
std::cout << "Got message from \"" << topic << "\"" << std::endl;
char **topics;
int topic_count;
psl_sub_topic_tokenise(topic, &topics, &topic_count);
std::cout << "depth = " << topic_count << std::endl;
psl_sub_topic_tokens_free(&topics, topic_count);
}
psl_client_set_message_callback(c, on_message);
# Можно установить автоматическое переподключение при ошибке или обрыве, либо переподключаться вручную, если в функцию-обработчик передан код ошибки
psl_client_set_autoreconnect(c, 1);
# Начало работы: асинхронное подключение к брокеру
psl_client_connect_async(c, "127.0.0.1", 65535);
# Передать данные
char data[32];
psl_client_publish(c, "test", data, sizeof(data));
# Завершение работы
psl_client_disconnect(c);
psl_client_delete(c);
psl_broker_delete(b);
Описание
Простая библиотека для сетевого обмена по типу "издатель-подписчик"
Конвейеры
0 успешных
0 с ошибкой