Keep track of rooms & users not in rooms
This commit is contained in:
parent
f0e0d93b05
commit
59dcb2a2e7
7 changed files with 242 additions and 46 deletions
|
@ -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
|
||||
|
|
20
backend/src/Types/UsersData.hs
Normal file
20
backend/src/Types/UsersData.hs
Normal 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]
|
33
backend/src/Types/WebEnv.hs
Normal file
33
backend/src/Types/WebEnv.hs
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue