ulxr::MultiThreadRpcServer Class Reference
[XML-RPC handling]

A multi threaded xml rpc server. More...

#include <ulxr_mtrpc_server.h>

Inheritance diagram for ulxr::MultiThreadRpcServer:

Inheritance graph
[legend]
Collaboration diagram for ulxr::MultiThreadRpcServer:

Collaboration graph
[legend]
List of all members.

Public Types

typedef void *(*) ThreadLoopFunction (ThreadData *)

Public Member Functions

 MultiThreadRpcServer (Protocol *prot, unsigned num, bool wbxml_mode=false)
 Constructs the rpc server.
virtual ~MultiThreadRpcServer ()
 Destrcuts the rpc server.
unsigned dispatchAsync ()
 Lauch the rpc server threads which wait for requests.
unsigned numThreads () const
 Gets the number of installed threads.
void terminateAllThreads (unsigned time=0)
 Terminates all threads.
void shutdownAllThreads (unsigned time=0)
 Signals termination and shuts down all ports.
void waitAsync (bool term, bool stat=false)
 Waits for all threads to complete.
void addMethod (MethodAdder::StaticMethodCall_t adr, const CppString &ret_signature, const CppString &name, const CppString &signature, const CppString &help)
 Adds a user defined (static) method to the dispatcher.
void addMethod (MethodAdder::DynamicMethodCall_t wrapper, const CppString &ret_signature, const CppString &name, const CppString &signature, const CppString &help)
 Adds a user defined (dynamic) method to the dispatcher.
void addMethod (MethodAdder::SystemMethodCall_t adr, const CppString &ret_signature, const CppString &name, const CppString &signature, const CppString &help)
 Adds a system internal method to the dispatcher.
void addMethod (MethodAdder::StaticMethodCall_t adr, const Signature &ret_signature, const CppString &name, const Signature &signature, const CppString &help)
 Adds a user defined (static) method to the dispatcher.
void addMethod (MethodAdder::DynamicMethodCall_t wrapper, const Signature &ret_signature, const CppString &name, const Signature &signature, const CppString &help)
 Adds a user defined (dynamic) method to the dispatcher.
void addMethod (MethodAdder::SystemMethodCall_t adr, const Signature &ret_signature, const CppString &name, const Signature &signature, const CppString &help)
 Adds a system internal method to the dispatcher.
void removeMethod (const CppString &name)
 Removes a method if available.

Protected Member Functions

virtual void forwardThreadedError (const Exception &ex) const
 Forwards error that happen within threads.
void * serverLoop (Protocol *protocol, ThreadData *td)
void printStatistics () const
 Prints some statistics about the running threads.
virtual void preProcessCall (MethodCall &call)
 Processes a call after it has been recieved and before it is dispatched.
virtual void preProcessResponse (MethodResponse &resp)
 Processes a method response before it is sent back.

Private Types

typedef void *( Thread_t )(ThreadData *)

Private Member Functions

void releaseThreads ()
 Deletes all allocated thread objects.
 MultiThreadRpcServer (const MultiThreadRpcServer &)
MultiThreadRpcServeroperator= (const MultiThreadRpcServer &)

Static Private Member Functions

static void * startThread (ThreadData *td)
 Helper method to start a thread.

Private Attributes

std::vector< ThreadData * > threads
Dispatcher dispatcher
bool wbxml_mode

Classes

class  ThreadData

Detailed Description

A multi threaded xml rpc server.

Definition at line 61 of file ulxr_mtrpc_server.h.


Member Typedef Documentation

typedef void*(*) ulxr::MultiThreadRpcServer::ThreadLoopFunction(ThreadData *)

Definition at line 66 of file ulxr_mtrpc_server.h.

typedef void*( ulxr::MultiThreadRpcServer::Thread_t)(ThreadData *) [private]

Definition at line 254 of file ulxr_mtrpc_server.h.


Constructor & Destructor Documentation

ulxr::MultiThreadRpcServer::MultiThreadRpcServer ( Protocol prot,
unsigned  num,
bool  wbxml_mode = false 
)

Constructs the rpc server.

Parameters:
prot communication object
num number of simultanous threads to handle requests
wbxml_mode true: data is sent as wbxml

Definition at line 132 of file ulxr_mtrpc_server.cpp.

References ulxr::Protocol::detach(), threads, and wbxml_mode.

ulxr::MultiThreadRpcServer::~MultiThreadRpcServer (  )  [virtual]

Destrcuts the rpc server.

Definition at line 144 of file ulxr_mtrpc_server.cpp.

References releaseThreads(), and waitAsync().

