| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
Capnp.Rpc.Server
Description
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.
Minimal complete definition
Nothing
Methods
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.
Constructors
| ServerOps | |
| Fields 
 | |
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 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