Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cXProtocolServer.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cXProtocolServer_H
6 #define _INC_cXProtocolServer_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "cXProtocol.h"
12 #include "../Net/cProtocol.h"
13 #include "../Auth/IAuthUser.h"
14 
15 namespace GrayLib
16 {
18  : public cXProtocolTx
19  {
23  public:
25  virtual ~cXProtocolServerTx();
26 
27  // Send the definitions of the cXObject i support.
28  HRESULT Send_Interfaces(cXObject* pObj);
29  HRESULT Send_InterfaceDef(const cScriptableInterfaceDef* pInterfaceDef);
30  HRESULT Send_InterfaceDef(SCRIPTINTERFACEID_t bInterfaceID);
31  HRESULT Send_InterfaceDefs(cXObject* pObj);
32  HRESULT Send_InterfaceDefs(UID_t uid);
33  HRESULT Send_TagDef(cAtomRef atomref);
34 
35  // Send actual object state data.
36  HRESULT Send_PropsI(cXObject* pObj, const cScriptableInterfaceDef* pInterfaceDef);
37  HRESULT Send_Props(cXObject* pObj, const cScriptableInterfaceDef* pInterfaceDef);
38  HRESULT Send_Props(cXObject* pObj, SCRIPTINTERFACEID_t bInterfaceID);
39  HRESULT Send_Prop(UID_t uid, SCRIPTINTERFACEID_t bInterfaceID, SCRIPTPROPID_t bPropIndex, const cVariant& vVal);
40  HRESULT Send_Prop(cXObject* pObj, const cScriptableProp* pProp, const cVariant& vVal);
41  HRESULT Send_PropGet(cXObject* pObj, const cScriptableProp* pProp);
42  HRESULT Send_InvokeResponse(UID_t uid, SCRIPTINTERFACEID_t bInterfaceID, SCRIPTPROPID_t bMethodIndex, const cVariant& vValRet);
43  HRESULT Send_InvokeResponse(cXObject* pObj, const cScriptableMethod* pMethod, const cVariant& vValRet);
44  HRESULT Send_Tags(cXObject* pObj, bool bSendIfEmpty);
45 
46  HRESULT Send_InvokeResponseV(const cVariant& vValRet);
47  };
48 
49  class cXProtocolFactory;
50 
52  : public cProtocolStream // IUnkObject
53  , public cXProtocolBase
54  , public cXProtocolRx
55  , public cXProtocolServerTx
56  , public IAuthUser
57  , public cStreamOutput
58  {
65 
66  public:
68 
69  protected:
70  HRESULT onReq_Error();
71  HRESULT onReq_Interfaces();
72  HRESULT onReq_InterfaceDef();
73  HRESULT onReq_Prop();
74  HRESULT onReq_Props();
75  HRESULT onReq_Invoke();
76  HRESULT onReq_Tags();
77  HRESULT onReq_TagDef();
78  HRESULT onReq_File();
79  virtual HRESULT onReq_File(const FILECHAR_t* pszReqName, size_t nFilePos);
80  HRESULT onReq_Ping();
81 
82  virtual HRESULT onX_Error(HRESULT hResRet, const cVariant& vVal) override;
83  HRESULT onSet_Prop();
84  HRESULT onSet_Tag();
85  HRESULT onSet_TagDef();
86  HRESULT onSet_File();
87 
88  virtual HRESULT ProcessStreamRxMsg() override;
89 
90  public:
91  cXProtocolServerStream(cXProtocolFactory* pProtocolFactory, IUnkObject* pServerConnection, cStreamInput* pStreamInp, cStreamOutput* pStreamOut);
92  virtual ~cXProtocolServerStream();
93 
94  HASHCODE_t get_HashCode() const noexcept
95  {
97  }
98 
99  // overrides
100  virtual bool isClientSide() const override
101  {
102  // cXProtocolBase
103  return false;
104  }
105  STDMETHOD_(cString, get_Name)() const override
106  {
108  return cProtocolStream::get_Name();
109  }
110  STDMETHOD_(PLEVEL_TYPE, get_PrivLevel)() const override
111  {
114  return PLEVEL_Admin;
115  }
116  STDMETHOD_(bool, CanBeDetectedBy)(const IAuthUser* pViewer) const override
117  {
119  UNREFERENCED_PARAMETER(pViewer);
120  return true;
121  }
122 
123  virtual HRESULT DisposeThis() override;
124  virtual HRESULT ProcessStreamPacket() override;
125  virtual HRESULT WriteString(const char* pszStr) override;
126  virtual HRESULT OnTickStream() override;
127  };
128 
130  {
131  public:
132  cXProtocolServerStreamImpl(cXProtocolFactory* pProtocolFactory, IUnkObject* pServerConnection, cStreamInput* pStreamInp, cStreamOutput* pStreamOut)
133  : cXProtocolServerStream(pProtocolFactory, pServerConnection, pStreamInp, pStreamOut)
134  {
135  }
137  };
138 
140  : public IProtocolFactory
141  , public cXProtocolDataMgr
142  {
145  public:
147  virtual ~cXProtocolFactory();
148 
149  virtual const char* get_ProtocolName() const override
150  {
151  return "XProtocol";
152  }
153  virtual size_t get_ProtocolMaxMessageSize() const override
154  {
156  return cStream::k_FILE_BLOCK_SIZE + 1024; // k_Packet_Size_Max
157  }
158  virtual HRESULT TestProtocol(const BYTE* pszPrefixData, size_t iPrefixLen) const override;
159  virtual cProtocolStreamPtr CreateProtocolStream(IUnkObject* pServerConnection, cStreamInput* pStreamInp, cStreamOutput* pStreamOut) override
160  {
161  return new cXProtocolServerStreamImpl(this, pServerConnection, pStreamInp, pStreamOut);
162  }
163  };
164 };
165 #endif
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cProtocol.h:24
HASHCODE_t get_HashCode() const noexcept
Definition: cProtocol.h:48
Definition: cScriptableInterface.h:300
Definition: cScriptableInterface.h:97
Definition: cVariant.h:26
Definition: cXObject.h:78
Definition: cXProtocol.h:84
Definition: cXProtocol.h:60
Definition: cXProtocolServer.h:142
virtual size_t get_ProtocolMaxMessageSize() const override
Definition: cXProtocolServer.h:153
virtual const char * get_ProtocolName() const override
Definition: cXProtocolServer.h:149
virtual cProtocolStreamPtr CreateProtocolStream(IUnkObject *pServerConnection, cStreamInput *pStreamInp, cStreamOutput *pStreamOut) override
Definition: cXProtocolServer.h:159
Definition: cXProtocol.h:175
Definition: cXProtocolServer.h:130
cXProtocolServerStreamImpl(cXProtocolFactory *pProtocolFactory, IUnkObject *pServerConnection, cStreamInput *pStreamInp, cStreamOutput *pStreamOut)
Definition: cXProtocolServer.h:132
Definition: cXProtocolServer.h:58
cTimeSys m_timePing
last time i got a ping from this client
Definition: cXProtocolServer.h:67
STDMETHOD_(bool, CanBeDetectedBy)(const IAuthUser *pViewer) const override
Definition: cXProtocolServer.h:116
virtual bool isClientSide() const override
Definition: cXProtocolServer.h:100
STDMETHOD_(PLEVEL_TYPE, get_PrivLevel)() const override
Definition: cXProtocolServer.h:110
HASHCODE_t get_HashCode() const noexcept
Definition: cXProtocolServer.h:94
STDMETHOD_(cString, get_Name)() const override
Definition: cXProtocolServer.h:105
Definition: cXProtocolServer.h:19
Definition: cXProtocol.h:119
Definition: cAtom.h:63
Definition: cRefPtr.h:22
static const size_t k_FILE_BLOCK_SIZE
default arbitrary transfer block size. more than this is NOT more efficient.
Definition: cStream.h:89
Definition: cStream.h:306
Definition: cStream.h:126
Definition: cTimeSys.h:93
Definition: IAuthUser.h:17
Definition: cMesh.h:22
BYTE SCRIPTINTERFACEID_t
enumerate all the defined interface definitions.
Definition: cScriptableInterface.h:35
PLEVEL_TYPE
Definition: PrivLevel.h:16
BYTE SCRIPTPROPID_t
index to method or prop.
Definition: cScriptableEventsMask.h:28
HASHCODE32_t UID_t
Sort of the same as a HASHCODE_t. not the same as UIDINDEX_t.
Definition: cUID.h:18
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
UINT_PTR HASHCODE_t
could hold a pointer converted to a number? maybe 64 or 32 bit ? same as size_t.
Definition: GrayCore.h:116
Definition: cProtocol.h:125