RpcReader - read RPC requests from a client


SYNOPSIS

       #include <Dispatch/rpcreader.h>


DESCRIPTION

       An  RpcReader  reads  RPC requests from an rpcstream which
       represents a connection to a client.  When it reads an RPC
       request, it uses the request number to look up the address
       of a function in an  array  and  calls  that  function  to
       unmarshall   the   request's  arguments  and  execute  the
       request.

       An RpcReader is not instantiable; you have to implement  a
       derived  class  which  initializes the function array with
       addresses of static member  functions  to  unmarshall  RPC
       requests and which defines the action to be performed when
       the client closes  the  connection.   The  function  array
       looks like this:

            typedef void (*PF)(RpcReader*, RpcHdr&, rpcstream&);
            PF* _function;

       Each function stored in the array should extract any argu-
       ments needed by the RPC request from the  rpcstream,  exe-
       cute  the  RPC  request, and insert any return values into
       the rpcstream so they can be sent back to the client.


CONSTRUCTORS

       RpcReader(rpcstream* client, int nfcns)
       RpcReader(int fd, int nfcns, boolean binary = true)
              If given a non-nil rpcstream, prepare to  read  RPC
              requests  from the client using it.  If given a nil
              rpcstream, just allocate the  function  array.   If
              given a file descriptor, create a new rpcstream and
              prepare to read RPC requests from the client  using
              it.   ``nfcns'' sets the size of the function array
              that each constructor allocates.


PROTECTED OPERATIONS

       virtual int inputReady(int)
              Read an RPC request (only one request per  call  so
              the  program can service RPC requests from multiple
              connections in round robin fashion).  Look  up  the
              appropriate  function  in  the  reader's or another
              reader's function array and call it to  handle  the
              RPC request.  Return the appropriate status to tell
              the Dispatcher whether  to  detach  the  RpcReader,
              call  inputReady again, or wait for new data before
              calling inputReady again.  A derived  class  should
              not need to redefine this function.

              You  can  redefine  this  function  to change which
              reader executes an RPC  request  after  it's  read.
              Ordinarily  the  same  reader  that  reads  an  RPC
              request also executes it,  but  you  can  hand  the
              request off to another reader as well.

       virtual void connectionClosed(int fd) = 0
              You  have  to  define this function since it may be
              your only chance to perform cleanup (such as delet-
              ing this) when the client closes the connection.


SEE ALSO

       RpcHdr(3I), RpcService(3I), rpcstream(3I)








































Man(1) output converted with man2html