
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_CORBA_OrbFunctional$portServer__
#define __gnu_CORBA_OrbFunctional$portServer__

#pragma interface

#include <java/lang/Thread.h>
extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
        class OrbFunctional;
        class OrbFunctional$portServer;
    }
  }
  namespace java
  {
    namespace net
    {
        class ServerSocket;
    }
  }
}

class gnu::CORBA::OrbFunctional$portServer : public ::java::lang::Thread
{

public: // actually package-private
  OrbFunctional$portServer(::gnu::CORBA::OrbFunctional *, jint);
public:
  virtual void run();
public: // actually package-private
  virtual void tick();
public:
  virtual void close_now();
public: // actually protected
  virtual void finalize();
public: // actually package-private
  jint __attribute__((aligned(__alignof__( ::java::lang::Thread)))) running_threads;
  jint s_port;
  ::java::net::ServerSocket * service;
  jboolean terminated;
  ::gnu::CORBA::OrbFunctional * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_OrbFunctional$portServer__
