module Eventloop.Module.StdOut.StdOut

    ( setupStdOutModuleConfiguration

    , stdOutModuleIdentifier

    , stdOutEventSender

    ) where



import System.IO



import Control.Concurrent.MVar

import Control.Concurrent.SafePrint



import Eventloop.Module.StdOut.Types

import Eventloop.Types.Common

import Eventloop.Types.Events

import Eventloop.Types.System



setupStdOutModuleConfiguration :: EventloopSetupModuleConfiguration

setupStdOutModuleConfiguration = ( EventloopSetupModuleConfiguration 

                                    stdOutModuleIdentifier

                                    Nothing

                                    Nothing

                                    Nothing

                                    Nothing

                                    (Just stdOutEventSender)

                                    Nothing

                                  )



stdOutModuleIdentifier :: EventloopModuleIdentifier

stdOutModuleIdentifier = "stdout"





stdOutEventSender :: EventSender

stdOutEventSender _ _ _ _ Stop = return ()

stdOutEventSender sharedConst sharedIOT ioConst ioStateT (OutStdOut (StdOutMessage str))

    = do

        safePrint token str

        hFlush stdout

    where

        token = safePrintToken sharedConst