peer_tcp_client.py 文件源码

python
阅读 18 收藏 0 点赞 0 评论 0

项目:bit-torrent 作者: borzunov 项目源码 文件源码
def _handle_haves(self, message_id: MessageType, payload: memoryview):
        if message_id == MessageType.have:
            (index,) = struct.unpack('!I', cast(bytes, payload))
            self._mark_as_owner(index)
        elif message_id == MessageType.bitfield:
            piece_count = self._download_info.piece_count
            PeerTCPClient._check_payload_len(message_id, payload, int(ceil(piece_count / 8)))

            arr = bitarray(endian='big')
            arr.frombytes(payload.tobytes())
            for i in range(piece_count):
                if arr[i]:
                    self._mark_as_owner(i)
            for i in range(piece_count, len(arr)):
                if arr[i]:
                    raise ValueError('Spare bits in "bitfield" message must be zero')

        # if self._download_info.complete and self.is_seed():
        #     raise SeedError('A seed is disconnected because a download is complete')
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号