Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
The term server in this context refers to a thread that handles method calls for a particular capability (The capnproto rpc protocol itself has no concept of clients and servers).
Synopsis
- class Server a where
- data ServerOps = ServerOps {
- handleCall :: Word64 -> Word16 -> MethodHandler (Maybe (Ptr 'Const)) (Maybe (Ptr 'Const))
- handleStop :: IO ()
- handleCast :: forall a. Typeable a => Maybe a
- data CallInfo = CallInfo {}
- runServer :: Q CallInfo -> ServerOps -> IO ()
- data MethodHandler p r
- type UntypedMethodHandler = MethodHandler (Maybe (Ptr 'Const)) (Maybe (Ptr 'Const))
- handleUntypedMethod :: UntypedMethodHandler -> Maybe (Ptr 'Const) -> Fulfiller (Maybe (Ptr 'Const)) -> IO ()
- untypedHandler :: (Maybe (Ptr 'Const) -> Fulfiller (Maybe (Ptr 'Const)) -> IO ()) -> MethodHandler (Maybe (Ptr 'Const)) (Maybe (Ptr 'Const))
- toUntypedHandler :: MethodHandler p r -> UntypedMethodHandler
- fromUntypedHandler :: UntypedMethodHandler -> MethodHandler p r
Documentation
Base class for things that can act as capnproto servers.
Nothing
shutdown :: a -> IO () Source #
Called when the last live reference to a server is dropped.
unwrap :: Typeable b => a -> Maybe b Source #
Try to extract a value of a given type. The default implementation
always fails (returns Nothing
). If an instance chooses to implement
this, it will be possible to use "reflection" on clients that point
at local servers to dynamically unwrap the server value. A typical
implementation will just call Typeable's cast
method, but this
needn't be the case -- a server may wish to allow local peers to
unwrap some value that is not exactly the data the server has access
to.
The operations necessary to receive and handle method calls, i.e. to implement an object. It is parametrized over the monadic context in which methods are serviced.
ServerOps | |
|
runServer :: Q CallInfo -> ServerOps -> IO () Source #
Handle incoming messages for a given object.
Accepts a queue of messages to handle, and ServerOps
used to handle them.
returns when it receives a Stop
message.
Handling methods
data MethodHandler p r Source #
a
handles a method call with parameters MethodHandler
p rp
and return type r
.
The library represents method handlers via an abstract type
MethodHandler
, parametrized over parameter (p
) and return (r
)
types, and the monadic context in which it runs (m
). This allows us
to provide different strategies for actually handling methods; there
are various helper functions which construct these handlers.
At some point we will likely additionally provide handlers affording:
- Working directly with the low-level data types.
- Replying to the method call asynchronously, allowing later method calls to be serviced before the current one is finished.
type UntypedMethodHandler = MethodHandler (Maybe (Ptr 'Const)) (Maybe (Ptr 'Const)) Source #
Alias for a MethodHandler
whose parameter and return types are
untyped pointers.
handleUntypedMethod :: UntypedMethodHandler -> Maybe (Ptr 'Const) -> Fulfiller (Maybe (Ptr 'Const)) -> IO () Source #
Working with untyped data
untypedHandler :: (Maybe (Ptr 'Const) -> Fulfiller (Maybe (Ptr 'Const)) -> IO ()) -> MethodHandler (Maybe (Ptr 'Const)) (Maybe (Ptr 'Const)) Source #
Construct a method handler from a function accepting an untyped
pointer for the method's parameter, and a Fulfiller
which accepts
an untyped pointer for the method's return value.
toUntypedHandler :: MethodHandler p r -> UntypedMethodHandler Source #
Convert a MethodHandler
for any parameter and return types into
one that deals with untyped pointers.
fromUntypedHandler :: UntypedMethodHandler -> MethodHandler p r Source #
Inverse of toUntypedHandler