{-# 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 )
import Data.Morpheus.Types.Internal.Resolving
( SubEvent )
type GQLState m e = MVar (ClientDB m e)
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)
<> "}"