content: -- |
  -- Task worker
  -- Connects PULL socket to tcp://localhost:5557
  -- Collects workloads from ventilator via that socket
  -- Connects PUSH socket to tcp://localhost:5558
  -- Sends results to sink via that socket
  -- 
  -- Translated to Haskell by ERDI Gergo http://gergo.erdi.hu/
  
  module Main where
  
  import System.ZMQ
  import Control.Monad (forever)
  import Data.ByteString.Char8 (unpack, empty)
  import System.Random (randomRIO)
  import Control.Applicative ((<$>))
  import System.IO (hSetBuffering, stdout, BufferMode(..))
  import Control.Concurrent (threadDelay)
  
  
  main :: IO ()
  main = withContext 1 $ \context -> do  
    withSocket context Pull $ \receiver -> do
      connect receiver "tcp://localhost:5557"
      withSocket context Push $ \sender -> do    
        connect sender "tcp://localhost:5558"
        
        hSetBuffering stdout NoBuffering
        forever $ do
          message <- unpack <$> receive receiver []
          -- Simple progress indicator for the viewer
          putStr $ message ++ "."
  
          -- Do the "work"
          threadDelay (read message * 1000)
         
          -- Send results to sink
          send sender empty []
  