Да что ж все ленивые такие? ☺
Jun. 21st, 2022 04:07 pmУже в который раз пишу одно и то же: демон, работающий с последовательным портом и сокетом (UNIX или сетевым). Протоколы везде текстовые, т.е. получается, что один поток работает с портом, второй — с сокетом. Что-то пришло — обрабатываем геттером, соответствующим команде. Нужно что-то сделать — вызываем сеттер (при необходимости ожидающий ответ и вызывающий соответствующий геттер или просто эхо проверяющий).
Подумал было: а вдруг уже у кого-то подобное есть. А вот фиг вам! Все равно придется написать такие же простыни кода, как и при непосредственной работе с сокетами и портом.
Похоже, надо будет как-нибудь подумать, какие могут быть варианты протоколов общения и запилить уже библиотеку. Как я сделал когда-то со своими сниппетами. Удобней исправить баг или внести новую фичу в библиотеку, чем искать все, где скопипащен такой сниппет. Да и копипаста может приводить к другим багам (например, я обнаружил небольшой баг в одном демоне, который уже пару лет на БТА работает; возник он по вине копипасты: кусок скопировал, а идентификаторы изменить забыл).
Думаю, парсер вообще вполне может быть общим (т.к. и через сокет, и через порт протокол более-менее схож). Получил строку, заканчивающуюся '\n', вызвал парсер, тот проанализировал первую команду и, если нашел ее в массиве структур {команда, функция, [флаги]}, вызвал соответствующую функцию. Получается, что уйма кода уйдет внутрь библиотеки, а снаружи знай себе вызывай конструктор, деструктор да немного вспомогательных функций. Ну и, само собой, пиши массивы структур и собственно сами сеттеры-геттеры.
Кажется, я изобретаю С++ ☺
Подумал было: а вдруг уже у кого-то подобное есть. А вот фиг вам! Все равно придется написать такие же простыни кода, как и при непосредственной работе с сокетами и портом.
Похоже, надо будет как-нибудь подумать, какие могут быть варианты протоколов общения и запилить уже библиотеку. Как я сделал когда-то со своими сниппетами. Удобней исправить баг или внести новую фичу в библиотеку, чем искать все, где скопипащен такой сниппет. Да и копипаста может приводить к другим багам (например, я обнаружил небольшой баг в одном демоне, который уже пару лет на БТА работает; возник он по вине копипасты: кусок скопировал, а идентификаторы изменить забыл).
Думаю, парсер вообще вполне может быть общим (т.к. и через сокет, и через порт протокол более-менее схож). Получил строку, заканчивающуюся '\n', вызвал парсер, тот проанализировал первую команду и, если нашел ее в массиве структур {команда, функция, [флаги]}, вызвал соответствующую функцию. Получается, что уйма кода уйдет внутрь библиотеки, а снаружи знай себе вызывай конструктор, деструктор да немного вспомогательных функций. Ну и, само собой, пиши массивы структур и собственно сами сеттеры-геттеры.
Кажется, я изобретаю С++ ☺