Copyright | (c) Phil Hargett 2015 |
---|---|
License | MIT (see LICENSE file) |
Maintainer | phil@haphazardhouse.net |
Stability | experimental |
Portability | non-portable (uses STM) |
Safe Haskell | None |
Language | Haskell98 |
- call :: (Serialize a, Serialize b) => CallSite -> Name -> Method -> a -> IO b
- callWithTimeout :: (Serialize a, Serialize r) => CallSite -> Name -> Method -> Int -> a -> IO (Maybe r)
- gcallWithTimeout :: (Serialize a, Serialize r) => CallSite -> [Name] -> Method -> Int -> a -> IO (Map Name (Maybe r))
- hear :: (Serialize a, Serialize r) => Endpoint -> Name -> Method -> IO (a, Reply r)
- hearTimeout :: (Serialize a, Serialize r) => Endpoint -> Name -> Method -> Int -> IO (Maybe (a, Reply r))
- handle :: (Serialize a, Serialize r) => Endpoint -> Name -> Method -> (a -> IO r) -> IO HandleSite
- typedMethodSelector :: Serialize a => Method -> Message -> Maybe (Name, RequestId, a)
- module Network.RPC
Documentation
call :: (Serialize a, Serialize b) => CallSite -> Name -> Method -> a -> IO b Source #
Call a method with the provided arguments on the recipient with the given name.
The caller will wait until a matching response is received.
callWithTimeout :: (Serialize a, Serialize r) => CallSite -> Name -> Method -> Int -> a -> IO (Maybe r) Source #
Call a method with the provided arguments on the recipient with the given name.
A request will be made through the CallSite'
s Endpoint
, and then
the caller will wait until a matching response is received. If a response
is received within the provided timeout (measured in microseconds), then
return the value wrapped in Just
; otherwise, if the timeout expires
before the call returns, then return 'Nothing.
gcallWithTimeout :: (Serialize a, Serialize r) => CallSite -> [Name] -> Method -> Int -> a -> IO (Map Name (Maybe r)) Source #
Group call or RPC but with a timeout: call a method with the provided arguments on all the
recipients with the given names. A request will be made through the CallSite'
s Endpoint
,
and then the caller will wait until all matching responses are received or the timeout occurs.
The returned Map
has a key for every Name
that was a target of the call, and the value
of that key will be Nothing
if no response was received before the timeout, or Just value
if a response was received.
hear :: (Serialize a, Serialize r) => Endpoint -> Name -> Method -> IO (a, Reply r) Source #
Wait for a single incoming request to invoke the indicated Method
on the specified
Endpoint
. Return both the method arguments and a Reply
function useful for sending
the reply. A good pattern for using hear
will pattern match the result to a tuple of
the form (args,reply)
, then use the args as needed to compute a result, and then
finally send the result back to the client by simply passing the result to reply: reply result
.
The invoker of hear
must supply the Name
they have bound to the Endpoint
, as this
helps the original requestor of the RPC differentiate responses when the RPC was a group
call.
hearTimeout :: (Serialize a, Serialize r) => Endpoint -> Name -> Method -> Int -> IO (Maybe (a, Reply r)) Source #
handle :: (Serialize a, Serialize r) => Endpoint -> Name -> Method -> (a -> IO r) -> IO HandleSite Source #
Handle all RPCs to invoke the indicated Method
on the specified Endpoint
,
until hangup
is called on the returned HandleSite
.
typedMethodSelector :: Serialize a => Method -> Message -> Maybe (Name, RequestId, a) Source #
A method selector that only matches if the message deserializes into a type that matches arguments to a call.
module Network.RPC