Use plain list to store chunk num.

This commit is contained in:
Yuxin Wang 2018-09-26 22:59:54 -04:00
parent 3720d0613e
commit 99bd980f10
2 changed files with 11 additions and 5 deletions

View file

@ -96,9 +96,7 @@ class Peer(MessageServer):
# TODO: refactor this block, make it prettier
for chunknum in range(totalchunknum):
for peer_id, possessed_chunks in chunkinfo.items():
# first one is a range
smallest, largest = possessed_chunks[0]
if smallest <= chunknum <= largest or chunknum in possessed_chunks:
if chunknum in possessed_chunks:
# find the client based on peer id
peer = None
for client, client_id in self._peers.items():
@ -113,7 +111,7 @@ class Peer(MessageServer):
'chunknum': chunknum
})
break
# TODO: update chunkinfo after receiving each chunk
with open(destination, 'wb') as dest_file:
dest_file.write(b'0' * fileinfo['size'])
dest_file.flush()

View file

@ -60,8 +60,10 @@ class Tracker(MessageServer):
'size': message['size']
}
chunknum = math.ceil(message['size'] / (512 * 1024))
# add to chunkinfo
# TODO: optimize how the chunknums are stored
self._chunkinfo[message['filename']] = {
self._peers[client][0]: [(0, chunknum - 1)]
self._peers[client][0]: list(range(0, chunknum))
}
self._write_message(client, {
'type': MessageType.REPLY_PUBLISH,
@ -83,6 +85,12 @@ class Tracker(MessageServer):
'fileinfo': self._file_list[message['filename']],
'chunkinfo': self._chunkinfo[message['filename']]
})
elif message['type'] == MessageType.REQUEST_CHUNK_REGISTER:
peer_id, _ = self._peers[client]
if peer_id in self._chunkinfo[message['filename']]:
self._chunkinfo[message['filename']][peer_id].append(message['chunknum'])
else:
self._chunkinfo[message['filename']][peer_id] = [message['chunknum']]
else:
logger.error('Undefined message with {} type, full packet: {}'.format(message['type'], message))