Нужна теоретическая информация которая направит меня в нужном направлении (гусары молчать! :)
Формат пакетов пересылаемых по сети в моей программе определяется структурой [size][opcode][payload_data] и все классы пакетов являются реализацией интерфейса IPacket, чтобы реализовывать определенный набор методов Parse, Create &etc.
Класс в который будет осуществлен маппинг данных из пакета определяется опкодом.
Вот тут возник вопрос как маппить пакеты по opcode ?
Портянку из switch-case я отмел сразу. Хочется легко расширяемого лаконичного решения.
Была мысль использовать словарь вида
dictionary[opcode]{ payload_size, packet_name, delegate -> IPacket SomePacket.Parse(byte[] buffer) }
, и дергать описанный в интерфейсе метод Parse. Проблема в том, что возвращаемый обьект - IPacket и нужно явно приводить его к SomePacket. А это опять огромная портянка switch-case, да и сам словарь надо описывать, а других способов я не знаю (или медленный System.Reflection, но он чертовски медленный + опять же словарь).
Как маппинг реализовывается профессианалами ?