SimpleNamedPipe — легковесная библиотека C++ для создания и управления асинхронными серверами именованных каналов в Windows.
Проект распространяется под лицензией MIT. Полный текст лицензии см. в файле LICENSE.
- асинхронная обработка клиентов через IO Completion Port;
- работа либо в отдельном потоке, либо блокирующе в текущем (параметр
start()); - поддержка до 256 одновременных клиентов;
- очередь отправки с ограничением размера и количества сообщений;
- уведомления о событиях через колбэки или класс
ServerEventHandler; - лёгкий клиент для MQL5 с опциональными глобальными обратными вызовами.
- клиент MQL5 выполняет чтение/запись синхронно, обновление через метод
update()например в таймере.
#include "SimpleNamedPipe/NamedPipeServer.hpp"
using namespace SimpleNamedPipe;
int main() {
NamedPipeServer server({"ExamplePipe"});
server.on_message = [&server](int id, const std::string& msg) {
server.send_to(id, "Echo: " + msg);
};
server.start(); // запускает сервер в отдельном потоке
std::cin.get(); // ожидание Enter
server.stop();
}#include <SimpleNamedPipe\NamedPipeClient.mqh>
NamedPipeClient pipe;
int OnInit() {
pipe.open("ExamplePipe");
EventSetMillisecondTimer(10);
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason) {
EventKillTimer();
}
void OnTimer() {
pipe.update();
if(pipe.connected())
pipe.write("ping");
}- Установите CMake и компилятор (Visual Studio или MinGW).
- Для сборки библиотеки и примеров выполните
build_all.bat(илиbuild_all_mingw.batдля MinGW). - Скрипт
install_mql5.batкопирует файлы из каталогаMQL5во все найденные терминалы MetaTrader 5.
Исходники примеров расположены в каталоге examples.
callback_example.cppдемонстрирует работу сервера с отдельными коллбэками (on_connected,on_messageи т.д.).universal_event_example.cppпоказывает аналогичную логику, но используя единый обработчикon_event.
- Нamed Pipe Server using Overlapped I/O
- Winsock2 Advanced Named Pipe
- Основы разработки программ для операционных систем семейств Windows и Linux
SimpleNamedPipe распространяется по лицензии MIT. Подробнее см. файл LICENSE.
