module Replay where import Types import Log import CmdLine import Session import qualified Data.ByteString as B import System.IO import Control.Concurrent.Thread.Delay replay :: ReplayOpts -> IO () replay opts = go Nothing =<< loadLog (replayLogFile opts) where go _ [] = sessionDone go prevts (l:ls) = do case prevts of Nothing -> return () Just t -> let s = loggedTimestamp l - t ms = s * 1000000 in delay (ceiling ms) case loggedActivity l of ActivityEntered {} -> return () ActivitySeen a -> case activity a of Rejected {} -> return () Proto s -> do B.hPut stdout (val (seenData s)) hFlush stdout go (Just $ loggedTimestamp l) ls