mirror of https://github.com/voidlizard/hbs2
wip, refchanrequest events
This commit is contained in:
parent
819cec6402
commit
126994720f
|
@ -77,7 +77,20 @@ type ForRefChans e = ( Serialise ( PubKey 'Sign (Encryption e))
|
||||||
instance ForRefChans e => Serialise (RefChanHeadBlock e)
|
instance ForRefChans e => Serialise (RefChanHeadBlock e)
|
||||||
instance ForRefChans e => Serialise (SignedBox p e)
|
instance ForRefChans e => Serialise (SignedBox p e)
|
||||||
|
|
||||||
|
type instance SessionData e (RefChanHeadBlock e) = RefChanHeadBlock e
|
||||||
|
|
||||||
|
newtype instance SessionKey e (RefChanHeadBlock e) =
|
||||||
|
RefChanHeadBlockKey (RefChanHeadKey (Encryption e))
|
||||||
|
|
||||||
|
deriving newtype instance ForRefChans L4Proto
|
||||||
|
=> Hashable (SessionKey L4Proto (RefChanHeadBlock L4Proto))
|
||||||
|
|
||||||
|
deriving stock instance ForRefChans L4Proto
|
||||||
|
=> Eq (SessionKey L4Proto (RefChanHeadBlock L4Proto))
|
||||||
|
|
||||||
|
-- TODO: define-expiration-time
|
||||||
|
instance Expires (SessionKey L4Proto (RefChanHeadBlock L4Proto)) where
|
||||||
|
expiresIn = const (Just defCookieTimeoutSec)
|
||||||
|
|
||||||
newtype RefChanHeadKey s = RefChanHeadKey (PubKey 'Sign s)
|
newtype RefChanHeadKey s = RefChanHeadKey (PubKey 'Sign s)
|
||||||
|
|
||||||
|
@ -213,24 +226,28 @@ instance ForRefChans e => Serialise (RefChanUpdate e)
|
||||||
data RefChanRequest e =
|
data RefChanRequest e =
|
||||||
RefChanRequest (RefChanId e)
|
RefChanRequest (RefChanId e)
|
||||||
| RefChanResponse (RefChanId e) HashRef
|
| RefChanResponse (RefChanId e) HashRef
|
||||||
deriving stock (Generic)
|
deriving stock (Generic,Typeable)
|
||||||
|
|
||||||
instance ForRefChans e => Serialise (RefChanRequest e)
|
instance ForRefChans e => Serialise (RefChanRequest e)
|
||||||
|
|
||||||
type instance SessionData e (RefChanHeadBlock e) = RefChanHeadBlock e
|
data instance EventKey e (RefChanRequest e) =
|
||||||
|
RefChanRequestEventKey
|
||||||
|
deriving (Generic,Typeable,Eq)
|
||||||
|
|
||||||
newtype instance SessionKey e (RefChanHeadBlock e) =
|
data instance Event e (RefChanRequest e) =
|
||||||
RefChanHeadBlockKey (RefChanHeadKey (Encryption e))
|
RefChanRequestEvent (RefChanId e) HashRef
|
||||||
|
deriving (Typeable,Generic)
|
||||||
|
|
||||||
deriving newtype instance ForRefChans L4Proto
|
instance EventType ( Event e (RefChanRequest e) ) where
|
||||||
=> Hashable (SessionKey L4Proto (RefChanHeadBlock L4Proto))
|
isPersistent = True
|
||||||
|
|
||||||
deriving stock instance ForRefChans L4Proto
|
instance Expires (EventKey e (RefChanRequest e)) where
|
||||||
=> Eq (SessionKey L4Proto (RefChanHeadBlock L4Proto))
|
expiresIn = const Nothing
|
||||||
|
|
||||||
-- TODO: define-expiration-time
|
instance Typeable (RefChanRequest e) => Hashable (EventKey e (RefChanRequest e)) where
|
||||||
instance Expires (SessionKey L4Proto (RefChanHeadBlock L4Proto)) where
|
hashWithSalt salt _ = hashWithSalt salt (someTypeRep p)
|
||||||
expiresIn = const (Just defCookieTimeoutSec)
|
where
|
||||||
|
p = Proxy @(RefChanRequest e)
|
||||||
|
|
||||||
-- FIXME: rename
|
-- FIXME: rename
|
||||||
data RefChanAdapter e m =
|
data RefChanAdapter e m =
|
||||||
|
@ -555,6 +572,7 @@ refChanRequestProto :: forall e s m . ( MonadIO m
|
||||||
, Pretty (Peer e)
|
, Pretty (Peer e)
|
||||||
, Sessions e (KnownPeer e) m
|
, Sessions e (KnownPeer e) m
|
||||||
, Sessions e (RefChanHeadBlock e) m
|
, Sessions e (RefChanHeadBlock e) m
|
||||||
|
, EventEmitter e (RefChanRequest e) m
|
||||||
, HasStorage m
|
, HasStorage m
|
||||||
, Signatures s
|
, Signatures s
|
||||||
, IsRefPubKey s
|
, IsRefPubKey s
|
||||||
|
@ -596,6 +614,7 @@ refChanRequestProto self adapter msg = do
|
||||||
|
|
||||||
guard $ ppk `HashMap.member` view refChanHeadPeers hd
|
guard $ ppk `HashMap.member` view refChanHeadPeers hd
|
||||||
|
|
||||||
|
lift $ emit RefChanRequestEventKey (RefChanRequestEvent @e chan val)
|
||||||
debug $ "RefChanResponse" <+> pretty peer <+> pretty (AsBase58 chan) <+> pretty val
|
debug $ "RefChanResponse" <+> pretty peer <+> pretty (AsBase58 chan) <+> pretty val
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
|
@ -139,6 +139,7 @@ refChanWorker :: forall e s m . ( MonadIO m
|
||||||
, Pretty (AsBase58 (PubKey 'Sign s))
|
, Pretty (AsBase58 (PubKey 'Sign s))
|
||||||
, ForRefChans e
|
, ForRefChans e
|
||||||
, EventListener e (RefChanRound e) m
|
, EventListener e (RefChanRound e) m
|
||||||
|
, EventListener e (RefChanRequest e) m
|
||||||
, Sessions e (RefChanRound e) m
|
, Sessions e (RefChanRound e) m
|
||||||
, m ~ PeerM e IO
|
, m ~ PeerM e IO
|
||||||
)
|
)
|
||||||
|
@ -162,6 +163,9 @@ refChanWorker env brains = do
|
||||||
|
|
||||||
cleanup1 <- async cleanupRounds
|
cleanup1 <- async cleanupRounds
|
||||||
|
|
||||||
|
subscribe @e RefChanRequestEventKey $ \(RefChanRequestEvent chan val) -> do
|
||||||
|
debug $ "RefChanRequestEvent" <+> pretty (AsBase58 chan) <+> pretty val
|
||||||
|
|
||||||
forever do
|
forever do
|
||||||
pause @'Seconds 10
|
pause @'Seconds 10
|
||||||
debug "I'm refchan worker"
|
debug "I'm refchan worker"
|
||||||
|
|
Loading…
Reference in New Issue