Skip to content

Commit ce833a9

Browse files
committed
typed-protocols-examples: added runConnectedPeersAsymetric
1 parent 5ef5f2d commit ce833a9

File tree

1 file changed

+26
-0
lines changed
  • typed-protocols-examples/src/Network/TypedProtocol/Driver

1 file changed

+26
-0
lines changed

typed-protocols-examples/src/Network/TypedProtocol/Driver/Simple.hs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ module Network.TypedProtocol.Driver.Simple
2525
-- * Connected peers
2626
, runConnectedPeers
2727
, runConnectedPeersPipelined
28+
, runConnectedPeersAsymmetric
2829
-- * Driver utilities
2930
-- | This may be useful if you want to write your own driver.
3031
, driverSimple
@@ -228,3 +229,28 @@ runConnectedPeersPipelined createChannels tracer codec client server =
228229
tracerClient = contramap ((,) AsClient) tracer
229230
tracerServer = contramap ((,) AsServer) tracer
230231

232+
233+
-- Run the same protocol with different codes. This is useful for testing
234+
-- 'Handshake' protocol which knows how to decode different versions.
235+
--
236+
runConnectedPeersAsymmetric
237+
:: ( MonadAsync m
238+
, MonadMask m
239+
, Exception failure
240+
)
241+
=> m (Channel m bytes, Channel m bytes)
242+
-> Tracer m (Role, TraceSendRecv ps)
243+
-> Codec ps failure m bytes
244+
-> Codec ps failure m bytes
245+
-> Peer ps pr ('Pipelined c) Z st m a
246+
-> Peer ps (FlipAgency pr) 'NonPipelined Z st m b
247+
-> m (a, b)
248+
runConnectedPeersAsymmetric createChannels tracer codec codec' client server =
249+
createChannels >>= \(clientChannel, serverChannel) ->
250+
251+
(fst <$> runPipelinedPeer tracerClient codec clientChannel client)
252+
`concurrently`
253+
(fst <$> runPeer tracerServer codec' serverChannel server)
254+
where
255+
tracerClient = contramap ((,) Client) tracer
256+
tracerServer = contramap ((,) Server) tracer

0 commit comments

Comments
 (0)