Братишка, я тебе покушать принёс
Чтобы сделать запрос, достаточно создать объект класса kurlyk::Client и настроить все необходимое в
В процессе разработки ПО для трейдинга столкнулся с тем, что программа должна иметь целую кучу файлов конфигурации, содержание которых хотелось бы скрыть от пользователя. Это могут быть настройки стратегий, параметры авторизации на сервере, текст для разных языков интерфейса и т.д.
Для файлов конфигурации я уже давно использую файлы с JSON. Очень удобная вещь. Осталось лишь добавить поддержку комментариев и зашифровать текст при помощи алгоритма AES. А для большей красоты еще и сжать текст перед шифровкой алгоритмом brotli.
Сказано — сделано. Встречайте — crypto-json, проект на гитхабе. Репозиторий содержит готовый редактор JSON с комментариями, который может также сохранить текст в зашифрованном виде. Настройки сжатия и шифрования можно задать перед сохранением файла и во время открытия. Также редактор позволяет сделать проверку JSON и может подсвечивать проблемные места.
Всем привет! Продолжаем курс велосипедостроения. И на этот раз зачем-то решил сделать простенький алгоритм расчета HMAC для SHA256 и SHA512. А то иногда бывает нужно подключить какую нибудь криптобиржу, а там нужен этот самый HMAC. Вот ссылка на репозиторий самой либы.
Для расчета HMAC надо вызвать функцию get_hmac, которая имеет несколько параметров:
std::string get_hmac( std::string key, const std::string &msg, const TypeHash type, const bool is_hex = true, const bool is_upper = false);
Очень простая, многопоточная серверная и клиентская библиотека Named Pipe, реализованная с использованием C++11. Проект был проверен на компиляторе mingw 7.3.0 x64. Папка code_blocks содержит примеры для IDE Code::Blocks. Не забудьте в проектах указать свой компилятор, иначе проект не соберется. Сделал либу только сегодня, так что в ней могут быть ошибочки.
#include <iostream> #include "named-pipe-server.hpp" int main() { /* в конструкторе сервера можно также задать размер буфера */ SimpleNamedPipe::NamedPipeServer server("my_server"); /* обработчики событий */ server.on_open = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) { std::cout << "open, handle: " << connection->get_handle() << std::endl; }; server.on_message = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, const std::string &in_message) { /* обрабатываем входящие сообщения */ std::cout << "message " << in_message << ", handle: " << connection->get_handle() << std::endl; connection->send("ok"); }; server.on_close = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection) { std::cout << "close, handle: " << connection->get_handle() << std::endl; }; server.on_error = [&](SimpleNamedPipe::NamedPipeServer::Connection* connection, const std::error_code &ec) { std::cout << "error, handle: " << connection->get_handle() << ", what " << ec.value() << std::endl; }; /* запускаем сервер */ server.start(); std::system("pause"); /* останавливаем сервер * (деструктор класса сам выполнит остановку, вызывать не обязательно) */ server.stop(); std::cout << "close program" << std::endl; return EXIT_SUCCESS; }