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

#ifndef __java_rmi_server_UnicastRemoteObject__
#define __java_rmi_server_UnicastRemoteObject__

#pragma interface

#include <java/rmi/server/RemoteServer.h>
extern "Java"
{
  namespace java
  {
    namespace rmi
    {
        class Remote;
      namespace server
      {
          class RMIClientSocketFactory;
          class RMIServerSocketFactory;
          class RemoteRef;
          class RemoteStub;
          class UnicastRemoteObject;
      }
    }
  }
}

class java::rmi::server::UnicastRemoteObject : public ::java::rmi::server::RemoteServer
{

public: // actually protected
  UnicastRemoteObject();
  UnicastRemoteObject(jint);
  UnicastRemoteObject(jint, ::java::rmi::server::RMIClientSocketFactory *, ::java::rmi::server::RMIServerSocketFactory *);
  UnicastRemoteObject(::java::rmi::server::RemoteRef *);
public:
  virtual ::java::lang::Object * clone();
  static ::java::rmi::server::RemoteStub * exportObject(::java::rmi::Remote *);
  static ::java::rmi::Remote * exportObject(::java::rmi::Remote *, jint);
public: // actually package-private
  static ::java::rmi::Remote * exportObject(::java::rmi::Remote *, jint, ::java::rmi::server::RMIServerSocketFactory *);
public:
  static ::java::rmi::Remote * exportObject(::java::rmi::Remote *, jint, ::java::rmi::server::RMIClientSocketFactory *, ::java::rmi::server::RMIServerSocketFactory *);
  static jboolean unexportObject(::java::rmi::Remote *, jboolean);
private:
  static const jlong serialVersionUID = 4974527148936298033LL;
  jint __attribute__((aligned(__alignof__( ::java::rmi::server::RemoteServer)))) port;
  ::java::rmi::server::RMIClientSocketFactory * csf;
  ::java::rmi::server::RMIServerSocketFactory * ssf;
public:
  static ::java::lang::Class class$;
};

#endif // __java_rmi_server_UnicastRemoteObject__
