![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 17.11.2010
Сообщений: 4
|
![]()
Всем ПРОграммистам привет!
Я долго искал в интернете, может плохо, может не так задавал вопрос, но увы, ответа не нашел. Вопрос в следующем, сервер принимает пакеты и обрабатывает их, но IFать и SWITCHать 30-40 с немалым пакетов, мягко говоря, не удобно. Какой может быть выход? Приминение паттерна "стратегия" не нашел, т.е. как были ифы/свитчи так и остались, просто обработка пакетов усложнилась и отдалилась. Какие есть варианты? |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
![]()
Можно постараться использовать механизм наследования.
Ведь каждый case является "конкретной" реализацией "общей" концепции решения задачи. |
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
![]() Цитата:
do not use your brain
|
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 17.11.2010
Сообщений: 4
|
![]()
К сожалению, конкретно 33 пакета общие, а затем они передаются на обработку на уровень дальше. Т.е. грубо говоря определяется к какому типу относится пакет, а потом он уже разбирается и тп
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 10.08.2013
Сообщений: 67
|
![]()
а логически разбить на составляющие? вроде: выставлен флаг F1 - отправляем пакет на корм ф-ции/методу parseF1packet(отсеяли треть - хорошо), в parseF1packet проверяем флаг F2 - отправляем ф-ции parseF1F2packet и т.д.
если для пакетов можно вычленить сигнатуру - можно хоть примитивный CRC16 брать от сигнатуры, а потом через фабрику классов(хотя там тоже switch, но будет хоть как-то интеллигентней)... |
![]() |
![]() |
![]() |
#6 |
Регистрация: 17.11.2010
Сообщений: 4
|
![]()
вся фишка как раз в том, что логически они уже все собраны.
Я надеялся что есть какой-то другой вариант, но от jmz видимо не уйти никуда ![]() Спасибо за мысли и помощь! |
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 10.08.2013
Сообщений: 67
|
![]() Цитата:
(*funcarr[pckt.type])(&pckt); |
|
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
![]() Цитата:
do not use your brain
|
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 10.08.2013
Сообщений: 67
|
![]()
и чего стесняться, если человек хочет уйти от cmp/jmpz,ja,jbe,jle?
|
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
![]() Цитата:
do not use your brain
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ветвления | AK55 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 06.05.2013 19:03 |
скрипт и веселые тест кейсы | Dimsssss | SQL, базы данных | 1 | 04.02.2013 23:00 |
Ветвления | Евгений2508 | Помощь студентам | 0 | 15.10.2012 12:22 |
Ветвления | Евгений2508 | Помощь студентам | 0 | 14.10.2012 09:54 |
Ветвления | Евгений2508 | Помощь студентам | 1 | 14.10.2012 09:50 |