diff options
Diffstat (limited to 'hsm-dummy-pulser/Main.hs')
-rw-r--r-- | hsm-dummy-pulser/Main.hs | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/hsm-dummy-pulser/Main.hs b/hsm-dummy-pulser/Main.hs deleted file mode 100644 index d15b616..0000000 --- a/hsm-dummy-pulser/Main.hs +++ /dev/null @@ -1,62 +0,0 @@ -{-# LANGUAGE OverloadedRecordDot #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE TemplateHaskell #-} - -import Data.Function ((&)) -import Data.Text (Text, pack) -import Effectful (Eff, (:>), runEff) -import Effectful.Concurrent (Concurrent, runConcurrent, threadDelay) -import Effectful.Log (LogLevel(LogAttention, LogInfo), runLog) -import Effectful.Reader.Static (Reader, asks, runReader) -import Effectful.Resource (runResource) -import Effectful.State.Static.Local (evalState) -import Hsm.Core.App (launch) -import Hsm.Core.Env (deriveFromYaml) -import Hsm.Core.Fsm qualified as F -import Hsm.Core.Zmq.Server (runServer, send) -import Streamly.Data.Stream (Stream, repeatM) -import System.IO.Echo (withoutInputEcho) - -data Env = Env - { name :: Text - , pubEp :: Text - , period :: Int - , pulses :: Int - } - -$(deriveFromYaml ''Env) - -pulse :: (Concurrent :> es, Reader Env :> es) => Stream (Eff es) () -pulse = repeatM $ asks period >>= threadDelay - -stateRun :: F.FsmState () Int Env Int -stateRun = F.FsmState "run" action - where - action _ env sta = - if sta < env.pulses - then next - else exit - where - next = - F.FsmOutput - (Just $ F.FsmResult sta (succ sta) stateRun) - [(LogInfo, "Sending pulse #" <> pack (show sta))] - exit = - F.FsmOutput - Nothing - [(LogAttention, "Reached " <> pack (show env.pulses) <> " pulses")] - --- Dummy pulser service: --- Proof of concept. Publishes a "pulse" through ZMQ at a set interval. -main :: IO () -main = - launch @Env "dummy-pulser" withoutInputEcho $ \env logger level -> - (pulse & F.fsm @_ @_ @Env @Int & send @Env @_ @Int) - & runServer @Env - & evalState @Int 1 - & evalState stateRun - & runConcurrent - & runLog env.name logger level - & runReader env - & runResource - & runEff |