mirror of https://github.com/voidlizard/hbs2
session reworking wip
This commit is contained in:
parent
c63c771120
commit
66d62127a1
|
@ -56,17 +56,24 @@ newtype ChunkNum = ChunkNum Word16
|
||||||
-- FIXME: peer should be a part of the key
|
-- FIXME: peer should be a part of the key
|
||||||
-- therefore, key is ( p | cookie )
|
-- therefore, key is ( p | cookie )
|
||||||
-- but client's cookie in protocol should be just ( cookie :: Word32 )
|
-- but client's cookie in protocol should be just ( cookie :: Word32 )
|
||||||
|
|
||||||
|
data BlockDownload =
|
||||||
|
BlockDownload
|
||||||
|
{ _sBlockHash :: Hash HbSync
|
||||||
|
, _sBlockChunkSize :: ChunkSize
|
||||||
|
, _sBlockOffset :: Offset
|
||||||
|
, _sBlockWritten :: Size
|
||||||
|
}
|
||||||
|
|
||||||
data Sessions e =
|
data Sessions e =
|
||||||
Sessions
|
Sessions
|
||||||
{ _sBlockHash :: Cache (Cookie e) (Hash HbSync)
|
{ _sBlockDownload :: Cache (Cookie e) BlockDownload
|
||||||
, _sBlockChunkSize :: Cache (Cookie e) ChunkSize
|
|
||||||
, _sBlockOffset :: Cache (Cookie e) Offset
|
|
||||||
, _sBlockWritten :: Cache (Cookie e) Size
|
|
||||||
, _sBlockSizes :: Cache (Hash HbSync) (Map (Peer e) Size)
|
, _sBlockSizes :: Cache (Hash HbSync) (Map (Peer e) Size)
|
||||||
, _sBlockSize :: Cache (Hash HbSync) Size
|
, _sBlockSize :: Cache (Hash HbSync) Size
|
||||||
}
|
}
|
||||||
|
|
||||||
makeLenses 'Sessions
|
makeLenses 'Sessions
|
||||||
|
makeLenses 'BlockDownload
|
||||||
|
|
||||||
type GetBlockChunk h m = Hash h -> Offset -> Size -> m (Maybe ByteString)
|
type GetBlockChunk h m = Hash h -> Offset -> Size -> m (Maybe ByteString)
|
||||||
|
|
||||||
|
@ -179,9 +186,6 @@ emptySessions =
|
||||||
Sessions <$> Cache.newCache (Just defCookieTimeout)
|
Sessions <$> Cache.newCache (Just defCookieTimeout)
|
||||||
<*> Cache.newCache (Just defBlockInfoTimeout)
|
<*> Cache.newCache (Just defBlockInfoTimeout)
|
||||||
<*> Cache.newCache (Just defBlockInfoTimeout)
|
<*> Cache.newCache (Just defBlockInfoTimeout)
|
||||||
<*> Cache.newCache (Just defBlockInfoTimeout)
|
|
||||||
<*> Cache.newCache (Just defBlockInfoTimeout)
|
|
||||||
<*> Cache.newCache (Just defBlockInfoTimeout)
|
|
||||||
|
|
||||||
newSession :: (Eq k, Hashable k,MonadIO m)
|
newSession :: (Eq k, Hashable k,MonadIO m)
|
||||||
=> s
|
=> s
|
||||||
|
@ -251,7 +255,7 @@ runFakePeer se env = do
|
||||||
BlockChunksI
|
BlockChunksI
|
||||||
{ blkSize = hasBlock storage
|
{ blkSize = hasBlock storage
|
||||||
, blkChunk = getChunk storage
|
, blkChunk = getChunk storage
|
||||||
, blkGetHash = getSession se sBlockHash
|
, blkGetHash = \c -> getSession' se sBlockDownload c (view sBlockHash) --(\BlockDownload{} -> error "AAA")
|
||||||
|
|
||||||
-- КАК ТОЛЬКО ПРИНЯЛИ ВСЕ ЧАНКИ (ПРИШЁЛ ПОСЛЕДНИЙ ЧАНК):
|
-- КАК ТОЛЬКО ПРИНЯЛИ ВСЕ ЧАНКИ (ПРИШЁЛ ПОСЛЕДНИЙ ЧАНК):
|
||||||
-- СЧИТАЕМ ХЭШ ТОГО, ЧТО ПОЛУЧИЛОСЬ
|
-- СЧИТАЕМ ХЭШ ТОГО, ЧТО ПОЛУЧИЛОСЬ
|
||||||
|
@ -261,24 +265,26 @@ runFakePeer se env = do
|
||||||
-- УДАЛЯЕМ КУКУ?
|
-- УДАЛЯЕМ КУКУ?
|
||||||
, blkAcceptChunk = \(c,p,h,n,bs) -> void $ runMaybeT $ do
|
, blkAcceptChunk = \(c,p,h,n,bs) -> void $ runMaybeT $ do
|
||||||
|
|
||||||
|
let def = BlockDownload h 0 0 0 -- FIXME: ASAP
|
||||||
|
|
||||||
let chuKey = (p,c)
|
let chuKey = (p,c)
|
||||||
|
|
||||||
let bslen = fromIntegral $ B8.length bs
|
let bslen = fromIntegral $ B8.length bs
|
||||||
-- TODO: log this situation
|
-- TODO: log this situation
|
||||||
mbSize <- MaybeT $ getSession' se sBlockSizes h (Map.lookup p) <&> fromMaybe Nothing
|
mbSize <- MaybeT $ getSession' se sBlockSizes h (Map.lookup p) <&> fromMaybe Nothing
|
||||||
mbChSize <- MaybeT $ getSession se sBlockChunkSize c
|
mbChSize <- MaybeT $ getSession' se sBlockDownload c (view sBlockChunkSize)
|
||||||
|
|
||||||
let offset = fromIntegral n * fromIntegral mbChSize :: Offset
|
let offset = fromIntegral n * fromIntegral mbChSize :: Offset
|
||||||
|
|
||||||
updSession se offset sBlockOffset c (max offset)
|
updSession se def sBlockDownload c (over sBlockOffset (max offset))
|
||||||
|
|
||||||
liftIO $ do
|
liftIO $ do
|
||||||
-- newBlock cww (p,c) h mbSize
|
-- newBlock cww (p,c) h mbSize
|
||||||
writeChunk cww chuKey h offset bs
|
writeChunk cww chuKey h offset bs
|
||||||
updSession se 0 sBlockWritten c (+bslen)
|
updSession se def sBlockDownload c (over sBlockWritten (+bslen))
|
||||||
|
|
||||||
maxOff <- MaybeT $ getSession se sBlockOffset c
|
maxOff <- MaybeT $ getSession' se sBlockDownload c (view sBlockOffset)
|
||||||
written <- MaybeT $ getSession se sBlockWritten c
|
written <- MaybeT $ getSession' se sBlockDownload c (view sBlockWritten)
|
||||||
|
|
||||||
let mbDone = (maxOff + fromIntegral mbChSize) > fromIntegral mbSize
|
let mbDone = (maxOff + fromIntegral mbChSize) > fromIntegral mbSize
|
||||||
&& written >= mbSize
|
&& written >= mbSize
|
||||||
|
@ -347,11 +353,9 @@ test1 = do
|
||||||
let cookie = 0
|
let cookie = 0
|
||||||
let s0 = (fst . head) ee
|
let s0 = (fst . head) ee
|
||||||
|
|
||||||
-- getSession' se sBlockSizes h ???
|
|
||||||
|
|
||||||
withNewSession s0 sBlockHash cookie h $ do
|
|
||||||
let chsz = defChunkSize
|
let chsz = defChunkSize
|
||||||
updSession s0 chsz sBlockChunkSize cookie (const chsz)
|
let def = BlockDownload h 0 0 0 -- FIXME: ASAP!!
|
||||||
|
updSession s0 def sBlockDownload cookie (set sBlockChunkSize chsz)
|
||||||
request p1 (BlockChunks @Fake cookie (BlockGetAllChunks h chsz))
|
request p1 (BlockChunks @Fake cookie (BlockGetAllChunks h chsz))
|
||||||
|
|
||||||
pure ()
|
pure ()
|
||||||
|
|
Loading…
Reference in New Issue