started docu
authorJens Thiele <jens.thiele@intra2net.com>
Wed, 13 Dec 2006 13:31:40 +0000 (13:31 +0000)
committerJens Thiele <jens.thiele@intra2net.com>
Wed, 13 Dec 2006 13:31:40 +0000 (13:31 +0000)
codegen/TODO
codegen/main.cpp
doc/Doxyfile.in
doc/Makefile.am
src/client.cpp

index 3a10806..601a5a0 100644 (file)
@@ -19,3 +19,12 @@ open questions:
 - naming scheme?!
   perhaps generated group class should not be prefixed by cmd_group_
 
+docu
+- for the docu we need a minimal example
+- for automatic testing we need a complex example
+
+the example should show:
+- how to mark procedures
+- how to write configure.ac and Makefile.am
+- that we create a library for the client
+- how to use that library
index f228ece..45aa9d7 100644 (file)
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
+/*! \mainpage libt2n - (talk2neighbor)
+ \section intro_sec Introduction
+ libt2n (talk2neighbor) is a C++ library for inter-process communication (IPC, s.a. http://en.wikipedia.org/wiki/Inter-process_communication)
+ with an additional code generator to make remote procedure calls simple. XXX: improve this paragraph: The input for the code generator is standard C++ code (in fact we use gccxml to parse the C++ code and the code generator takes the XML as input) and you mark the procedures you want to expose to other processes.
+ It then generates the stubs needed.
+ The exported procedures can be grouped. For each group the code generator is called which generates 6 outputfiles: group_common.hxx, group_common.cpp, group_client.hxx, group_client.cpp, group_server.hxx, group_server.cpp. The _common files are used by client and server whereas the _client files are used by the client and the _server files by the server. 
+
+ \section install_sec Installation
+
+ \subsection requirements Requirements
+ - boost <http://www.boost.org/> (serialization <http://www.boost.org/libs/serialization/doc/>)
+ - gccxml <http://www.gccxml.org>
+ - libxmlpp <http://libxmlplusplus.sourceforge.net/>
+
+ \section usage Usage example
+
+ In this example we create two packages:
+ - server program and library to connect to the server. The server exports a simple procedure using one group: "t2nexample"
+ - client program using the library
+
+ \subsection server Example server program and client library
+
+ \par The procedure to export (input for the code generator - libt2n-codegen): t2nexample.cpp:
+ \verbinclude libt2n-example1/t2nexample.cpp
+
+ \par Required includes must be put into a seperate group header file: t2nexample.hxx:
+ \verbinclude libt2n-example1/t2nexample.hxx
+
+ \par The server program:
+ \verbinclude libt2n-example1/server.cpp
+
+ \par Using autoconf and automake to build a example server program and a client library.
+ In the configure.in(.ac) we put a check for libt2n:
+ \verbinclude libt2n-example1/configure.in
+ Writing the Makefile.am isn't difficult either:
+ \verbinclude libt2n-example1/Makefile.am
+
+ \subsection client Client using the library
+ Using the library is as simple as using any other library using pkg-config (the pkg-config .pc file is created automatically by the included Makefile snippet)
+ \par We only have to check that the library is installed
+ \verbinclude libt2n-example1-client/configure.in
+ \par Nothing special
+ \verbinclude libt2n-example1-client/Makefile.am
+ \par The client program
+ \verbinclude libt2n-example1-client/client.cpp
+*/
+
+/*!
+ \example t2nexample.cpp
+ example input for libt2n-codegen
+*/
+
 #include <libxml++/libxml++.h>
 #include <cassert>
 #include <iostream>
index 9db0e7d..25c9c70 100644 (file)
@@ -459,7 +459,7 @@ WARN_LOGFILE           =
 # directories like "/usr/src/myproject". Separate the files or directories 
 # with spaces.
 
-INPUT                  = ../src
+INPUT                  = ../src ../codegen
 
 # If the value of the INPUT tag contains directories, you can use the 
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
@@ -500,7 +500,9 @@ EXCLUDE_PATTERNS       =
 # directories that contain example code fragments that are included (see 
 # the \include command).
 
-EXAMPLE_PATH           = 
+# todo: we can't depend on example package here
+
+EXAMPLE_PATH           = ../../libt2n-examples/libt2n-example1/ ../../libt2n-examples/libt2n-example1-client/ ../codegen/
 
 # If the value of the EXAMPLE_PATH tag contains directories, you can use the 
 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
index c5c4615..c8180ce 100644 (file)
@@ -8,5 +8,5 @@ endif
 
 all: $(MANUALS)
 
-html/index.html: $(top_srcdir)/src/*.cpp $(top_srcdir)/src/*.hxx
+html/index.html: $(top_srcdir)/src/*.cpp $(top_srcdir)/src/*.hxx $(top_srcdir)/codegen/*.hxx $(top_srcdir)/codegen/*.cpp
        $(DOXYGEN)
index 96b2554..8c40bc1 100644 (file)
@@ -47,20 +47,23 @@ void client_connection::close()
     }
 }
 
-/** @brief add a callback
-
+/// add a callback
+/** 
     @param event event the function will be called at
     @param func functor (see boost function) that will be called
-
-    @example use boost::bind to bind to member functions and parameters like this:
-        int this example 17 is a fixed parameter that is always added to the call
-        c.add_callback(connection_closed,bind(&my_class::func_to_call_back, boost::ref(*this), 17));
 */
 void client_connection::add_callback(callback_event_type event, const boost::function<void ()>& func)
 {
     callbacks[event].push_back(func);
 }
 
+/**
+    @example callback use boost::bind to bind to member functions and parameters like this:
+        int this example 17 is a fixed parameter that is always added to the call
+        c.add_callback(connection_closed,bind(&my_class::func_to_call_back, boost::ref(*this), 17));
+*/
+
+
 void client_connection::do_callbacks(callback_event_type event)
 {
     std::list<boost::function<void ()> >::iterator i,ie=callbacks[event].end();