36 lines
657 B
Haskell
36 lines
657 B
Haskell
{-# LANGUAGE NamedFieldPuns #-}
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
|
module Session (
|
|
Status(..)
|
|
, T(..)
|
|
, Update
|
|
, open
|
|
) where
|
|
|
|
import Network.WebSockets (Connection)
|
|
import Hanafuda.KoiKoi (GameID, PlayerID)
|
|
import qualified Data (RW(..))
|
|
|
|
data Status =
|
|
LoggedIn Bool
|
|
| Answering PlayerID
|
|
| Waiting PlayerID
|
|
| Playing GameID
|
|
deriving (Show)
|
|
|
|
data T = T {
|
|
connection :: Connection
|
|
, status :: Status
|
|
}
|
|
type Update = T -> T
|
|
|
|
instance Data.RW Status T where
|
|
get = status
|
|
set status session = session {status}
|
|
|
|
open :: Connection -> T
|
|
open connection = T {
|
|
connection
|
|
, status = LoggedIn False
|
|
}
|