module Main(main) where import Network.EBus.Layer2 import Data.Enumerator (Enumerator, Iteratee, run, ($$)) import Data.Enumerator.Binary (enumHandle) import System.IO (hSetBinaryMode,stdin) import Data.ByteString (ByteString) import Data.Attoparsec.Enumerator (iterParser) main = do -- * Select binary mode (True) or text mode (False) on a open handle. (See also openBinaryFile.) hSetBinaryMode stdin True -- * run -- Run an iteratee until it finishes, and return either the final value (if it succeeded) or the error (if it failed). -- * run_ -- Like run, except errors are converted to exceptions and thrown. Primarily useful for small scripts or other simple cases. loop 100 loop :: Int -> IO() loop 0 = do print "finished" loop n = do readAndDumpPacket loop (n - 1) readAndDumpPacket :: IO() readAndDumpPacket = do maybePacket <- run( enumSource $$ runParser ) case maybePacket of Right result -> print result Left error -> print error enumSource :: Enumerator ByteString IO a enumSource = enumHandle 1 stdin runParser :: Iteratee ByteString IO EbusPacket runParser = do p <- iterParser ebusParserLayer2 return p