diff options
Diffstat (limited to 'exec/ebus-dump-layer2.hs')
-rw-r--r-- | exec/ebus-dump-layer2.hs | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/exec/ebus-dump-layer2.hs b/exec/ebus-dump-layer2.hs index 84d72e2..c8fd1b5 100644 --- a/exec/ebus-dump-layer2.hs +++ b/exec/ebus-dump-layer2.hs @@ -1,4 +1,41 @@ 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 - print "Hello ebus-dump-layer" + -- * 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 |