00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef RemoteMethodCallH
00033 #define RemoteMethodCallH
00034
00035
00036 #include <zeusbase/Remote/Interfaces/IRemoteMethodCall.hpp>
00037 #include <zeusbase/System/Interfaces/ISerializable.hpp>
00038 #include <zeusbase/System/Interfaces/IZVariant.hpp>
00039 #include <zeusbase/System/Interfaces/IStringList.hpp>
00040 #include <zeusbase/Remote/Interfaces/IRemoteObject.hpp>
00041 #include <zeusbase/System/ArrayList.hpp>
00042 #include <zeusbase/System/Stack.hpp>
00043 #include <zeusbase/System/ZObject.h>
00044 #include <zeusbase/System/StringMap.hpp>
00045 #include <zeusbase/System/Serializer.h>
00046
00047 BEGIN_NAMESPACE_Zeus
00048
00049
00055
00056 zeusbase_class TRemoteMethodCall : public TZObject, public IRemoteMethodCall
00057 {
00058 public:
00059 TRemoteMethodCall(TString name=L"");
00060
00061
00062 virtual void MQUALIFIER addParameter(IZVariant& rParam);
00063 virtual void MQUALIFIER getMethodName(IString& rName) const;
00064 virtual Retval MQUALIFIER getParameterByName(const IString& rName, IZVariant*& rpParam) const;
00065 virtual Retval MQUALIFIER getParameter(Int iIndex, IZVariant*& rpParam) const;
00066 virtual Int MQUALIFIER getParameterCount() const;
00067 virtual Retval MQUALIFIER getReturnValue(IZVariant*& rpParam) const;
00068 virtual void MQUALIFIER setMethodName(const IString& rName);
00069 virtual void MQUALIFIER setReturnValue(IZVariant& rParam);
00070
00071
00072 SERIAL_START(TRemoteMethodCall, L"TRemoteMethodCall")
00073 SERIAL_STRING_GET_SET(getObjName, setObjName)
00074 SERIAL_STRING(m_strMethodName)
00075 SERIAL_OBJECTLIST(INTERFACE_IZVariant, IZVariant, m_lstArguments)
00076 SERIAL_OBJECT(INTERFACE_IZVariant, m_pReturnValue)
00077 SERIAL_END
00078
00079
00080 MEMORY_MANAGER_DECL
00081
00082
00083 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const IStringList& rValue);
00084 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const ISerializable& rValue);
00085 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const ISerializable* pValue);
00086 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const IRemoteObjectList& rValue);
00087 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const IRemoteObject& rValue);
00088 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const IRemoteObject* rValue);
00089 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const IZUnknown& rValue);
00090 static void addParameter(IRemoteMethodCall& rMethod, const IString& rName, const IZUnknown* pValue);
00091 static void addParameterEmpty(IRemoteMethodCall& rMethod, const IString& rName);
00092
00093
00094 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, IStringList& rValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00095 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, ISerializable*& rpValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00096 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, IRemoteObjectList& rValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00097 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, IRemoteObject*& rpValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00098 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, const InterfaceID& rIface, IZUnknown*& rpValue, TStack<IZUnknown*>& rObjectStack);
00099 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, IString& rValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00100 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, Float64& rValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00101 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, Int32& rValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00102 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, Uint32& rValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00103 static Retval getParameter(const IRemoteMethodCall& rMethod, const IString& rName, IByteArray& rValue, TStack<IZUnknown*>& rObjectStack, bool bCreateStub = true);
00104 static Retval getRetval(const IRemoteMethodCall& rMethod);
00105
00106 protected:
00107 virtual ~TRemoteMethodCall();
00108
00109 private:
00111 TString m_strMethodName;
00113 TArrayList<IZVariant*> m_lstArguments;
00115 IZVariant* m_pReturnValue;
00116 };
00117
00118
00119
00120
00123
00124 inline Int MQUALIFIER TRemoteMethodCall::getParameterCount() const
00125 {
00126 return m_lstArguments.getCount();
00127 }
00128
00129
00130
00133
00134 inline void MQUALIFIER TRemoteMethodCall::getMethodName(IString& rName) const
00135 {
00136 rName.assignStr(m_strMethodName);
00137 }
00138
00139
00142
00143 inline void MQUALIFIER TRemoteMethodCall::setMethodName(const IString& rName)
00144 {
00145 m_strMethodName.assignStr(rName);
00146 }
00147
00148
00149
00150
00151
00152 inline void TRemoteMethodCall::addParameter(IRemoteMethodCall& rMethod, const IString& rName, const IRemoteObject* pValue)
00153 {
00154 if (pValue != NULL)
00155 {
00156 TRemoteMethodCall::addParameter(rMethod, rName, *pValue);
00157 }
00158 else
00159 {
00160 TRemoteMethodCall::addParameterEmpty(rMethod, rName);
00161 }
00162 }
00163
00164
00165
00166
00167
00168 inline void TRemoteMethodCall::addParameter(IRemoteMethodCall& rMethod, const IString& rName, const ISerializable* pValue)
00169 {
00170 if (pValue != NULL)
00171 {
00172 TRemoteMethodCall::addParameter(rMethod, rName, *pValue);
00173 }
00174 else
00175 {
00176 TRemoteMethodCall::addParameterEmpty(rMethod, rName);
00177 }
00178 }
00179
00180 END_NAMESPACE_Zeus
00181
00182 #endif