/*
 *    @(#) 2.15.1.38 src/somd/somdcprx.idl, somd, som3.0 12/4/96 00:28:16 [12/22/96 21:11:53]
 */

//
//   COMPONENT_NAME: somd
//
//   ORIGINS: 27
//
//    25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1994,1996 
//   All Rights Reserved
//   Licensed Materials - Property of IBM
//   US Government Users Restricted Rights - Use, duplication or
//   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//

//#  SOMDClientProxy is a PUBLIC class derived from
//#  SOMMProxyForObject and SOMObject.
//
//  This class implements DSOM client proxy objects.  It provides a 
//  special implementation of sommProxyDispatch which uses the DSOM
//  communications framework to dispatch the method to the target object.
//  It is intended that this "generic" proxy class will be used to derive
//  specific proxy classes via multiple inheritance.  This new dispatch
//  method is inherited from this proxy class while the desired interface
//  is inherited from the target class.
//  E.g.,
//            SOMDClientProxy   Animal
//                    \           /
//                     \         / (interface only)
//                      \       /
//                   Animal__Proxy
//


#ifndef somdcprx_idl
#define somdcprx_idl

#include <somobj.idl>

#include <somproxy.idl>
#include <somdobj.idl>


interface SOMDClientProxy: SOMMProxyForObject, SOMDObject
{
  void somdTargetFree();
  // Forwards _somFree method call to the remote target object.

  SOMClass somdTargetGetClass();
  // Forwards _somGetClass method call to the remote target object.
  // Returns a pointer to the target's class object.

  string somdTargetGetClassName();
  // Forwards _somGetClassName method call to the remote target object.
  // Returns the class name of the target object.

  void somdProxyFree();
  // Performs _somFree method call on the local proxy object.

  SOMClass somdProxyGetClass();
  // Performs _somGetClass method call on the local proxy object.
  // Returns a pointer to the proxy's class object.

  string somdProxyGetClassName();
  // Performs _somGetClassName method call on the local proxy object.
  // Returns the class name of the proxy object.

  void somdReleaseResources();
  // Instructs the proxy to free any memory it owns for use by the client.


#ifdef __SOMIDL__

  implementation
  {

    releaseorder: somdTargetFree, somdTargetGetClass, somdTargetGetClassName,
		  somdProxyFree, somdProxyGetClass, somdProxyGetClassName,
		  unused1, unused2, unused3,
		  unused4, unused5, somdReleaseResources,
		  private1, private2, private3,
		  private4, private5;
  
    //# Class Modifiers
    callstyle = idl;
    dllname = "somd.dll";
    majorversion = 2;
    minorversion = 2;
  
    //# SOMObject overrides
    create_request           : override;
    create_request_args	     : override;
    duplicate                : override;
    is_proxy		     : override;
    release		     : override;
    somDefaultInit           : override;
    somDestruct		     : override;
    somClassDispatch         : override;
    somDumpSelf              : override;
    somDumpSelfInt           : override;
    somFree		     : override;
    somGetClass              : override;
    somGetClassName          : override;
    somPrintSelf             : override;

    //# SOMMProxyForObject overrides
    sommProxyDispatch        : override;

    //# SOMDObject overrides
    is_SOM_ref		     : override;
    is_constant		     : override;
    _get_type_id             : override;
    _set_type_id             : override;

  };

#endif /* __SOMIDL__ */

};

#endif  /* somdcprx_idl */
