2018-04-11 13:25:24 +02:00
|
|
|
{-# LANGUAGE NamedFieldPuns #-}
|
2018-05-11 12:31:53 +02:00
|
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
2018-04-11 13:25:24 +02:00
|
|
|
module Session (
|
2018-05-11 12:31:53 +02:00
|
|
|
Status(..)
|
2018-04-11 13:25:24 +02:00
|
|
|
, T(..)
|
2018-05-13 18:08:12 +02:00
|
|
|
, Update
|
2018-05-11 12:31:53 +02:00
|
|
|
, open
|
2018-04-11 13:25:24 +02:00
|
|
|
) where
|
|
|
|
|
2018-04-18 15:27:59 +02:00
|
|
|
import Network.WebSockets (Connection)
|
2019-08-24 23:29:40 +02:00
|
|
|
import Hanafuda.KoiKoi (GameID, PlayerID)
|
2018-05-11 12:31:53 +02:00
|
|
|
import qualified Data (RW(..))
|
|
|
|
|
|
|
|
data Status =
|
|
|
|
LoggedIn Bool
|
2019-08-24 23:29:40 +02:00
|
|
|
| Answering PlayerID
|
|
|
|
| Waiting PlayerID
|
|
|
|
| Playing GameID
|
|
|
|
deriving (Show)
|
2018-04-11 13:25:24 +02:00
|
|
|
|
|
|
|
data T = T {
|
2018-05-11 12:31:53 +02:00
|
|
|
connection :: Connection
|
|
|
|
, status :: Status
|
2018-04-11 13:25:24 +02:00
|
|
|
}
|
2018-05-13 18:08:12 +02:00
|
|
|
type Update = T -> T
|
2018-04-11 13:25:24 +02:00
|
|
|
|
2018-05-11 12:31:53 +02:00
|
|
|
instance Data.RW Status T where
|
|
|
|
get = status
|
|
|
|
set status session = session {status}
|
2018-04-11 13:25:24 +02:00
|
|
|
|
2018-05-11 12:31:53 +02:00
|
|
|
open :: Connection -> T
|
|
|
|
open connection = T {
|
|
|
|
connection
|
|
|
|
, status = LoggedIn False
|
|
|
|
}
|