{-# LANGUAGE OverloadedStrings #-}
import Control.Concurrent
import Control.Concurrent.Async
import Control.Monad.Trans
import Test.Tasty
import Test.Tasty.HUnit
import Network (withSocketsDo)
import Network.MessagePack.Client
import Network.MessagePack.Server
port :: Int
port = 5000
main :: IO ()
main = withSocketsDo $ defaultMain $
testGroup "simple service"
[ testCase "test" $ server `race_` (threadDelay 1000 >> client) ]
server :: IO ()
server =
serve port
[ method "add" add
, method "echo" echo
]
where
add :: Int -> Int -> Server Int
add x y = return $ x + y
echo :: String -> Server String
echo s = return $ "***" ++ s ++ "***"
client :: IO ()
client = execClient "localhost" port $ do
r1 <- add 123 456
liftIO $ r1 @?= 123 + 456
r2 <- echo "hello"
liftIO $ r2 @?= "***hello***"
where
add :: Int -> Int -> Client Int
add = call "add"
echo :: String -> Client String
echo = call "echo"