module Development.Bake.Server.Memory(
ClientInfo(..), Memory(..),
newMemory, stateFailure
) where
import Development.Bake.Server.Store
import qualified Data.Map as Map
import Development.Bake.Core.Type
import Data.Time
import Development.Bake.Core.Message
import Control.DeepSeq
import qualified Data.Set as Set
import Data.Tuple.Extra
import Data.List.Extra
import Data.Maybe
stateFailure = toState ""
data ClientInfo = ClientInfo
{ciPingTime :: UTCTime
,ciPing :: Ping
,ciAlive :: Bool
,ciTests :: Map.Map (Point, Maybe Test) Bool
} deriving (Eq,Show)
data Memory = Memory
{simulated :: Bool
,admins :: [Author]
,store :: Store
,fatal :: [String]
,clients :: Map.Map Client ClientInfo
,running :: [(UTCTime, Question)]
,paused :: Bool
,active :: Point
} deriving Show
newMemory :: Store -> (State, Answer) -> IO Memory
newMemory store (state, answer) = do
store <- storeUpdate store [IUState state answer Nothing]
let ps = map fst $ sortOn (paQueued . snd) $
filter (isJust . paStart . snd) $
map (id &&& storePatch store) $ Set.toList $ storeAlive store
return $ Memory False [] store [] Map.empty [] False (state, ps)
instance NFData Memory where
rnf Memory{..} = ()