Keep track of rooms & users not in rooms

This commit is contained in:
qvalentin 2023-01-28 19:08:33 +01:00
parent f0e0d93b05
commit 59dcb2a2e7
7 changed files with 242 additions and 46 deletions

View file

@ -27,7 +27,8 @@ updateRoomState ::
m ()
updateRoomState newData = do
state <- getRoomsState <$> ask
putMVar state newData
_ <- swapMVar state newData
return ()
roomStateDiffers ::
( HasRoomsState env,
@ -37,9 +38,8 @@ roomStateDiffers ::
RoomsData ->
m Bool
roomStateDiffers newData = do
state <- getRoomsState <$> ask
current <- readMVar state
return $ eqIgnoreOrdering newData current
currentData <- ask >>= readMVar . getRoomsState
return $ not $ eqIgnoreOrdering newData currentData
eqIgnoreOrdering :: (Eq a) => [a] -> [a] -> Bool
eqIgnoreOrdering a b = length a == length b && all (`elem` b) a

View file

@ -0,0 +1,20 @@
{-# LANGUAGE DeriveGeneric #-}
module Types.UsersData
( UsersData (..),
)
where
import ClassyPrelude
import Data.Aeson (ToJSON)
import Types.RoomData (RoomsData)
data UsersData = UsersData
{ roomsData :: RoomsData,
userWithOutRoom :: UsersWithoutRoom
}
deriving (Generic, Show)
instance ToJSON UsersData
type UsersWithoutRoom = [Text]

View file

@ -0,0 +1,33 @@
module Types.WebEnv
( HasWebEnv (..),
WebEnv (..),
)
where
import ClassyPrelude
import Network.Wai (Request, Response, ResponseReceived)
import Types.AppTypes
( Env (..),
HasConnectedClientState (getConnectedClientState),
)
import Types.RoomsState (HasRoomsState (getRoomsState))
class HasWebEnv a where
getRequest :: a -> Request
getRespond :: a -> (Response -> IO ResponseReceived)
data WebEnv = WebEnv
{ appEnv :: Env,
request :: Request,
respond :: Response -> IO ResponseReceived
}
instance HasConnectedClientState WebEnv where
getConnectedClientState = connectedClientsState . appEnv
instance HasRoomsState WebEnv where
getRoomsState = roomsState . appEnv
instance HasWebEnv WebEnv where
getRequest = request
getRespond = respond