{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE CPP #-}
module Miso.WebSocket
(
connect
, connectJSON
, connectText
, connectBLOB
, connectArrayBuffer
, sendText
, sendJSON
, sendBLOB
, sendArrayBuffer
, close
, socketState
, emptyWebSocket
, WebSocket (..)
, URL
, SocketState (..)
, CloseCode (..)
, Closed (..)
, Payload (..)
, Blob (..)
, ArrayBuffer (..)
) where
import Data.Aeson
import Miso.Effect
import Miso.Runtime
import Miso.String (MisoString)
import Miso.FFI (Blob(..), ArrayBuffer(..))
connect
:: FromJSON json
=> URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Payload json -> action)
-> (MisoString -> action)
-> Effect parent model action
connect :: forall json action parent model.
FromJSON json =>
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Payload json -> action)
-> (URL -> action)
-> Effect parent model action
connect = URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Payload json -> action)
-> (URL -> action)
-> Effect parent model action
forall json action parent model.
FromJSON json =>
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Payload json -> action)
-> (URL -> action)
-> Effect parent model action
websocketConnect
connectJSON
:: FromJSON json
=> URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (json -> action)
-> (MisoString -> action)
-> Effect parent model action
connectJSON :: forall json action parent model.
FromJSON json =>
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (json -> action)
-> (URL -> action)
-> Effect parent model action
connectJSON = URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (json -> action)
-> (URL -> action)
-> Effect parent model action
forall json action parent model.
FromJSON json =>
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (json -> action)
-> (URL -> action)
-> Effect parent model action
websocketConnectJSON
connectText
:: URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (MisoString -> action)
-> (MisoString -> action)
-> Effect parent model action
connectText :: forall action parent model.
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (URL -> action)
-> (URL -> action)
-> Effect parent model action
connectText = URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (URL -> action)
-> (URL -> action)
-> Effect parent model action
forall action parent model.
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (URL -> action)
-> (URL -> action)
-> Effect parent model action
websocketConnectText
connectBLOB
:: URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Blob -> action)
-> (MisoString -> action)
-> Effect parent model action
connectBLOB :: forall action parent model.
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Blob -> action)
-> (URL -> action)
-> Effect parent model action
connectBLOB = URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Blob -> action)
-> (URL -> action)
-> Effect parent model action
forall action parent model.
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (Blob -> action)
-> (URL -> action)
-> Effect parent model action
websocketConnectBLOB
connectArrayBuffer
:: URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (ArrayBuffer -> action)
-> (MisoString -> action)
-> Effect parent model action
connectArrayBuffer :: forall action parent model.
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (ArrayBuffer -> action)
-> (URL -> action)
-> Effect parent model action
connectArrayBuffer = URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (ArrayBuffer -> action)
-> (URL -> action)
-> Effect parent model action
forall action parent model.
URL
-> (WebSocket -> action)
-> (Closed -> action)
-> (ArrayBuffer -> action)
-> (URL -> action)
-> Effect parent model action
websocketConnectArrayBuffer
sendJSON
:: ToJSON json
=> WebSocket
-> json
-> Effect parent model action
sendJSON :: forall json parent model action.
ToJSON json =>
WebSocket -> json -> Effect parent model action
sendJSON WebSocket
socket json
x = WebSocket -> Payload json -> Effect parent model action
forall value parent model action.
ToJSON value =>
WebSocket -> Payload value -> Effect parent model action
websocketSend WebSocket
socket (json -> Payload json
forall value. value -> Payload value
JSON json
x)
sendBLOB
:: WebSocket
-> Blob
-> Effect parent model action
sendBLOB :: forall parent model action.
WebSocket -> Blob -> Effect parent model action
sendBLOB WebSocket
socket Blob
x = forall value parent model action.
ToJSON value =>
WebSocket -> Payload value -> Effect parent model action
websocketSend @() WebSocket
socket (Blob -> Payload ()
forall value. Blob -> Payload value
blob Blob
x)
sendArrayBuffer
:: WebSocket
-> ArrayBuffer
-> Effect parent model action
sendArrayBuffer :: forall parent model action.
WebSocket -> ArrayBuffer -> Effect parent model action
sendArrayBuffer WebSocket
socket ArrayBuffer
x = forall value parent model action.
ToJSON value =>
WebSocket -> Payload value -> Effect parent model action
websocketSend @() WebSocket
socket (ArrayBuffer -> Payload ()
forall value. ArrayBuffer -> Payload value
arrayBuffer ArrayBuffer
x)
sendText
:: WebSocket
-> MisoString
-> Effect parent model action
sendText :: forall parent model action.
WebSocket -> URL -> Effect parent model action
sendText WebSocket
socket URL
x = forall value parent model action.
ToJSON value =>
WebSocket -> Payload value -> Effect parent model action
websocketSend @() WebSocket
socket (URL -> Payload ()
forall value. URL -> Payload value
TEXT URL
x)
close
:: WebSocket
-> Effect parent model action
close :: forall parent model action. WebSocket -> Effect parent model action
close = WebSocket -> Effect parent model action
forall parent model action. WebSocket -> Effect parent model action
websocketClose