summaryrefslogtreecommitdiff
path: root/docs/tutorials/022/page04.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tutorials/022/page04.html')
-rw-r--r--docs/tutorials/022/page04.html177
1 files changed, 0 insertions, 177 deletions
diff --git a/docs/tutorials/022/page04.html b/docs/tutorials/022/page04.html
deleted file mode 100644
index eae9d24fef4..00000000000
--- a/docs/tutorials/022/page04.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!-- $Id$ -->
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
- <head>
- <title>ACE Tutorial 022</title>
- </head>
-
- <BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#000FFF" VLINK="#FF0F0F">
-
-<CENTER><B><FONT SIZE=+2>ACE Tutorial 022</FONT></B></CENTER>
-<pre>
-<font color=red>/* Now that we know the interface, lets proceed to its
- implementation. We obviosuly want to include the corresponding header
- file. */</font>
-<font color=blue>#include</font> "<A
- HREF="Acceptor_Service.h">Acceptor_Service.h</A>"
-
-<font color=red>/* A server has to listen for clients at a known
- TCP/IP port. The default ACE port is 10002 (at least on my
- system) and that's good enough for what we want to do here.
- Obviously, a more robust application would take a command line
- parameter or read from a configuration file or do some other
- clever thing. Just like the signal handler above, though,
- that's not what we want to focus on, so we're taking the easy
- way out. */</font>
-
-static const u_short PORT = ACE_DEFAULT_SERVER_PORT;
-
-<font color=red>/* As in all our simple tutorials, our contructor also does nothing */</font>
-Acceptor_Service::Acceptor_Service (void)
-{
- <font color=red>// Constructor</font>
-}
-
-<font color=red>/* Same in the destructor case */</font>
-Acceptor_Service::~Acceptor_Service (void)
-{
- <font color=red>// Destructor</font>
-}
-
-<font color=red>/* This is the virtual method inherited from ACE_Service_Object. This
- method is called to initialize the service. In a generic sense, we
- initialize everything that is needed to initialize our service
- here. Ofcourse we need to do that only if there are not already
- initialized. One important point to note here is that we have to
- make sure that everything that is initialized here is actually
- removed when the service is shutdown */</font>
-int
-Acceptor_Service::init (int argc, char *argv[])
-{
- <font color=red>/* As you will see, we will not be using argc and
- argv here and hence declare them to be unused variables. This
- helps us from the complaints from the picky compilers about
- unused variables. */</font>
- ACE_UNUSED_ARG (argc);
- ACE_UNUSED_ARG (argv);
-
- <font color=red>/* Lets have a debug statement so that we can know that our
- Acceptor_Service will be initialized soon */</font>
- ACE_DEBUG ((LM_DEBUG,
- "Starting the Acceptor_Service\n"));
-
- <font color=red>/* Create an ACE_INET_Addr that represents our endpoint of a
- connection. We then open our acceptor object with that Addr.
- Doing so tells the acceptor where to listen for connections.
- Servers generally listen at "well known" addresses. If not, there
- must be some mechanism by which the client is informed of the
- server's address. */</font>
- if (this->open (ACE_INET_Addr (PORT),
- ACE_Reactor::instance ()) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "%p\n",
- "open"),
- -1);
- return 0;
-}
-
-<font color=red>/* This virtual method will be invoked when we pass
- a directive to the service configurator framework to remove
- our service. Remember the threads and anything else that are
- initialized in the init method and remove each of them. If we
- leave anything that we initialized still running after this
- method is invoked ...well .. you know what happens :-) */ </font>
-int
-Acceptor_Service::fini (void)
-{
- <font color=red> /* Lets have another debug statement to inform us the state of the
- service. */</font>
- ACE_DEBUG ((LM_DEBUG,
- "Closing down the Acceptor_Service\n"));
-
- <font color=red> /* Now, lets see what did we start or initialize during the
- initialization process. The only thing that we did was opening
- our Acceptor to start listening for requests. So, lets close it
- down. */</font>
- this->close ();
-
- return 0;
-}
-
- <font color=red>/* Now, lets see how we can suspend the service that we initialized
- and is running. By suspension, we mean that the Reactor still knows
- about the service and receives the requests. But, it just keeps
- quite even if there are any requests. It actually queues the
- requests and sends them to the service once it is resumed.*/</font>
-int
-Acceptor_Service::suspend (void)
-{
- <font color=red>/* You must be wondering, as I did, how we can simply suspend this
- service without any complex method invocations. Thanks to our
- ACE_Reactor class, we can actually suspend the service by just
- invoking the following method and passing a pointer to ourself.
- This method actually takes care of all the particulars for
- suspending the services and keeps us happy. */</font>
- ACE_Reactor::instance ()->suspend_handler (this);
- return 0;
-}
-
-int
-Acceptor_Service::resume (void)
-{
- <font color=red> /* I had the same question again ... how do I do this ?? As before,
- our ACE_Reactor class came to a help with this method. ACE
- classes do make life simpler .. don't they !! */</font>
- ACE_Reactor::instance ()->resume_handler (this);
-
- return 0;
-}
-
-<font color=red>/* The macro to be used to define the factory method
- and destructor for our dynamically loadable service. */ </font>
-ACE_SVC_FACTORY_DEFINE (Acceptor_Service)
-
-<font color=red>/* This macro helps to register a statically linked
- service into the service configurator. It is defined in ace/OS.h. All
- the parameters needed by the service configurator to build and control the
- statically linked servuce are configured in a single structure. An
- instance of this structure is statically initialized using this
- macro. The First parameter is SERVICE_CLASS i.e. the name of the
- class that implements the service. As we did implicitly, this class
- must derive from ACE_Service_Configurator. The second parameter is
- the NAME of the service. This name is used by the service
- configurator to match the configuration options provided in the
- svc.conf file. The third parameter is the type of the object which
- could be either streams or service objects. The next parameter is
- the name of the factory function which we defined in our header
- file and above using the macros ACE_FACTORY_DECLARE and
- ACE_FACTORY_DEFINE. The fifth parameter are a set of options or
- flags which are used to control the ownership and life cycle of the
- object. The final argument helps us to choose if we want a new
- thread for this service. If the argument is not 0, a thread will be
- dedicated to this service. .. lots of parameters .. Huh !! */ </font>
-ACE_STATIC_SVC_DEFINE (Acceptor_Service,
- ACE_TEXT ("Acceptor_Service"),
- ACE_SVC_OBJ_T,
- &ACE_SVC_NAME (Acceptor_Service),
- ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
- 0)
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_Acceptor <Client_Handler, ACE_SOCK_ACCEPTOR>;
-template class ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>;
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_Acceptor <Client_Handler, ACE_SOCK_ACCEPTOR>
-#pragma instantiate ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
-</PRE>
-<P><HR WIDTH="100%">
-<CENTER>[<A HREF="../online-tutorials.html">Tutorial Index</A>] [<A HREF="page05.html">Continue This Tutorial</A>]</CENTER>
- <hr>
- <address><a href="mailto:pgontla@ece.uci.edu">Priyanka Gontla</a></address>
-<!-- Created: Thu Jan 18 18:24:15 PST 2001 -->
-<!-- hhmts start -->
-Last modified: Fri Jan 19 11:37:49 PST 2001
-<!-- hhmts end -->
- </body>
-</html>