t3-server-0.1.0: src/T3/Server/Dispatch.hs
module T3.Server.Dispatch where
import Prelude
import Control.Concurrent
import T3.Game
import T3.Match
data UserConfig = UserConfig
{ userCfgUserName :: UserName
, userCfgMatchToken :: MatchToken
, userCfgSendLoc :: (Loc, Callback) -> IO ()
}
data MatchConfig = MatchConfig
{ matchCfgX :: UserConfig
, matchCfgO :: UserConfig
, matchCfgDie :: IO ()
}
forkMatch
:: Maybe Seconds
-> (UserName, MatchToken, Callback)
-> (UserName, MatchToken, Callback)
-> ([Action] -> Board -> Result -> IO ())
-> IO ()
-> IO MatchConfig
forkMatch timeoutLimit (xUI, xGT, xCB) (oUI, oGT, oCB) logger done = do
xChan <- newChan
oChan <- newChan
let x = (xCB, readChan xChan)
let o = (oCB, readChan oChan)
thid <- forkIO $ runMatch timeoutLimit x o logger done
return $ MatchConfig
(UserConfig xUI xGT (writeChan xChan))
(UserConfig oUI oGT (writeChan oChan))
(killThread thid >> done)