ulxr::MultiThreadRpcServer::MultiThreadRpcServer ( const MultiThreadRpcServer  )  [private]


Member Function Documentation

unsigned ulxr::MultiThreadRpcServer::dispatchAsync (  ) 

Lauch the rpc server threads which wait for requests.

Returns:
number of threads started

Definition at line 377 of file ulxr_mtrpc_server.cpp.

References ULXR_PCHAR, and ULXR_TRACE.

unsigned ulxr::MultiThreadRpcServer::numThreads (  )  const

Gets the number of installed threads.

Returns:
number of threads

Definition at line 409 of file ulxr_mtrpc_server.cpp.

void ulxr::MultiThreadRpcServer::terminateAllThreads ( unsigned  time = 0  ) 

Terminates all threads.

The threads only get a message and must terminate themselves.

Parameters:
time planned: time in ms to wait before killing.

Definition at line 415 of file ulxr_mtrpc_server.cpp.

References ULXR_PCHAR, and ULXR_TRACE.

void ulxr::MultiThreadRpcServer::shutdownAllThreads ( unsigned  time = 0  ) 

Signals termination and shuts down all ports.

This is a rather rude way to terminate to stop the servers

Parameters:
time planned: time in ms to wait before killing.

Definition at line 423 of file ulxr_mtrpc_server.cpp.

References ULXR_PCHAR, and ULXR_TRACE.

void ulxr::MultiThreadRpcServer::waitAsync ( bool  term,
bool  stat = false 
)

Waits for all threads to complete.

Parameters:
term true: signal all threads to shut down as soon as possible.
stat true: print some statistical data to stdout.

Definition at line 444 of file ulxr_mtrpc_server.cpp.

References ULXR_PCHAR, and ULXR_TRACE.

Referenced by ~MultiThreadRpcServer().

void ulxr::MultiThreadRpcServer::addMethod ( MethodAdder::StaticMethodCall_t  adr,
const CppString ret_signature,
const CppString name,
const CppString signature,
const CppString help 
) [virtual]

Adds a user defined (static) method to the dispatcher.

You access a remote method by sending the "official" name. Sometimes a method accepts different parameter sets (overloading in C++). In this case you add the according signature. Finally you can add a description to show the usage of this method.

Parameters:
adr the pointer to the implementation of the method
ret_signature the signature of the return value
name the name of the method
signature the signature of the parameters
help short usage description

Implements ulxr::MethodAdder.

Definition at line 153 of file ulxr_mtrpc_server.cpp.

void ulxr::MultiThreadRpcServer::addMethod ( MethodAdder::DynamicMethodCall_t  wrapper,
const CppString ret_signature,
const CppString name,
const CppString signature,
const CppString help 
) [virtual]

Adds a user defined (dynamic) method to the dispatcher.

You access a remote method by sending the "official" name. Sometimes a method accepts different parameter sets (overloading in C++). In this case you add the according signature. Finally you can add a description to show the usage of this method.

Parameters:
wrapper the pointer to the wrapper to the method. Important: Dispatcher owns now and deletes this wrapper object!
ret_signature the signature of the return value
name the name of the method
signature the signature of the parameters
help short usage description

Implements ulxr::MethodAdder.

Definition at line 164 of file ulxr_mtrpc_server.cpp.

void ulxr::MultiThreadRpcServer::addMethod ( MethodAdder::SystemMethodCall_t  adr,
const CppString ret_signature,
const CppString name,
const CppString signature,
const CppString help 
) [virtual]

Adds a system internal method to the dispatcher.

You access a remote method by sending the "official" name. Sometimes a method accepts different parameter sets (overloading in C++). In this case you add the according signature. Finally you can add a description to show the usage of this method.

Parameters:
adr the pointer to the implementation of the method
ret_signature the signature of the return value
name the name of the method
signature the signature of the parameters
help short usage description

Implements ulxr::MethodAdder.

void ulxr::MultiThreadRpcServer::addMethod ( MethodAdder::StaticMethodCall_t  adr,
const Signature ret_signature,
const CppString name,
const Signature signature,
const CppString help 
) [virtual]

Adds a user defined (static) method to the dispatcher.

You access a remote method by sending the "official" name. Sometimes a method accepts different parameter sets (overloading in C++). In this case you add the according signature. Finally you can add a description to show the usage of this method.

Parameters:
adr the pointer to the implementation of the method
ret_signature the signature of the return value
name the name of the method
signature the signature of the parameters
help short usage description

Implements ulxr::MethodAdder.

Definition at line 186 of file ulxr_mtrpc_server.cpp.

