mirror of https://github.com/voidlizard/hbs2
detecting data && deferred emit
This commit is contained in:
parent
9985ec68de
commit
762fc12de9
|
@ -68,6 +68,7 @@ library
|
||||||
, HBS2.Actors.ChunkWriter
|
, HBS2.Actors.ChunkWriter
|
||||||
, HBS2.Actors.Peer
|
, HBS2.Actors.Peer
|
||||||
, HBS2.Clock
|
, HBS2.Clock
|
||||||
|
, HBS2.Data.Detect
|
||||||
, HBS2.Data.Types
|
, HBS2.Data.Types
|
||||||
, HBS2.Data.Types.Refs
|
, HBS2.Data.Types.Refs
|
||||||
, HBS2.Defaults
|
, HBS2.Defaults
|
||||||
|
|
|
@ -263,21 +263,25 @@ instance ( HasProtocol e p
|
||||||
) => EventEmitter e p (PeerM e IO) where
|
) => EventEmitter e p (PeerM e IO) where
|
||||||
|
|
||||||
emit k d = do
|
emit k d = do
|
||||||
se <- asks (view envEvents)
|
pip <- asks (view envDeferred)
|
||||||
let sk = newSKey @(EventKey e p) k
|
env <- ask
|
||||||
|
liftIO $ addJob pip $ withPeerM env $ do
|
||||||
|
|
||||||
void $ runMaybeT $ do
|
se <- asks (view envEvents)
|
||||||
subs <- MaybeT $ liftIO $ atomically $ readTVar se <&> HashMap.lookup sk
|
let sk = newSKey @(EventKey e p) k
|
||||||
void $ liftIO $ atomically $ modifyTVar' se (HashMap.delete sk)
|
|
||||||
pers <- forM subs $ \r -> do
|
|
||||||
ev <- MaybeT $ pure $ fromDynamic @(EventHandler e p (PeerM e IO)) r
|
|
||||||
lift $ ev d
|
|
||||||
if isPersistent @(Event e p) then
|
|
||||||
pure [r]
|
|
||||||
else
|
|
||||||
pure []
|
|
||||||
|
|
||||||
void $ liftIO $ atomically $ modifyTVar' se (HashMap.insert sk (mconcat pers))
|
void $ runMaybeT $ do
|
||||||
|
subs <- MaybeT $ liftIO $ atomically $ readTVar se <&> HashMap.lookup sk
|
||||||
|
void $ liftIO $ atomically $ modifyTVar' se (HashMap.delete sk)
|
||||||
|
pers <- forM subs $ \r -> do
|
||||||
|
ev <- MaybeT $ pure $ fromDynamic @(EventHandler e p (PeerM e IO)) r
|
||||||
|
lift $ ev d
|
||||||
|
if isPersistent @(Event e p) then
|
||||||
|
pure [r]
|
||||||
|
else
|
||||||
|
pure []
|
||||||
|
|
||||||
|
void $ liftIO $ atomically $ modifyTVar' se (HashMap.insert sk (mconcat pers))
|
||||||
|
|
||||||
runPeerM :: forall e m . (MonadIO m, HasPeer e, Ord (Peer e), Pretty (Peer e))
|
runPeerM :: forall e m . (MonadIO m, HasPeer e, Ord (Peer e), Pretty (Peer e))
|
||||||
=> AnyStorage
|
=> AnyStorage
|
||||||
|
|
|
@ -371,7 +371,7 @@ main = do
|
||||||
env <- ask
|
env <- ask
|
||||||
liftIO $ async $ withPeerM env $ do
|
liftIO $ async $ withPeerM env $ do
|
||||||
maybe1 rootSz (pure ()) $ \rsz -> do
|
maybe1 rootSz (pure ()) $ \rsz -> do
|
||||||
pause ( 0.01 :: Timeout 'Seconds )
|
pause ( 0.001 :: Timeout 'Seconds )
|
||||||
let info = BlockAnnounceInfo 0 NoBlockInfoMeta rsz (fromMerkleHash root)
|
let info = BlockAnnounceInfo 0 NoBlockInfoMeta rsz (fromMerkleHash root)
|
||||||
let ann = BlockAnnounce @Fake info
|
let ann = BlockAnnounce @Fake info
|
||||||
request @Fake p0 ann
|
request @Fake p0 ann
|
||||||
|
|
37
hbs2/Main.hs
37
hbs2/Main.hs
|
@ -7,6 +7,7 @@ import HBS2.Prelude
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Merkle
|
import HBS2.Merkle
|
||||||
import HBS2.Data.Types
|
import HBS2.Data.Types
|
||||||
|
import HBS2.Data.Detect
|
||||||
import HBS2.Defaults
|
import HBS2.Defaults
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,11 +75,6 @@ newtype NewRefOpts =
|
||||||
}
|
}
|
||||||
deriving stock (Data)
|
deriving stock (Data)
|
||||||
|
|
||||||
data BlobType = Merkle (Hash HbSync)
|
|
||||||
| AnnRef (Hash HbSync)
|
|
||||||
| Blob (Hash HbSync)
|
|
||||||
deriving (Show,Data)
|
|
||||||
|
|
||||||
runCat :: Data opts => opts -> SimpleStorage HbSync -> IO ()
|
runCat :: Data opts => opts -> SimpleStorage HbSync -> IO ()
|
||||||
runCat opts ss = do
|
runCat opts ss = do
|
||||||
|
|
||||||
|
@ -90,11 +86,7 @@ runCat opts ss = do
|
||||||
|
|
||||||
obj <- MaybeT $ getBlock ss mhash
|
obj <- MaybeT $ getBlock ss mhash
|
||||||
|
|
||||||
let mbLink = deserialiseOrFail @AnnotatedHashRef obj >> pure (AnnRef mhash)
|
let q = tryDetect mhash obj
|
||||||
let mbMerkle = deserialiseOrFail @(MTree [HashRef]) obj >> pure (Merkle mhash)
|
|
||||||
let orBlob = Blob mhash
|
|
||||||
|
|
||||||
let q = rights [mbLink, mbMerkle] & headDef orBlob
|
|
||||||
|
|
||||||
liftIO $ do
|
liftIO $ do
|
||||||
|
|
||||||
|
@ -120,31 +112,6 @@ runCat opts ss = do
|
||||||
maybe (error "empty ref") walk mbHead
|
maybe (error "empty ref") walk mbHead
|
||||||
|
|
||||||
|
|
||||||
-- case q of
|
|
||||||
-- Merkle h -> liftIO do
|
|
||||||
-- walkMerkle h (getBlock ss) $ \(hr :: [HashRef]) -> do
|
|
||||||
-- forM_ hr $ \(HashRef h) -> do
|
|
||||||
-- if honly then do
|
|
||||||
-- print $ pretty h
|
|
||||||
-- else do
|
|
||||||
-- mblk <- getBlock ss h
|
|
||||||
-- case mblk of
|
|
||||||
-- Nothing -> error $ show $ "missed block: " <+> pretty h
|
|
||||||
-- Just blk -> LBS.putStr blk
|
|
||||||
|
|
||||||
|
|
||||||
-- case q of
|
|
||||||
|
|
||||||
-- realHash <- MaybeT $ case mbLink of
|
|
||||||
-- Left _ -> pure $ Just mhash
|
|
||||||
-- Right lnk -> do
|
|
||||||
-- pure $ headMay [ h
|
|
||||||
-- | HashRefMerkle (HashRefObject (HashRef h) _) <- universeBi lnk
|
|
||||||
-- ]
|
|
||||||
|
|
||||||
-- -- FIXME: if merkle?
|
|
||||||
|
|
||||||
|
|
||||||
runStore :: Data opts => opts -> SimpleStorage HbSync -> IO ()
|
runStore :: Data opts => opts -> SimpleStorage HbSync -> IO ()
|
||||||
|
|
||||||
runStore opts ss | justInit = do
|
runStore opts ss | justInit = do
|
||||||
|
|
Loading…
Reference in New Issue