RpcIfClient.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* RpcIfClient */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01l,10oct01,dbs  add AddKnownInterface() method to IOrpcClientChannel
  7. 01k,26jul01,dbs  implement IOrpcClientChannel interface
  8. 01j,13jul01,dbs  fix up includes
  9. 01i,29mar01,nel  SPR#35873. Add extra code to hold the client side context IDs
  10.                  for bound interfaces and modify the bindToIID method to send
  11.                  alter context for already bound interfaces rather than always
  12.                  sending bind.
  13. 01h,20jun00,dbs  fix client BIND/ALTER_CONTEXT handling
  14. 01g,22jul99,dbs  enforce serialisation on method-calls
  15. 01f,19jul99,dbs  add client-side authn support
  16. 01e,09jul99,dbs  remove references to obsolete files
  17. 01d,06jul99,aim  new ctors
  18. 01c,02jul99,aim  added RpcInvocation functionality
  19. 01b,08jun99,aim  rework
  20. 01a,05jun99,aim  created
  21. */
  22. #ifndef __INCRpcIfClient_h
  23. #define __INCRpcIfClient_h
  24. #include "private/comStl.h"
  25. #include "SockStream.h"
  26. #include "SockConnector.h"
  27. #include "INETSockAddr.h"
  28. #include "RpcPdu.h"
  29. #include "RpcStringBinding.h"
  30. #include "comLib.h"
  31. #include "private/comMisc.h"
  32. class RpcIfClient : public IOrpcClientChannel
  33.     {
  34.   public:
  35.     virtual ~RpcIfClient ();
  36.     RpcIfClient (const INETSockAddr& peerAddr);
  37.     RpcIfClient (const RpcStringBinding& binding);
  38.     int channelId () const;
  39.     bool connected () const;
  40.     bool interfaceIsBound (const IID& iid, USHORT& ctxId);
  41.     // IOrpcClientChannel methods
  42.     STDMETHOD_(ULONG, AddRef) ();
  43.     STDMETHOD_(ULONG, Release) ();
  44.     STDMETHOD(QueryInterface) (REFIID riid, void** ppv);
  45.     STDMETHOD(InvokeMethod) (REFIID,
  46.                              const IPID*,
  47.                              USHORT,
  48.                              const MSHL_BUFFER*,
  49.                              MSHL_BUFFER*);
  50.     STDMETHOD(AddKnownInterface) (REFIID);
  51.     STDMETHOD(AllocBuffer) (MSHL_BUFFER*, DWORD);
  52.     STDMETHOD(FreeBuffer) (MSHL_BUFFER*);
  53.     
  54.   private:
  55.     typedef STL_VECTOR(IID) InterfaceVec;
  56.     typedef unsigned long CALL_ID;
  57.     INETSockAddr m_peerAddr;
  58.     InterfaceVec m_boundIIDs;
  59.     IID m_currentIID;
  60.     SockStream m_stream;
  61.     SockConnector m_connector;
  62.     bool m_connected;
  63.     VxMutex m_mutex;
  64.     LONG                m_dwRefCount;
  65.     
  66.     static CALL_ID s_callId;
  67.     int connect
  68. (
  69. const INETSockAddr& peerAddr, 
  70. HRESULT& hresult
  71. );
  72.     int connect ();
  73.     int sendMethod
  74. (
  75. RpcPdu& request,
  76. RpcPdu& result,
  77. HRESULT& hresult
  78. );
  79.     SockStream& stream ();
  80.     CALL_ID nextCallId ();
  81.     int sendPdu (RpcPdu& pdu);
  82.     int recvPdu (RpcPdu& pdu);
  83.     int bindToIID (const IID& iid, const GUID*, HRESULT&, USHORT&);
  84.     // unsupported
  85.     RpcIfClient (const RpcIfClient& other);
  86.     RpcIfClient& operator= (const RpcIfClient& rhs);
  87.     };
  88. #endif // __INCRpcIfClient_h