courier-0.1.1.1: echo/EchoClient.hs
-----------------------------------------------------------------------------
-- |
-- Module : EchoClient
-- Copyright : (c) Phil Hargett 2015
-- License : MIT (see LICENSE file)
--
-- Maintainer : phil@haphazardhouse.net
-- Stability : experimental
-- Portability : non-portable (requires STM)
--
-- Simple echo client for testing out courier.
--
-----------------------------------------------------------------------------
module Main where
-- local imports
import Network.Endpoints
import Network.RPC
import Network.Transport.Sockets.TCP
-- external imports
import Control.Exception
import Data.Serialize
import System.Environment
import System.IO
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
main :: IO ()
main = do
[serverNameStr,clientNameStr] <- getArgs
let server = Name serverNameStr
client = Name clientNameStr
endpoint <- newEndpoint
withTransport (newTCPTransport4 tcpSocketResolver4) $ \transport ->
withEndpoint transport endpoint $
withName endpoint client $
withConnection transport endpoint server $ do
hPutStrLn stdout $ "Started echo client on " ++ (show client) ++ " for " ++ (show server)
finally (echo endpoint server client)
(hPutStrLn stdout $ "\nStopped echo client on " ++ (show client) ++ " for " ++ (show server))
echo :: Endpoint -> Name -> Name -> IO ()
echo endpoint server client = do
text <- hGetLine stdin
let cs = newCallSite endpoint client
response <- call cs server "echo" $ encode text
case decode response of
Left _ -> error "Could not decode message"
Right responseText -> do
hPutStrLn stdout $ "> " ++ responseText
echo endpoint server client