def __init__(self, fields = None, *args, **kwargs): super(LoopingField, self).__init__(*args, **kwargs) self._meta = PacketOptions(None, None) if isinstance(fields, dict): for name, field in six.iteritems(fields): field.contribute_to_class(self, name) self.next_field = None
def __init__(self, fields=None, *args, **kwargs): super(LoopingField, self).__init__(*args, **kwargs) self._meta = PacketOptions(None, None) if isinstance(fields, dict): for name, field in six.iteritems(fields): field.contribute_to_class(self, name) self.next_field = None
def __init__(self, fields = None, *args, **kwargs): super(GroupedField, self).__init__(*args, **kwargs) self._meta = PacketOptions(None, None) if isinstance(fields, dict): for name, field in six.iteritems(fields): field.contribute_to_class(self, name) self.expected_count = len(fields)
def process_packets(self): self.process_idle() packets = [] for addr, buf in six.iteritems(self.buffer): header_size = OpenTTDPacket.get_packet_size() if buf.read_avail < header_size: continue with buf as data: while buf.read_avail >= header_size: # While enough data available for a header. info = OpenTTDPacket.manager.from_data( data[buf.index:buf.index+header_size].tobytes() ) if buf.read_avail < info.length: # Not enough data in buffer to parse the full packet break packet_data = data[buf.index + header_size:buf.index + info.length] buf.index += info.length packet = self.packet_registry.get(info.packet_id) if not packet: # We don't understand this packet.. maybe we should log this. # TODO: Add Logging continue try: obj = packet.manager.from_data(packet_data.tobytes(), extra = self.extra_info) except: # pylint: disable=W0702 continue packets.append((addr, obj)) return packets
def __init__(self, fields=None, *args, **kwargs): super(GroupedField, self).__init__(*args, **kwargs) self._meta = PacketOptions(None, None) if isinstance(fields, dict): for name, field in six.iteritems(fields): field.contribute_to_class(self, name) self.expected_count = len(fields)
def __init__(self, fields = None, count = no_default, *args, **kwargs): super(RepeatingField, self).__init__(*args, **kwargs) self._meta = PacketOptions(None, None) if isinstance(fields, dict): for name, field in six.iteritems(fields): field.contribute_to_class(self, name) if count is not no_default: self.field_count = self.expected_count = count if isinstance(count, Field): count.name = "_count_"
def __init__(self, fields=None, count=no_default, *args, **kwargs): super(RepeatingField, self).__init__(*args, **kwargs) self._meta = PacketOptions(None, None) if isinstance(fields, dict): for name, field in six.iteritems(fields): field.contribute_to_class(self, name) if count is not no_default: self.field_count = self.expected_count = count if isinstance(count, Field): count.name = "_count_"
def write_buffer_flush(self): i = 0 for addr, buf in six.iteritems(self.buffer): while buf.write_avail: i += 1 data = buf.dequeue_write() if not data: break try: sent, length = 0, len(data) while sent < length: sent += self.sendto(data[sent:], addr) except: # pylint: disable=W0702 pass finally: buf.dequeue_done() if i >= self.PACKET_BURST_SIZE and self.PACKET_BURST_SIZE != 0: return
def from_python(self, value): return [{'key': key, 'value': value} for key, value in six.iteritems(value)]
def process_idle(self): remove = [addr for addr, buf in six.iteritems(self.buffer) if not buf.active] for addr in remove: del self.buffer[addr]
def from_python(self, value): return [{ 'key': key, 'value': value } for key, value in six.iteritems(value)]