ouroboros-network-0.10.1.0: A networking layer for the Ouroboros blockchain protocol
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ouroboros.Network.PeerSharing

Synopsis

Documentation

newtype PeerSharingController peer m Source #

Request and Result queue for the peer sharing client implementation.

Although Peer Sharing is a request-response protocol we can not run it as one, i.e. starting and terminating the protocol on demand since protocol termination as a different semantics. We have to keep the client and server protocol sides running and only issue the requests on demand.

A workaround to this is to implement the client side with the help of a PeerSharingController which contains two queues: request and result. The client side will be waiting to receive a PeerSharingAmount from the request queue and as soon as it gets something it will send a SendMsgShareRequest and wait for a response before writing it to the result queue.

Constructors

PeerSharingController 

Fields

  • requestQueue :: StrictTMVar m (PeerSharingAmount, MVar m [peer])

    Depth 1 mailbox that contains a locally scoped result queue

newtype PeerSharingRegistry peer m Source #

Peer Sharing Registry is a registry that stores a PeerSharingController for every peer that we connect to.

bracketPeerSharingClient should be used.

Constructors

PeerSharingRegistry 

Fields

newPeerSharingRegistry :: (MonadSTM m, Ord peer) => m (PeerSharingRegistry peer m) Source #

bracketPeerSharingClient :: (Ord peer, MonadSTM m, MonadThrow m) => PeerSharingRegistry peer m -> peer -> (PeerSharingController peer m -> m a) -> m a Source #

peerSharingClient :: (Alternative (STM m), MonadMVar m, MonadSTM m) => ControlMessageSTM m -> PeerSharingController peer m -> m (PeerSharingClient peer m ()) Source #

peerSharingServer :: Monad m => (PeerSharingAmount -> m [peer]) -> PeerSharingServer peer m Source #