time-warp-1.1.1.0: bench/Network/Receiver/Main.hs
module Main where
import Control.Applicative (empty)
import Control.Monad (when)
import Control.Monad.Trans (liftIO)
import GHC.IO.Encoding (setLocaleEncoding, utf8)
import Bench.Network.Commons (MeasureEvent (..), Ping (..), Pong (..),
loadLogConfig, logMeasure)
import Control.TimeWarp.Rpc (Binding (AtPort), Listener (..), listen,
plainBinaryP, reply, runDialog, runTransfer)
import Control.TimeWarp.Timed (for, runTimedIO, sec, wait)
import Options.Applicative.Simple (simpleOptions)
import System.Wlog (usingLoggerName)
import ReceiverOptions (Args (..), argsParser)
main :: IO ()
main = do
(Args {..}, ()) <-
simpleOptions
"bench-receiver"
"Server utility for benches"
"Use it!"
argsParser
empty
runNode "receiver" $ do
loadLogConfig logsPrefix logConfig
liftIO $ setLocaleEncoding utf8
stopper <- listen (AtPort port)
[ Listener $
\(Ping mid payload) -> do
logMeasure PingReceived mid payload
when (not noPong) $ do
logMeasure PongSent mid payload
reply $ Pong mid payload
]
wait (for duration sec)
stopper
where
runNode name = runTimedIO . usingLoggerName name
. runTransfer (pure ()) . runDialog plainBinaryP