Я пытаюсь выполнить декодирование протокола в Python.
Краткая версия моего вопроса:
Я получил массив байтов, который является пакет данных.
- Используя первый байт пакета, я знаю, какой это тип пакета.
- Используя это - я хочу создать пакет через класс.
Когда я хочу отправить пакет, мне действительно нужно повторно использовать около 90% обработки, выполненной в том же классе пакетов, чтобы я мог создать и отправить пакет.
Я могу сделать одно из вышеперечисленного, кажется, я не могу сделать оба
Например - что-то вроде этого:
class PacketType123(BasePacketType):
def __init__fromparams( self, field1, field2 ):
# called when you want to send a packet
# ... initialize like I'am sending the packet
self.field1 = field1
self.field2 = field2
def encode_and_send(self,destination):
# encode into raw byte
databytes = self.encode()
destination.send( databytes )
# called when a packet is received on the wire
def __init__frombytearray( self, bytearray ):
self.decode_bytearray( bytearray )
print("Hi Field2 = %d" % self.field2 )
# create packet decode lookup table.
lookuptable = dict()
# populate it with classes
lookuptable[123] = PacketType123
# other packets would added to the lookup table
lookuptable[44] = PacketType44
lookuptable[12] = PacketType12
Отправить
p1 = PacketType1( 42, "dogs and cats" )
p1.encode_and_send( server )
Чтобы обработать поступающие данные, сделайте следующее:
databytes = receive_message()
packet = lookuptable[ datbytes[0] ].__init__frombytearray(databytes)
Моя проблема в том, что я могу сделать либо ToSend, либо ProcessIncomming, я не знаю, как сделать оба с тот же класс.
Я просмотрел:
Кажется, Единственный способ сделать эту работу - с помощью ключевых слов args. Тьма, которая усложняет мне другие вещи ... Ищете другой способ сделать это.
Предложения, пожалуйста?