mirror of https://github.com/voidlizard/hbs2
zzz
This commit is contained in:
parent
e08ffd653e
commit
37065c62da
|
@ -26,26 +26,26 @@ data AnyMessage e = AnyMessage Integer (Encoded e)
|
||||||
|
|
||||||
instance Serialise (Encoded e) => Serialise (AnyMessage e)
|
instance Serialise (Encoded e) => Serialise (AnyMessage e)
|
||||||
|
|
||||||
newtype EngineM e m a = EngineM { fromEngine :: ReaderT (EngineEnv e m) m a }
|
newtype EngineM e m a = EngineM { fromEngine :: ReaderT (EngineEnv e) m a }
|
||||||
deriving newtype ( Functor
|
deriving newtype ( Functor
|
||||||
, Applicative
|
, Applicative
|
||||||
, Monad
|
, Monad
|
||||||
, MonadIO
|
, MonadIO
|
||||||
, MonadReader (EngineEnv e m)
|
, MonadReader (EngineEnv e)
|
||||||
|
, MonadTrans
|
||||||
)
|
)
|
||||||
|
|
||||||
instance MonadTrans (EngineM (EngineEnv e m)) where
|
-- instance MonadTrans (EngineM (EngineEnv e)) where
|
||||||
lift = lift
|
-- lift = lift
|
||||||
|
|
||||||
data EngineEnv e m = forall bus . ( Messaging bus e ByteString
|
data EngineEnv e = forall bus . ( Messaging bus e ByteString
|
||||||
, Serialise (Encoded e)
|
, Serialise (Encoded e)
|
||||||
, MonadIO m
|
) =>
|
||||||
) =>
|
|
||||||
EngineEnv
|
EngineEnv
|
||||||
{ _peer :: Maybe (Peer e)
|
{ _peer :: Maybe (Peer e)
|
||||||
, _self :: Peer e
|
, _self :: Peer e
|
||||||
, bus :: bus
|
, bus :: bus
|
||||||
, defer :: Pipeline m ()
|
, defer :: Pipeline IO ()
|
||||||
}
|
}
|
||||||
|
|
||||||
makeLenses 'EngineEnv
|
makeLenses 'EngineEnv
|
||||||
|
@ -73,7 +73,7 @@ makeResponse h = AnyProtocol { myProtoId = natVal (Proxy @(ProtocolId p))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
runEngineM :: EngineEnv e m -> EngineM e m a -> m a
|
runEngineM :: EngineEnv e -> EngineM e m a -> m a
|
||||||
runEngineM e f = runReaderT (fromEngine f) e
|
runEngineM e f = runReaderT (fromEngine f) e
|
||||||
|
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ instance (MonadIO m, HasProtocol e p) => Request e p (EngineM e m) where
|
||||||
let bs = serialise (AnyMessage @e proto (encode msg))
|
let bs = serialise (AnyMessage @e proto (encode msg))
|
||||||
liftIO $ sendTo b (To p) (From s) bs
|
liftIO $ sendTo b (To p) (From s) bs
|
||||||
|
|
||||||
instance (MonadIO m, HasProtocol e p) => Response e p (EngineM e m) where
|
instance (HasProtocol e p) => Response e p (EngineM e IO) where
|
||||||
|
|
||||||
deferred _ m = do
|
deferred _ m = do
|
||||||
e@(EngineEnv { defer = d }) <- ask
|
e@(EngineEnv { defer = d }) <- ask
|
||||||
|
@ -111,15 +111,15 @@ newEnv :: forall e bus m . ( Monad m
|
||||||
)
|
)
|
||||||
=> Peer e
|
=> Peer e
|
||||||
-> bus
|
-> bus
|
||||||
-> m (EngineEnv e m)
|
-> m (EngineEnv e)
|
||||||
|
|
||||||
newEnv p pipe = do
|
newEnv p pipe = do
|
||||||
de <- newPipeline defPipelineSize
|
de <- liftIO $ newPipeline defPipelineSize
|
||||||
pure $ EngineEnv Nothing p pipe de
|
pure $ EngineEnv Nothing p pipe de
|
||||||
|
|
||||||
runPeer :: forall e m a . ( MonadIO m
|
runPeer :: forall e m a . ( MonadIO m
|
||||||
)
|
)
|
||||||
=> EngineEnv e m
|
=> EngineEnv e
|
||||||
-> [AnyProtocol e (EngineM e m)]
|
-> [AnyProtocol e (EngineM e m)]
|
||||||
-> m a
|
-> m a
|
||||||
|
|
||||||
|
@ -131,9 +131,7 @@ runPeer env@(EngineEnv {bus = pipe, defer = d}) hh = do
|
||||||
|
|
||||||
let disp = Map.fromList resp
|
let disp = Map.fromList resp
|
||||||
|
|
||||||
let q = runPipeline d
|
void $ liftIO $ async $ runPipeline d
|
||||||
|
|
||||||
-- let q = liftIO $ runPipeline d
|
|
||||||
|
|
||||||
runEngineM env $ do
|
runEngineM env $ do
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ main = do
|
||||||
-- ]
|
-- ]
|
||||||
|
|
||||||
|
|
||||||
runFakePeer :: EngineEnv Fake IO -> IO ()
|
runFakePeer :: EngineEnv Fake -> IO ()
|
||||||
runFakePeer env = do
|
runFakePeer env = do
|
||||||
|
|
||||||
let pid = fromIntegral (hash (env ^. self)) :: Word8
|
let pid = fromIntegral (hash (env ^. self)) :: Word8
|
||||||
|
|
Loading…
Reference in New Issue