packages feed

majordomo-0.1.2: src/mdp_client.hs

{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
module Main where

import Prelude hiding(getContents, putStr, putStrLn)
import Data.ByteString.Char8 as BS
import qualified System.Network.ZMQ.MDP.Client as C
import Data.List as L
import System.Console.CmdArgs.Implicit

data Client = Client {broker :: String,
                      service::String, 
                      message_parts::[String]} deriving (Show, Data, Typeable)


client :: Client
client = Client{ broker        = def &= argPos 0 ,
                 service       = def &= argPos 1 ,
                 message_parts = def &= args
                 } &= summary "connect to a 0mq server"


main :: IO ()
main = do
  s <- cmdArgs client
  -- print s
  if (L.null $ message_parts s)
    then putStrLn "must send at least one argument"
    else C.withClientSocket (broker s) $ \sock -> do
      res <- C.sendAndReceive sock (pack $ service s) (Prelude.map pack $ message_parts s)
      putStr $ case res of
        Left C.ClientTimedOut    ->  "Timed out!"
        Left C.ClientBadProtocol -> "Bad protocol!"
        Right l ->  BS.concat . L.intersperse "\n" $ C.response l