ACE Tutorial 015
Building a protocol stream

The Server object exists in order simplify the main() application level. To that end, it hides the details of creating an acceptor and managing the reactor.

The static close() method available for a signal handler as you saw on the previous page. Of course the assumption here is that there would only be one Server instance but since you can't provide a TCP/IP port, that's probably a valid assumption!

    // $Id: page06.html,v 1.13 1999/04/03 21:56:29 jcej Exp $

    #ifndef SERVER_H
    #define SERVER_H

    #include "ace/Acceptor.h"

    #if !defined (ACE_LACKS_PRAGMA_ONCE)
    # pragma once
    #endif /* ACE_LACKS_PRAGMA_ONCE */

    #include "ace/SOCK_Acceptor.h"
    #include "Handler.h"

    /* Anytime I have templates I try to remember to create a typedef for
       the parameterized object.  It makes for much less typing later!
    */
    typedef ACE_Acceptor <Handler, ACE_SOCK_ACCEPTOR> Acceptor;

    class Server
    {
    public:
      // Our simple constructor takes no parameters.  To make the
      // server a bit more useful, you may want to pass in the
      // TCP/IP port to be used by the acceptor.
      Server (void);
      ~Server (void);

      // Open the server for business
      int open (void);

      // Close all server instances by setting the finished_ flag.
      // Actually, the way this class is written, you can only have
      // one instance.
      static int close (void);

      // Run the server's main loop.  The use of the gloabl ACE_Reactor by
      // this method is what limits us to one Server instance.
      int run (void);

    private:
      // This will accept client connection requests and instantiate a
      // Handler object for each new connection.
      Acceptor acceptor_;

      // Our shutdown flag
      static sig_atomic_t finished_;
    };

    #endif /* SERVER_H */

[Tutorial Index] [Continue This Tutorial]