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 с ошибкой