{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PackageImports #-} -- | MessagePack RPC Client based on WebSocket. module Network.MessagePack.RPC.Client.WebSocket ( -- * Config Config(..) , NotificationHandler , RequestHandler , Logger , Formatter , defaultConfig -- * Backend , Backend(..) -- * Client , URL , Client , withClient , shutdown -- * Call and reply , 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) -- | URL for websocket end points. type URL = String -- | Executing the action in the 3rd argument with a 'Client'. withClient :: URL -- ^ URL -> Config -- ^ Configuration -> (Client -> IO a) -- ^ Action -> 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