This commit is contained in:
Dmitry Zuikov 2023-03-30 08:44:42 +03:00
parent f0d8d6d4d2
commit 3f47cd102c
2 changed files with 62 additions and 45 deletions

View File

@ -5,14 +5,18 @@ import HBS2.Events
import HBS2.Hash import HBS2.Hash
import HBS2.Clock import HBS2.Clock
import HBS2.Net.Proto import HBS2.Net.Proto
import HBS2.Net.Proto.Peer
import HBS2.Prelude.Plated import HBS2.Prelude.Plated
import HBS2.Storage import HBS2.Storage
import HBS2.Actors.Peer import HBS2.Actors.Peer
import HBS2.Net.Proto.Sessions
import Data.Functor
import Data.Word import Data.Word
import Prettyprinter import Prettyprinter
import Data.ByteString.Lazy (ByteString) import Data.ByteString.Lazy (ByteString)
import Data.Foldable import Data.Foldable hiding (find)
import Data.Maybe
import System.Random.Shuffle import System.Random.Shuffle
@ -82,13 +86,19 @@ blockChunksProto :: forall e m . ( MonadIO m
, Response e (BlockChunks e) m , Response e (BlockChunks e) m
, HasDeferred e (BlockChunks e) m , HasDeferred e (BlockChunks e) m
, HasOwnPeer e m , HasOwnPeer e m
, Sessions e (KnownPeer e) m
, Pretty (Peer e) , Pretty (Peer e)
) )
=> BlockChunksI e m => BlockChunksI e m
-> BlockChunks e -> BlockChunks e
-> m () -> m ()
blockChunksProto adapter (BlockChunks c p) = blockChunksProto adapter (BlockChunks c p) = do
peer <- thatPeer (Proxy @(BlockChunks e))
auth <- find (KnownPeerKey peer) id <&> isJust
when auth do
case p of case p of
BlockGetChunks h size n1 num -> do BlockGetChunks h size n1 num -> do

View File

@ -2,10 +2,13 @@ module HBS2.Net.Proto.BlockInfo where
import HBS2.Prelude.Plated import HBS2.Prelude.Plated
import HBS2.Net.Proto import HBS2.Net.Proto
import HBS2.Net.Proto.Peer
import HBS2.Net.Proto.Sessions import HBS2.Net.Proto.Sessions
import HBS2.Events import HBS2.Events
import HBS2.Hash import HBS2.Hash
import Data.Functor
import Data.Maybe
data BlockInfo e = GetBlockSize (Hash HbSync) data BlockInfo e = GetBlockSize (Hash HbSync)
| NoBlock (Hash HbSync) | NoBlock (Hash HbSync)
@ -21,6 +24,7 @@ blockSizeProto :: forall e m . ( MonadIO m
, Response e (BlockInfo e) m , Response e (BlockInfo e) m
, HasDeferred e (BlockInfo e) m , HasDeferred e (BlockInfo e) m
, EventEmitter e (BlockInfo e) m , EventEmitter e (BlockInfo e) m
, Sessions e (KnownPeer e) m
) )
=> GetBlockSize HbSync m => GetBlockSize HbSync m
-> HasBlockEvent HbSync e m -> HasBlockEvent HbSync e m
@ -31,6 +35,9 @@ blockSizeProto getBlockSize evHasBlock =
\case \case
GetBlockSize h -> do GetBlockSize h -> do
-- liftIO $ print "GetBlockSize" -- liftIO $ print "GetBlockSize"
p <- thatPeer (Proxy @(BlockInfo e))
auth <- find (KnownPeerKey p) id <&> isJust
when auth do
deferred (Proxy @(BlockInfo e))$ do deferred (Proxy @(BlockInfo e))$ do
getBlockSize h >>= \case getBlockSize h >>= \case
Just size -> response (BlockSize @e h size) Just size -> response (BlockSize @e h size)