|
Модераторы: feodorv |
|
Aoizora |
|
||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.11.2016 Репутация: нет Всего: нет |
Пишу несложный сетевой протокол. Мне нужно, чтобы приходящие пакеты в зависимости от значения некоторого поля выводились либо в консоль, либо добавлялись в конец файла, который может создаваться с рандомным именем каждый раз, когда происходит соединение. Какой паттерн проектирования для этого использовать? Пытаюсь прикрутить шаблон стейтмашин, но получается неоптимально: когда нужно сбрасывать нагрузку пакета в конец файла, приходится этот файл открывать каждый раз, когда приходит пакет данного типа. Поток пакетов может быть неоднородным, т.е. друг за другом приходят пакеты, содержимое которых надо записывать в разные места.
Вот что я написал сейчас:
Сейчас работает запись в консоль или в файл в зависимости от пакетов, но проблем нет только тогда, когда приходят пакеты одного типа. Если приходят пакеты разного типа, но файл перезаписывается, например, когда происходит смена состояния. Это не то, что я хочу. Плохо и то, что на каждый пакет открывается/закрывается файл. Еще и запись попакетная. Нужно предусмотреть и обработку ошибок в пакетах. Как это сделать? |
||||
|
|||||
likehood |
|
|||
666 Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
Насколько я понял, главная проблема в том, что в строках 80 и 83 при смене состояния каждый раз создаются новые объекты, а значит заново открываются файлы. В принципе, паттерн StateMachine не требует обязательно создавать новые объекты. Можно в начале создать два объекта ConsoleState и FileState, и в классе Network хранить указатель на один из этих объектов. При смене состояния указатель переключается на другой объект, а сами объекты не уничтожаются/создаются. Если конечно я правильно понял вопрос .
P.S. Как я понял функция send в классах ConsoleState и FileState делает одно и то же. Может, её лучше реализовать в базовом классе State? |
|||
|
||||
Aoizora |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.11.2016 Репутация: нет Всего: нет |
Спасибо. Видимо, так и будет лучше, если отойти от стандартной реализации стейтмашины.
|
|||
|
||||
Forstrot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 9.1.2017 Репутация: нет Всего: нет |
Блин, а Вы на заказ делаете? Мне необходимо выполнить подобного рода работу на производстве: https://www.konsom.ru/solutions/informatsio...ki-dannyh-tsod/ вот пытаюсь найти специалиста.
|
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |