websockets-rpc 0.0.2 → 0.1.0
raw patch · 3 files changed
+15/−12 lines, 3 files
Files
- example/Main-Client.hs +3/−0
- src/Network/WebSockets/RPC.hs +11/−11
- websockets-rpc.cabal +1/−1
example/Main-Client.hs view
@@ -51,6 +51,9 @@ liftIO $ putStrLn "Subscribing Foo..." dispatch RPCClient { subscription = Foo+ , onSubscribe = \RPCClientParams{supply,cancel} -> do+ liftIO $ putStrLn "Supplying Bar..."+ supply Bar , onReply = \RPCClientParams{supply,cancel} Baz -> do liftIO $ print Baz liftIO $ threadDelay 1000000
src/Network/WebSockets/RPC.hs view
@@ -14,9 +14,9 @@ , WebSocketRPCException (..) ) where -import Network.WebSockets.RPC.Trans.Server ( WebSocketServerRPCT, runWebSocketServerRPCT', getServerEnv, execWebSocketServerRPCT+import Network.WebSockets.RPC.Trans.Server ( WebSocketServerRPCT, execWebSocketServerRPCT , registerSubscribeSupply, runSubscribeSupply, unregisterSubscribeSupply)-import Network.WebSockets.RPC.Trans.Client ( WebSocketClientRPCT, runWebSocketClientRPCT', getClientEnv, execWebSocketClientRPCT+import Network.WebSockets.RPC.Trans.Client ( WebSocketClientRPCT, execWebSocketClientRPCT , registerReplyComplete, runReply, runComplete, unregisterReplyComplete , freshRPCID )@@ -31,6 +31,7 @@ import Control.Monad (forever, void) import Control.Monad.IO.Class (liftIO, MonadIO) import Control.Monad.Catch (MonadThrow, throwM)+import Control.Monad.Trans (lift) import Control.Concurrent (threadDelay) import qualified Control.Concurrent.Async as Async @@ -66,7 +67,6 @@ let runSub :: Subscribe sub -> WebSocketServerRPCT sub sup m () runSub (Subscribe RPCIdentified{_ident,_params}) = do- env <- getServerEnv let reply :: rep -> m () reply rep =@@ -76,8 +76,7 @@ complete :: com -> m () complete com = let c = Complete RPCIdentified{_ident, _params = com}- in do liftIO (sendDataMessage conn (Text (encode c)))- runWebSocketServerRPCT' env (unregisterSubscribeSupply _ident)+ in liftIO (sendDataMessage conn (Text (encode c))) cont :: Either sub sup -> m () cont = f RPCServerParams{reply,complete}@@ -122,6 +121,8 @@ data RPCClient sub sup rep com m = RPCClient { subscription :: !sub+ , onSubscribe :: RPCClientParams sup m+ -> m () , onReply :: RPCClientParams sup m -> rep -> m () -- ^ handle incoming reply@@ -141,20 +142,19 @@ => ((RPCClient sub sup rep com m -> WebSocketClientRPCT rep com m ()) -> WebSocketClientRPCT rep com m ()) -> ClientAppT (WebSocketClientRPCT rep com m) () rpcClient userGo conn =- let go RPCClient{subscription,onReply,onComplete} = do+ let go :: RPCClient sub sup rep com m -> WebSocketClientRPCT rep com m ()+ go RPCClient{subscription,onSubscribe,onReply,onComplete} = do _ident <- freshRPCID liftIO (sendDataMessage conn (Text (encode (Subscribe RPCIdentified{_ident, _params = subscription})))) - env <- getClientEnv- let supply :: sup -> m () supply sup = liftIO (sendDataMessage conn (Text (encode (Supply RPCIdentified{_ident, _params = Just sup})))) cancel :: m ()- cancel = do- liftIO (sendDataMessage conn (Text (encode (Supply RPCIdentified{_ident, _params = Nothing :: Maybe ()}))))- runWebSocketClientRPCT' env (unregisterReplyComplete _ident)+ cancel = liftIO (sendDataMessage conn (Text (encode (Supply RPCIdentified{_ident, _params = Nothing :: Maybe ()}))))++ lift (onSubscribe RPCClientParams{supply,cancel}) registerReplyComplete _ident (onReply RPCClientParams{supply,cancel}) onComplete
websockets-rpc.cabal view
@@ -1,5 +1,5 @@ Name: websockets-rpc-Version: 0.0.2+Version: 0.1.0 Author: Athan Clark <athan.clark@gmail.com> Maintainer: Athan Clark <athan.clark@gmail.com> License: BSD3