module Role.Watcher where import Types import Log import Pty import CmdLine import SessionID import Role.Developer import Control.Concurrent.STM import Control.Concurrent.STM.TMChan import Data.Time.Clock.POSIX run :: WatchOpts -> IO () run = run' watcher . watchUrl watcher :: TMVar (TVar DeveloperState) -> TMChan (Message Entered) -> TMChan AnyMessage -> SessionID -> IO () watcher dsv _ichan ochan sid = withSessionLogger sid $ \logger -> inRawMode $ do (st, startoutput) <- processSessionStart ochan logger dsv emitOutput startoutput go logger st where go logger st = do ts <- getPOSIXTime v <- atomically $ getServerMessage ochan st ts case v of Nothing -> return () Just (o, msg) -> do _ <- logger msg emitOutput o go logger st