{-# LANGUAGE NamedFieldPuns #-} module Data.Morpheus.Types.Internal.WebSocket ( GQLClient(..) , ClientID , ClientDB , GQLState , SesionID ) where import Data.Semigroup ( (<>) ) import Data.Text ( Text ) import Data.UUID ( UUID ) import Network.WebSockets ( Connection ) import Data.HashMap.Lazy ( HashMap , keys) import Control.Concurrent ( MVar ) -- MORPHEUS import Data.Morpheus.Types.Internal.Resolving ( SubEvent ) -- | shared GraphQL state between __websocket__ and __http__ server, -- stores information about subscriptions type GQLState m e = MVar (ClientDB m e) -- SharedState type ClientDB m e = HashMap ClientID (GQLClient m e) type ClientID = UUID type SesionID = Text data GQLClient m e = GQLClient { clientID :: ClientID , clientConnection :: Connection , clientSessions :: HashMap SesionID (SubEvent m e) } instance (Show e) => Show (GQLClient m e) where show GQLClient { clientID, clientSessions } = "GQLClient {id:" <> show clientID <> ", sessions:" <> show (keys clientSessions) <> "}"