{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PackageImports #-}
module Network.MessagePack.RPC.Client.WebSocket
(
Config(..)
, NotificationHandler
, RequestHandler
, Logger
, Formatter
, defaultConfig
, Backend(..)
, URL
, Client
, withClient
, shutdown
, Result
, call
, reply
)
where
import qualified Data.Text as T
import qualified "wss-client" Network.WebSockets.Client as Ws
import Network.MessagePack.RPC.Client hiding (withClient)
import qualified Network.MessagePack.RPC.Client as RPC (withClient)
type URL = String
withClient
:: URL
-> Config
-> (Client -> IO a)
-> IO a
withClient url config action = Ws.withConnection url $ \conn ->
Ws.withPingThread conn 30 (return ()) $ do
let backend = Backend (Ws.sendBinaryData conn)
(Ws.receiveData conn)
(Ws.sendClose conn ("Bye!" :: T.Text))
RPC.withClient config backend action