om-socket-1.0.0.0: examples/Ingress.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE OverloadedStrings #-}
module Ingress (main) where
import Control.Monad.IO.Class (MonadIO(liftIO))
import Data.Binary (Binary)
import Data.Function ((&))
import GHC.Generics (Generic)
import OM.Fork (runRace)
import OM.Socket (openIngress)
import Prelude (($), IO, putStrLn)
import qualified Streaming.Prelude as Stream
{- |
The messages that arrive on the socket.
This type would typically be shared by both the Ingress and Egress side,
or at least the binary encoding must be identical.
-}
data Msg
= A
| B
deriving stock (Generic)
deriving anyclass (Binary)
main :: IO ()
main =
runRace $
openIngress "localhost:9000"
& Stream.mapM_
(\msg ->
case msg of
A -> liftIO $ putStrLn "Got A"
B -> liftIO $ putStrLn "Got B"
)