Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cMailslot.h
Go to the documentation of this file.
1 //
5 
6 #ifndef _INC_cMailslot_H
7 #define _INC_cMailslot_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "../GrayLibBase.h"
13 
14 #if !defined(UNDER_CE)
15 #include "../WinAPI/cOverlappedIO.h"
17 #include "GrayCore/include/cHeap.h"
21 
22 #ifdef __linux__
23 #include <mqueue.h>
24 struct _SECURITY_ATTRIBUTES;
25 #endif
26 
27 namespace GrayLib
28 {
30 
32  {
38 
39  public:
40  static const FILECHAR_t* k_pszServerDefault; // _GT(".")
41 
42  protected:
44 #ifdef _WIN32
45  cOSHandle m_hMailSlot;
46  cOverlappedIO m_overlapped;
47 #else
48  mqd_t m_q;
49 #endif
50 
51  protected:
52  cMailslot();
53  virtual ~cMailslot();
54 
55  virtual HRESULT Connect(const FILECHAR_t* pszSlotName, const FILECHAR_t* pszServerName = nullptr, _SECURITY_ATTRIBUTES* pSa = nullptr) = 0;
56 
57  static StrLen_t GRAYCALL MakeMailslotPath(OUT FILECHAR_t* pszPath, const FILECHAR_t* pszSlotName, const FILECHAR_t* pszServerName = nullptr);
58  static cStringF GRAYCALL MakeMailslotPath(const FILECHAR_t* pszSlotName, const FILECHAR_t* pszServerName = nullptr);
59 
60  public:
61  virtual void Disconnect();
62 
64  {
65  return m_sMailslotPath;
66  }
67 
68  bool isOpen() const
69  {
70 #ifdef _WIN32
71  return m_hMailSlot.isValidHandle();
72 #else
73  return m_q != ((mqd_t)-1);
74 #endif
75  }
76 
78  };
79 
81  {
85 
86  public:
89 
90  public:
92  virtual ~cMailslotReader();
93 
94  virtual HRESULT Connect(const FILECHAR_t* pszSlotname, const FILECHAR_t* szServer = nullptr, _SECURITY_ATTRIBUTES* pSa = nullptr) override;
95 
96  virtual HRESULT ReadX(void* pbData, size_t nLengthMax) override;
97  HRESULT ReadX(cHeapBlock& buffer, size_t nReasonableLengthMax = 0x1000);
98 
99  UINT GetMessageCount(size_t* pnNextMessageLength = nullptr);
100  bool put_ReadTimeout(TIMESYSD_t nReadTimeout);
101  };
102 
104  {
107  public:
108  cMailslotWriter();
109  virtual ~cMailslotWriter();
110 
111  HRESULT WriteMailslot(const void* pbData, size_t nDataSize, TIMESYSD_t nTimeWait);
112 
113  HRESULT ConnectSA(cStringF sMailslotPath, _SECURITY_ATTRIBUTES* pSa);
114 
115  virtual HRESULT Connect(const FILECHAR_t* pszSlot, const FILECHAR_t* szServer = nullptr, _SECURITY_ATTRIBUTES* pSa = nullptr) override;
116  virtual HRESULT WriteX(const void* pbData, size_t nDataSize) override
117  {
119  return WriteMailslot(pbData, nDataSize, cTimeSys::k_INF);
120  }
121 
122  HRESULT ConnectWrite(const FILECHAR_t* pszSlot, const FILECHAR_t* pszServer, const void* pbData, size_t nDataSize, TIMESYSD_t nTimeWait = 0)
123  {
126  HRESULT hRes = Connect(pszSlot, pszServer);
127  if (FAILED(hRes))
128  {
129  return hRes;
130  }
131  return WriteMailslot(pbData, nDataSize, nTimeWait);
132  }
133  };
134 };
135 #endif // UNDER_CE
136 #endif // _INC_cMailslot_H
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define FAILED(x)
Definition: HResult.h:30
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cMailslot.h:81
size_t m_nMaxMessageSize
0 = any size
Definition: cMailslot.h:87
TIMESYSD_t m_nReadTimeout
cTimeSys::k_INF = MAILSLOT_WAIT_FOREVER
Definition: cMailslot.h:88
Definition: cMailslot.h:104
HRESULT ConnectWrite(const FILECHAR_t *pszSlot, const FILECHAR_t *pszServer, const void *pbData, size_t nDataSize, TIMESYSD_t nTimeWait=0)
Definition: cMailslot.h:122
virtual HRESULT WriteX(const void *pbData, size_t nDataSize) override
Definition: cMailslot.h:116
Definition: cMailslot.h:32
cStringF m_sMailslotPath
"\\\\%s\\mailslot\\%s"
Definition: cMailslot.h:43
virtual HRESULT Connect(const FILECHAR_t *pszSlotName, const FILECHAR_t *pszServerName=nullptr, _SECURITY_ATTRIBUTES *pSa=nullptr)=0
bool isOpen() const
Definition: cMailslot.h:68
UNITTEST2_PREDEF(cMailslot)
cStringF get_MailslotPath() const
Definition: cMailslot.h:63
static const FILECHAR_t * k_pszServerDefault
Definition: cMailslot.h:40
mqd_t m_q
init to -1
Definition: cMailslot.h:48
Definition: cHeap.h:156
Definition: cOSHandle.h:59
bool isValidHandle() const noexcept
Definition: cOSHandle.h:125
Definition: cStream.h:306
Definition: cStream.h:126
static const TIMESYS_t k_INF
INFINITE in _WIN32. MAILSLOT_WAIT_FOREVER.
Definition: cTimeSys.h:101
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
INT32 TIMESYSD_t
Time delta. signed milli-Seconds Span. cTimeSys::k_DMAX, cTimeSys::k_INF = MAILSLOT_WAIT_FOREVER.
Definition: cTimeSys.h:28
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22