majordomo-0.1.2: lib/System/Network/ZMQ/MDP/Util.hs
{-# LANGUAGE OverloadedStrings #-}
module System.Network.ZMQ.MDP.Util where
import System.ZMQ as Z
import Data.ByteString.Char8 (ByteString)
import qualified Data.ByteString.Char8 as BS
import Control.Applicative
-- Receive until no more messages
receiveUntilEnd :: Socket a -> IO [ByteString]
receiveUntilEnd sock = do
more <- Z.moreToReceive sock
if more
then (:) <$> Z.receive sock [] <*> receiveUntilEnd sock
else return []
-- Receive until an empty frame
receiveUntilEmpty :: Socket a -> IO [ByteString]
receiveUntilEmpty sock = do
frame <- Z.receive sock []
if BS.null frame
then return []
else (frame:) <$> receiveUntilEmpty sock
--
-- Sends a multipart message
--
sendAll :: Socket a -> [ByteString] -> IO ()
sendAll sock = go
where go [x] = Z.send sock x []
go (x:xs) = Z.send sock x [SndMore] >> go xs
go [] = error "empty send not allowed"