42 lines
885 B
Haskell
42 lines
885 B
Haskell
{-# LANGUAGE NamedFieldPuns #-}
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
module Session (
|
|
Status(..)
|
|
, T(..)
|
|
, open
|
|
) where
|
|
|
|
import Network.WebSockets (Connection)
|
|
import Data.Aeson (ToJSON(..), genericToEncoding)
|
|
import GHC.Generics (Generic)
|
|
import qualified JSON (singleLCField)
|
|
import qualified Data (RW(..))
|
|
import qualified Player (Key)
|
|
import qualified Game (Key)
|
|
|
|
data Status =
|
|
LoggedIn Bool
|
|
| Answering Player.Key
|
|
| Waiting Player.Key
|
|
| Playing Game.Key
|
|
deriving (Show, Generic)
|
|
|
|
instance ToJSON Status where
|
|
toEncoding = genericToEncoding JSON.singleLCField
|
|
|
|
data T = T {
|
|
connection :: Connection
|
|
, status :: Status
|
|
}
|
|
|
|
instance Data.RW Status T where
|
|
get = status
|
|
set status session = session {status}
|
|
|
|
open :: Connection -> T
|
|
open connection = T {
|
|
connection
|
|
, status = LoggedIn False
|
|
}
|