module Network.WebSockets.Protocol
( Protocol (..)
, TextProtocol
, BinaryProtocol
, close
, ping
, pong
, textData
, binaryData
) where
import Blaze.ByteString.Builder (Builder)
import System.Random (RandomGen)
import qualified Data.ByteString as B
import qualified Data.Enumerator as E
import Network.WebSockets.Types
import Network.WebSockets.Handshake.Http
import qualified Network.WebSockets.Protocol.Unsafe as Unsafe
class Protocol p where
version :: p -> String
headerVersions :: p -> [B.ByteString]
supported :: p -> RequestHttpPart -> Bool
supported p h = case getSecWebSocketVersion h of
Just v -> v `elem` headerVersions p
_ -> False
encodeMessages :: (Monad m, RandomGen g)
=> p
-> g
-> E.Enumeratee (Message p) Builder m a
decodeMessages :: Monad m => p -> E.Enumeratee B.ByteString (Message p) m a
finishRequest :: Monad m
=> p -> RequestHttpPart
-> E.Iteratee B.ByteString m Request
implementations :: [p]
class Protocol p => TextProtocol p
class TextProtocol p => BinaryProtocol p
close :: (TextProtocol p, WebSocketsData a) => a -> Message p
close = Unsafe.close
ping :: (BinaryProtocol p, WebSocketsData a) => a -> Message p
ping = Unsafe.ping
pong :: (BinaryProtocol p, WebSocketsData a) => a -> Message p
pong = Unsafe.pong
textData :: (TextProtocol p, WebSocketsData a) => a -> Message p
textData = Unsafe.textData
binaryData :: (BinaryProtocol p, WebSocketsData a) => a -> Message p
binaryData = Unsafe.binaryData