コード例 #1
0
ファイル: fields.py プロジェクト: libopenttd/libopenttd
 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
コード例 #2
0
ファイル: fields.py プロジェクト: badock/libopenttd
 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
コード例 #3
0
ファイル: fields.py プロジェクト: libopenttd/libopenttd
 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)
コード例 #4
0
 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
コード例 #5
0
ファイル: fields.py プロジェクト: badock/libopenttd
 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)
コード例 #6
0
ファイル: fields.py プロジェクト: libopenttd/libopenttd
 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_"
コード例 #7
0
ファイル: fields.py プロジェクト: badock/libopenttd
 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_"
コード例 #8
0
 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
コード例 #9
0
ファイル: fields.py プロジェクト: libopenttd/libopenttd
 def from_python(self, value):
     return [{'key': key, 'value': value} for key, value in six.iteritems(value)]
コード例 #10
0
    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]
コード例 #11
0
ファイル: fields.py プロジェクト: badock/libopenttd
 def from_python(self, value):
     return [{
         'key': key,
         'value': value
     } for key, value in six.iteritems(value)]