37 lines
797 B
Haskell
37 lines
797 B
Haskell
{-# LANGUAGE NamedFieldPuns #-}
|
|
module Session (
|
|
ID
|
|
, Status
|
|
, T(..)
|
|
, Update
|
|
, open
|
|
, setPlayer
|
|
) where
|
|
|
|
import Data.Text (Text)
|
|
import qualified Hanafuda.ID as Hanafuda (ID, IDType(..), Prefix(..))
|
|
import Hanafuda.KoiKoi (PlayerID)
|
|
import Network.WebSockets (Connection)
|
|
import qualified Player (T(..))
|
|
|
|
type ID = Hanafuda.ID T
|
|
instance Hanafuda.IDType T where
|
|
prefix = Hanafuda.Prefix "Session"
|
|
type Status = Maybe Player.T
|
|
data T = T {
|
|
connection :: Connection
|
|
, player :: Status
|
|
}
|
|
type Update = T -> T
|
|
|
|
setPlayer :: PlayerID -> Text -> Session.Update
|
|
setPlayer playerID name session = session {
|
|
player = Just $ Player.T {Player.playerID, Player.name}
|
|
}
|
|
|
|
open :: Connection -> T
|
|
open connection = T {
|
|
connection
|
|
, player = Nothing
|
|
}
|