void ulxr::MultiThreadRpcServer::addMethod ( MethodAdder::DynamicMethodCall_t  wrapper,
const Signature ret_signature,
const CppString name,
const Signature signature,
const CppString help 
) [virtual]

Adds a user defined (dynamic) method to the dispatcher.

You access a remote method by sending the "official" name. Sometimes a method accepts different parameter sets (overloading in C++). In this case you add the according signature. Finally you can add a description to show the usage of this method.

Parameters:
wrapper the pointer to the wrapper to the method. Important: Dispatcher owns now and deletes this wrapper object!
ret_signature the signature of the return value
name the name of the method
signature the signature of the parameters
help short usage description

Implements ulxr::MethodAdder.

Definition at line 197 of file ulxr_mtrpc_server.cpp.

void ulxr::MultiThreadRpcServer::addMethod ( MethodAdder::SystemMethodCall_t  adr,
const Signature ret_signature,
const CppString name,
const Signature signature,
const CppString help 
) [virtual]

Adds a system internal method to the dispatcher.

You access a remote method by sending the "official" name. Sometimes a method accepts different parameter sets (overloading in C++). In this case you add the according signature. Finally you can add a description to show the usage of this method.

Parameters:
adr the pointer to the implementation of the method
ret_signature the signature of the return value
name the name of the method
signature the signature of the parameters
help short usage description

Implements ulxr::MethodAdder.

void ulxr::MultiThreadRpcServer::removeMethod ( const CppString name  )  [virtual]

Removes a method if available.

Parameters:
name method name

Implements ulxr::MethodAdder.

Definition at line 219 of file ulxr_mtrpc_server.cpp.

void ulxr::MultiThreadRpcServer::forwardThreadedError ( const Exception ex  )  const [protected, virtual]

Forwards error that happen within threads.

Parameters:
ex Exception that occured

Definition at line 361 of file ulxr_mtrpc_server.cpp.

References ULXR_CHAR, and ULXR_TRACE.

void * ulxr::MultiThreadRpcServer::serverLoop ( Protocol protocol,
ThreadData td 
) [protected]

Definition at line 235 of file ulxr_mtrpc_server.cpp.

References ulxr::ApplicationError, ulxr::SystemError, ULXR_GET_STRING, ULXR_PCHAR, ULXR_TRACE, ulxr::Dispatcher::waitForCall(), and ulxr::Exception::why().

void ulxr::MultiThreadRpcServer::printStatistics (  )  const [protected]

Prints some statistics about the running threads.

Definition at line 489 of file ulxr_mtrpc_server.cpp.

References ULXR_COUT, and ULXR_PCHAR.

void ulxr::MultiThreadRpcServer::preProcessCall ( MethodCall call  )  [protected, virtual]

Processes a call after it has been recieved and before it is dispatched.

Parameters:
call last received call

Definition at line 225 of file ulxr_mtrpc_server.cpp.

void ulxr::MultiThreadRpcServer::preProcessResponse ( MethodResponse resp  )  [protected, virtual]

Processes a method response before it is sent back.

Parameters:
resp response to send back

Definition at line 230 of file ulxr_mtrpc_server.cpp.

void * ulxr::MultiThreadRpcServer::startThread ( ThreadData td  )  [static, private]

Helper method to start a thread.

Parameters:
td pointer to thread data

Definition at line 368 of file ulxr_mtrpc_server.cpp.

References ULXR_PCHAR, and ULXR_TRACE.

void ulxr::MultiThreadRpcServer::releaseThreads (  )  [private]

Deletes all allocated thread objects.

Definition at line 476 of file ulxr_mtrpc_server.cpp.

References ULXR_PCHAR, and ULXR_TRACE.

Referenced by ~MultiThreadRpcServer().

MultiThreadRpcServer& ulxr::MultiThreadRpcServer::operator= ( const MultiThreadRpcServer  )  [private]


Member Data Documentation

std::vector<ThreadData*> ulxr::MultiThreadRpcServer::threads [private]

Definition at line 256 of file ulxr_mtrpc_server.h.

Referenced by MultiThreadRpcServer().

Dispatcher ulxr::MultiThreadRpcServer::dispatcher [private]

Definition at line 257 of file ulxr_mtrpc_server.h.

bool ulxr::MultiThreadRpcServer::wbxml_mode [private]

Definition at line 258 of file ulxr_mtrpc_server.h.

Referenced by MultiThreadRpcServer().


The documentation for this class was generated from the following files:
Generated on Sun Aug 19 20:09:06 2007 for ulxmlrpcpp by  doxygen 1.5.1