courier-0.1.1.1: echo/EchoServer.hs
-----------------------------------------------------------------------------
-- |
-- Module : EchoServer
-- Copyright : (c) Phil Hargett 2015
-- License : MIT (see LICENSE file)
--
-- Maintainer : phil@haphazardhouse.net
-- Stability : experimental
-- Portability : non-portable (requires STM)
--
-- Simple echo server 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
[nameStr] <- getArgs
let server = Name nameStr
endpoint <- newEndpoint
withTransport (newTCPTransport4 tcpSocketResolver4) $ \transport ->
withEndpoint transport endpoint $
withBinding transport endpoint server $ do
hPutStrLn stdout $ "Started echo server on " ++ (show server)
finally (echo endpoint server)
(hPutStrLn stdout $ "\nStopped echo server on " ++ (show server))
echo :: Endpoint -> Name -> IO ()
echo endpoint server = do
(bytes,reply) <- hear endpoint server "echo"
case decode bytes of
Left _ -> error "Could not decode message"
Right text -> do
hPutStrLn stdout text
reply $ encode text
echo endpoint server