summaryrefslogtreecommitdiff
path: root/cli_ure/source/uno_bridge/cli_proxy.h
diff options
context:
space:
mode:
Diffstat (limited to 'cli_ure/source/uno_bridge/cli_proxy.h')
-rw-r--r--cli_ure/source/uno_bridge/cli_proxy.h302
1 files changed, 0 insertions, 302 deletions
diff --git a/cli_ure/source/uno_bridge/cli_proxy.h b/cli_ure/source/uno_bridge/cli_proxy.h
deleted file mode 100644
index 43225a530..000000000
--- a/cli_ure/source/uno_bridge/cli_proxy.h
+++ /dev/null
@@ -1,302 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef INCLUDED_CLI_PROXY_H
-#define INCLUDED_CLI_PROXY_H
-
-#pragma warning(push, 1)
-#include "uno/environment.hxx"
-#pragma warning(pop)
-#include "uno/mapping.hxx"
-#include "uno/dispatcher.h"
-#include "cli_bridge.h"
-#include "cli_environment.h"
-
-#using <mscorlib.dll>
-#using <cli_ure.dll>
-
-namespace srrp = System::Runtime::Remoting::Proxies;
-namespace srrm = System::Runtime::Remoting::Messaging;
-namespace srr = System::Runtime::Remoting;
-namespace sr = System::Reflection;
-namespace sc = System::Collections;
-using namespace uno;
-
-namespace cli_uno
-{
-
-public __gc class UnoInterfaceInfo
-{
-public:
- UnoInterfaceInfo(Bridge const * bridge, uno_Interface* unoI,
- typelib_InterfaceTypeDescription* td);
- ~UnoInterfaceInfo();
- uno_Interface * m_unoI; // wrapped interface
- System::Type * m_type;
- typelib_InterfaceTypeDescription* m_typeDesc;
-
- Bridge const* m_bridge;
-};
-
-public __gc class UnoInterfaceProxy: public srrp::RealProxy,
- public srr::IRemotingTypeInfo
-{
- /** used for IRemotingTypeInfo.TypeName
- */
- System::String* m_sTypeName;
- /** The list is filled with UnoInterfaceInfo objects. The list can only
- grow and elements are never changed. If an element was added it
- must not be changed!
- */
- sc::ArrayList* m_listIfaces;
- /** The number of UNO interfaces this proxy represents. It corresponds
- to the the number of elements in m_listIfaces.
- */
- int m_numUnoIfaces;
- /** The list is filled with additional UnoInterfaceProxy object due
- to aggregation via bridges. Though the latter is strongly
- discouraged, this has to be supported.
- */
- sc::ArrayList* m_listAdditionalProxies;
- int m_nlistAdditionalProxies;
-
- UnoInterfaceInfo * findInfo( ::System::Type * type );
-
- Bridge const* m_bridge;
- System::String* m_oid;
-
-#if OSL_DEBUG_LEVEL >= 2
- /** The string contains all names of UNO interfaces which are
- represented by this proxy. It is used to print out the interfaces
- when this proxy dies. In the destructor it is not allowed to
- access m_listIfaces or any other managed object.
- */
- rtl_uString * _sInterfaces;
-// /** Count of interfaces. Used in conjunction with _sInterfaces.
-// */
- int _numInterfaces;
-#endif
-
-public:
-
- /** Creates a proxy and registers it on the dot NET side.
- */
- static System::Object* create(Bridge * bridge,
- uno_Interface * pUnoI,
- typelib_InterfaceTypeDescription* pTd,
- const rtl::OUString& oid);
-
- /** RealProxy::Invoke */
- srrm::IMessage* Invoke(srrm::IMessage* msg);
-
- /** Must be called from within a synchronized section.
- Add only the interface if it is not already contained.
- This method is called from the constructor and as a result
- of IRemotingTypeInfo::CanCastTo
- */
- void addUnoInterface(uno_Interface* pUnoI,
- typelib_InterfaceTypeDescription* pTd);
- ~UnoInterfaceProxy();
-
- /**
- */
- inline System::String * getOid()
- { return m_oid; }
-
- //IRemotingTypeInfo ----------------------------------------------
- bool CanCastTo(System::Type* fromType, System::Object* o);
-
- __property System::String* get_TypeName()
- {
- return m_sTypeName;
- }
- __property void set_TypeName(System::String* name)
- {
- m_sTypeName = name;
- }
-
-
-private:
- UnoInterfaceProxy(
- Bridge * bridge,
- uno_Interface * pUnoI,
- typelib_InterfaceTypeDescription* pTD,
- const rtl::OUString& oid );
-
- static srrm::IMessage* constructReturnMessage(System::Object* retVal,
- System::Object* outArgs[],
- typelib_InterfaceMethodTypeDescription* mtd,
- srrm::IMessage* msg, System::Object* exc);
-
- static System::String* m_methodNameString =
- new System::String("__MethodName");
- static System::String* m_typeNameString = new System::String("__TypeName");
- static System::String* m_ArgsString = new System::String("__Args");
- static System::String* m_CallContextString =
- new System::String("__CallContext");
- static System::String* m_system_Object_String =
- new System::String("System.Object");
- static System::String* m_methodSignatureString =
- new System::String("__MethodSignature");
- static System::String* m_Equals_String = new System::String("Equals");
- static System::String* m_GetHashCode_String =
- new System::String("GetHashCode");
- static System::String* m_GetType_String = new System::String("GetType");
- static System::String* m_ToString_String = new System::String("ToString");
-
-protected:
- srrm::IMessage* invokeObject(sc::IDictionary* properties,
- srrm::LogicalCallContext* context,
- srrm::IMethodCallMessage* mcm);
-};
-
-
-//Cannot make this __gc because a managed type cannot derive from unmanaged type
-struct CliProxy: public uno_Interface
-{
- mutable oslInterlockedCount m_ref;
- const Bridge* m_bridge;
- const gcroot<System::Object*> m_cliI;
- gcroot<System::Type*> m_type;
- const com::sun::star::uno::TypeDescription m_unoType;
- const gcroot<System::String*> m_oid;
- const rtl::OUString m_usOid;
-
- enum MethodKind {MK_METHOD = 0, MK_SET, MK_GET};
- /** The array contains MethodInfos of the cli object. Each one reflects an
- implemented interface method of the interface for which this proxy was
- created. The MethodInfos are from the object's method and not from the
- interface type. That is, they can be used to invoke the methods. The
- order of the MethodInfo objects corresponds to the order of the
- interface methods (see member m_type). Position 0 contains the
- MethodInfo of the first method of the interface which represents the
- root of the inheritance chain. The last MethodInfo represents the last
- method of the furthest derived interface.
-
- The array is completely initialized in the constructor of this object.
-
- When the uno_DispatchMethod is called for this proxy then it receives
- a typelib_TypeDescription of the member which is either an attribute
- (setter or getter) or method. After determining the position of the
- method within the UNO interface one can use the position to obtain the
- MethodInfo of the corresponding cli method. To obtain the index for the
- m_arMethodInfos array the function position has to be decreased by 3.
- This is becaus, the cli interface does not contain the XInterface
- methods.
- */
- gcroot<sr::MethodInfo*[]> m_arMethodInfos;
-
- /** This array is similar to m_arMethodInfos but it contains the MethodInfo
- objects of the interface (not the object). When a call is made from uno
- to cli then the uno method name is compared to the cli method name. The
- cli method name can be obtained from the MethodInfo object in this
- array. The name of the actual implemented method may not be the same as
- the interface method.
- */
- gcroot<sr::MethodInfo*[]> m_arInterfaceMethodInfos;
-
- /** Maps the position of the method in the UNO interface to the position of
- the corresponding MethodInfo in m_arMethodInfos. The Uno position must
- not include the XInterface methods. For example,
- pos 0 = XInterface::queryInterface
- pos 1 = XInterface::acquire
- pos 2 = XInterface::release
-
- That is the real Uno position has to be deducted by 3. Then
- arUnoPosToCliPos[pos] contains the index for m_arMethodInfos.
-
- */
- gcroot<System::Int32[]> m_arUnoPosToCliPos;
-
- /** Count of inherited interfaces of the cli interface.
- */
- int m_nInheritedInterfaces;
- /** Contains the number of methods of each interface.
- */
- gcroot<System::Int32[]> m_arInterfaceMethodCount;
-
- CliProxy( Bridge const* bridge, System::Object* cliI,
- typelib_TypeDescription const* pTD,
- const rtl::OUString& usOid);
- ~CliProxy();
-
- static uno_Interface* create(Bridge const * bridge,
- System::Object* cliI,
- typelib_TypeDescription const * TD,
- rtl::OUString const & usOid );
-
- /** Prepares an array (m_arMethoInfos) containing MethodInfo object of the
- interface and all inherited interfaces. At index null is the first
- method of the base interface and at the last position is the last method
- of the furthest derived interface.
- If a UNO call is received then one can determine the position of the
- method (or getter or setter for an attribute) from the passed type
- information. The position minus 3 (there is no XInterface in the cli
- mapping) corresponds to the index of the cli interface method in the
- array.
- */
- void makeMethodInfos();
-
- /**Obtains a MethodInfo which can be used to invoke the cli object.
- Internally it maps nUnoFunctionPos to an index that is used to get the
- corresponding MethodInfo object from m_arMethoInfos. The mapping table
- is dynamically initialized. If the cli interface has no base interface
- or exactly one then the mapping table is initialized in one go at the
- first call. In all ensuing calls the MethodInfo object is immediately
- retrieved through the mapping table.
-
- If the interface has more then one interface in its inheritance chain,
- that is Type.GetInterfaces return more then one Type, then the mapping
- table is partially initiallized. On the first call the mappings for the
- methods of the belonging interface are created.
-
- The implementation assumes that the order of interface methods as
- provided by InterfaceMapping.InterfaceMethods corresponds to the order
- of methods in the interface declaration.
-
- @param nUnoFunctionPos
- Position of the method in the uno interface.
- */
- sr::MethodInfo* getMethodInfo(int nUnoFunctionPos,
- const rtl::OUString & usMethodName,
- MethodKind mk);
-
- void SAL_CALL uno_DispatchMethod(
- struct _uno_Interface * pUnoI,
- const struct _typelib_TypeDescription * pMemberType,
- void * pReturn,
- void * pArgs[],
- uno_Any ** ppException );
-
- inline void acquire() const;
- inline void release() const;
-};
-}
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */