wizard-wipeout/src-client/Client/Game.hs
2023-12-23 11:38:57 +01:00

33 lines
686 B
Haskell

module Client.Game where
import Control.Concurrent
import qualified Control.Concurrent.STM as STM
import Control.Monad
import Control.Monad.Loops
import Control.Monad.RWS
-- internal imports
import Client.Communication
import Client.Types
import Library.Types
runGame :: Game ()
runGame = do
sock <- asks rcSocket
queue <- asks rcQueue
clientId <- asks rcClientUUID
recvThread <- liftIO $ forkIO $ forever $ receiveMessage sock queue
liftIO $ sendMessage (ClientMessage clientId ClientReady) sock
whileM_
(not . clientStop <$> (liftIO . STM.atomically . STM.readTMVar =<< gets scClientState))
(do
handleMessages
)
liftIO $ killThread recvThread