From 70d3e37b1a088209fe84abf07a39d14dec116c6b Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Sat, 24 Aug 2024 11:57:18 -0700 Subject: Initial commit --- hsm-dummy-receiver/Main.hs | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 hsm-dummy-receiver/Main.hs (limited to 'hsm-dummy-receiver/Main.hs') diff --git a/hsm-dummy-receiver/Main.hs b/hsm-dummy-receiver/Main.hs new file mode 100644 index 0000000..47b483b --- /dev/null +++ b/hsm-dummy-receiver/Main.hs @@ -0,0 +1,51 @@ +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE OverloadedRecordDot #-} +{-# LANGUAGE OverloadedStrings #-} + +-- Proof of concept application, defines a custom @Consumer@. ZMQ client +-- listens for incoming messages from @dummy-pulser@. +module Main + ( main + ) +where + +import Control.Monad (forever) +import Data.Aeson (FromJSON) +import Data.Function ((&)) +import Data.Text (Text, pack) +import Data.Void (Void) +import Effectful (IOE, runEff) +import Effectful.Log (Log, localDomain, logInfo_, runLog) +import Effectful.Reader.Static (Reader, runReader) +import Effectful.Resource (Resource, runResource) +import GHC.Generics (Generic) +import Hsm.Core.App (launch) +import Hsm.Core.Pipes (Consumer, await, runEffect, (>->)) +import Hsm.Core.Zmq (client) + +data Env = Env + { name :: Text + , subEps :: [Text] + , topics :: [Text] + } + deriving (FromJSON, Generic) + +type Effs = [Log, Reader Env, Resource, IOE] + +type Receiver = Consumer Int Env Void Effs + +receiver :: Receiver () +receiver = + localDomain "receiver" $ + forever $ + await >>= logInfo_ . mappend "Received pulse #" . pack . show + +main :: IO () +main = + launch "dummy-receiver" $ \logger level e -> + (client >-> receiver) + & runEffect + & runLog e.name logger level + & runReader e + & runResource + & runEff -- cgit v1.2.1