// This file automatically generated by:
//   Apache Etch 1.4.0 (LOCAL-0) / cpp 1.4.0 (LOCAL-0)
//   Fri Apr 04 11:35:36 CEST 2014
// This file is automatically created for your convenience and will not be
// overwritten once it exists! Please edit this file as necessary to implement
// your service logic.

#ifndef __MAINHELLOWORLDCLIENT_H__
#define __MAINHELLOWORLDCLIENT_H__
 

#include "capu/Config.h"
#include "HelloWorldHelper.h"

namespace org_apache_etch_examples_helloworld_HelloWorld {

  /**
   * Main program for HelloWorldClient. This program makes a connection to the
   * listener created by MainHelloWorldListener.
   */
  class MainHelloWorldClientFactory
   : public HelloWorldHelper::HelloWorldClientFactory
  {
  public:
    virtual ~MainHelloWorldClientFactory() {}
    HelloWorldClient* newHelloWorldClient(RemoteHelloWorldServer* server);
  };
}

#endif /* __MAINHELLOWORLDCLIENT_H__ */
 