home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / som / include / somdserv.idl < prev    next >
Text File  |  1999-02-22  |  7KB  |  186 lines

  1. //
  2. //   COMPONENT_NAME: somd
  3. //
  4. //   ORIGINS: 27
  5. //
  6. //
  7. //   10H9767, 10H9769  (C) COPYRIGHT International Business Machines Corp. 1992,1994
  8. //   All Rights Reserved
  9. //   Licensed Materials - Property of IBM
  10. //   US Government Users Restricted Rights - Use, duplication or
  11. //   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  12. //
  13. //#  @(#) 2.12.1.1 src/somd/somdserv.idl, somd, som2.1 4/1/95 14:52:43 [7/30/96 14:45:48]
  14.  
  15.  
  16. //   Interface for DSOM Server Objects
  17. // 
  18. //   This class defines and implements the behavior of DSOM Server objects
  19. //   used with the DSOM Object Manager (SOMDObjectMgr).
  20. //
  21. //   Each DSOM server process is defined to have a (single instance of a) 
  22. //   SOMDServer object.  The SOMDServer object performs three kinds of 
  23. //   functions:
  24. //
  25. //       1) creation of SOM objects
  26. //       2) mapping of application-defined object ids into DSOM object
  27. //          "references" (SOMDObjects), and back again
  28. //       3) any application-specific server methods (e.g., for initialization,
  29. //          server control, etc.)
  30. //
  31. //   The SOMDServer class defines methods for the basic creation of SOM 
  32. //   objects in the server process (somdCreateObj), for deletion of SOM 
  33. //   objects (somdDeleteObj), and for finding the SOM  class object for a 
  34. //   specified class (somdGetClassObj).
  35. //   With somdGetClassObj, a client can get a proxy to a class object on the
  36. //   server, so that methods introduced in the metaclass (e.g., class-specific
  37. //   constructors, etc.) may be invoked directly.
  38. //
  39. //   This class also defines methods for the mappings to and from SOMDObjects
  40. //   and back again.  (Note: SOMDObject implements a CORBA "object reference" 
  41. //   in DSOM.  An object reference is something that is used to describe and 
  42. //   locate an actual target object.)  These methods are used by the SOM
  43. //   Object Adapter (SOMOA) when converting messages into method calls 
  44. //   and results into messages.
  45. //
  46. //   Application-specific server methods should be defined in subclasses
  47. //   of this SOMDServer subclass.
  48. //
  49. //   A particular SOMDServer subclass is specified in the ImplementationDef
  50. //   for each server process.  The SOMOA will instantiate one instance
  51. //   of the specified SOMDServer subclass during server process initialization
  52. //   (in SOMOA::impl_is_ready).
  53. //
  54.  
  55.  
  56. #ifndef somdserver_idl
  57. #define somdserver_idl
  58.  
  59.  
  60. #include <somobj.idl>
  61. #include <somdtype.idl>
  62. #include <snglicls.idl>
  63.  
  64. interface SOMDObject;
  65.  
  66. interface SOMDServer : SOMObject
  67. {
  68.  
  69.   //### -- Methods called locally on server ONLY! -- ###//
  70.  
  71.   SOMDObject somdRefFromSOMObj(in SOMObject somobj);
  72.   
  73.   // This method returns a DSOM object reference for a SOM object
  74.   // instance in this server process.  SOMOA will call this method
  75.   // whenever it returns a result from a method call which includes
  76.   // a pointer to a SOMObject (versus a pointer to a SOMDObject).
  77.   // Ownership of the returned object reference is given to the
  78.   // caller EXCEPT when the somdObjReferencesCached method returns TRUE.
  79.   // When the input (somobj) is already an object reference, the default
  80.   // implementation simply returns somobj, rather than creating a new reference.
  81.   // (Subclasses might override this method to duplicate the input reference, however.)
  82.   // Hence, callers should note when the returned value is the same as
  83.   // the input (somobj) when determining whether or not to free the result.
  84.  
  85.   SOMObject  somdSOMObjFromRef(in SOMDObject objref);
  86.   
  87.   // This method maps a DSOM object reference into a SOM object.
  88.   // This can be done in whatever way is appropriate for the application.
  89.   // This method is called by SOMOA in order to translate any method call
  90.   // parameters which are object references (created from somdRefFromSOMObj
  91.   // above) into SOM objects.
  92.  
  93.   void somdDispatchMethod(in SOMObject somobj, out somToken retValue,
  94.                           in somId methodId, in va_list ap);
  95.   
  96.   // This method is called by SOMOA to dispatch a method on a SOM object.
  97.   // The intention is to give the Server object an opportunity to intercept
  98.   // method calls, if desired.  The parameters to this method are the same
  99.   // as the parameters passed to SOMObject::somDispatch.
  100.   //
  101.   // The default implementation invokes SOMObject::somDispatch on the
  102.   // specified target object, "somobj", with the supplied arguments.
  103.  
  104.  
  105.   //### -- Methods called remotely from clients -- ###//
  106.  
  107.   SOMObject somdCreateObj(in Identifier objclass, in string hints);
  108.   
  109.   // Creates an object of the specified class.  This method (if overridden)
  110.   // may optionally define creation "hints" which the client may specify in 
  111.   // this call. 
  112.   //
  113.   // Called indirectly by SOMDObjectMgr::somdNewObject.
  114.   //
  115.   // The default implementation calls somdGetClassObj to get the specified
  116.   // SOMClass object, and invokes "somNew".  The "hints" argument is ignored 
  117.   // in the default implementation.
  118.  
  119.   void somdDeleteObj(in SOMObject somobj);
  120.   
  121.   // Deletes a SOM object.  By default, simply calls somFree on the object.
  122.   // Can be overridden by the application.
  123.   //
  124.   // Called indirectly by SOMDObjectMgr::somdDestroyObject.
  125.  
  126.   SOMClass  somdGetClassObj(in Identifier objclass);
  127.   
  128.   // Creates/returns a class object for the specified class.
  129.   // (May result in the loading of a DLL for the class.)
  130.  
  131.   boolean   somdObjReferencesCached();
  132.  
  133.   // Whether the server retains ownership of the object references
  134.   // it creates via the somdRefFromSOMObj method.
  135.  
  136. #ifdef __SOMIDL__
  137.  
  138.   implementation
  139.   {
  140.     releaseorder: somdSOMObjFromRef, somdRefFromSOMObj,
  141.           somdCreateObj, somdDeleteObj, somdGetClassObj,
  142.                   somdDispatchMethod, somdObjReferencesCached;
  143.   
  144.     //# Class Modifiers
  145.     callstyle = idl;
  146.     metaclass = SOMMSingleInstance;
  147.     dllname = "somd.dll";
  148.     majorversion = 2;
  149.     minorversion = 1;
  150.  
  151.     //# Passthrus
  152.     passthru C_h_after  = ""
  153.       "#ifdef SOM_STRICT_IDL"
  154. #ifdef _WIN16
  155.       "#define SOMD_ServerObject (*SOMD_ServerObjectResolve())"
  156.       "SOMEXTERN SOMDServer  * SOMLINK SOMD_ServerObjectResolve(void);"
  157. #else
  158.       "SOMEXTERN SOMDServer  SOMDLINK SOMD_ServerObject;  /* global variable */"
  159. #endif
  160.       "#else"
  161. #ifdef _WIN16
  162.       "#define SOMD_ServerObject (*SOMD_ServerObjectResolve())"
  163.       "SOMEXTERN SOMDServer * * SOMLINK SOMD_ServerObjectResolve(void);"
  164. #else
  165.       "SOMEXTERN SOMDServer * SOMDLINK SOMD_ServerObject;"
  166. #endif
  167.       "#endif /* SOM_STRICT_IDL */"
  168.       "";
  169.  
  170.     passthru C_xh_after = ""
  171.       "class SOMDServer;"
  172. #ifdef _WIN16
  173.       "#define SOMD_ServerObject (*SOMD_ServerObjectResolve())"
  174.       "SOMEXTERN SOMDServer * * SOMLINK SOMD_ServerObjectResolve(void);"
  175. #else
  176.       "SOMEXTERN SOMDServer * SOMDLINK SOMD_ServerObject; /* global variable */"
  177. #endif
  178.       "";
  179.  
  180.   };
  181.  
  182. #endif /* __SOMIDL__ */
  183. };
  184.  
  185. #endif  /* somdserver_idl */
  186.