Remote Call Framework 3.3
ZlibCompressionFilter.hpp
1 
2 //******************************************************************************
3 // RCF - Remote Call Framework
4 //
5 // Copyright (c) 2005 - 2022, Delta V Software. All rights reserved.
6 // https://www.deltavsoft.com
7 //
8 // RCF is distributed under dual licenses - closed source or GPL.
9 // Consult your particular license for conditions of use.
10 //
11 // If you have not purchased a commercial license, you are using RCF under GPL terms.
12 //
13 // Version: 3.3
14 // Contact: support <at> deltavsoft.com
15 //
16 //******************************************************************************
17 
18 #ifndef INCLUDE_RCF_ZLIBCOMPRESSIONFILTER_HPP
19 #define INCLUDE_RCF_ZLIBCOMPRESSIONFILTER_HPP
20 
21 #include <memory>
22 #include <vector>
23 
24 #include <RCF/Filter.hpp>
25 #include <RCF/Export.hpp>
26 #include <RCF/Tools.hpp>
27 
28 namespace RCF {
29 
30  static const int ZlibDefaultBufferSize = 4096;
31 
32  class ZlibCompressionReadFilter;
33  class ZlibCompressionWriteFilter;
34  class ZlibDll;
35 
36  std::string zlibError(int zErr);
37 
38  class RCF_EXPORT ZlibCompressionFilterBase :
39  public Filter,
40  Noncopyable
41  {
42  public:
43  ZlibCompressionFilterBase(bool stateful, bool serverSide);
44 
45  private:
46 
47  ZlibDll & mZlibDll;
48 
49  void resetState();
50 
51  void read(const ByteBuffer &byteBuffer, std::size_t bytesRequested);
52  void write(const std::vector<ByteBuffer> &byteBuffers);
53  void onReadCompleted(const ByteBuffer &byteBuffer);
54  void onWriteCompleted(std::size_t bytesTransferred);
55 
56  enum IoState
57  {
58  Ready,
59  Reading,
60  Writing
61  };
62 
63  // input state
64  IoState mPreState;
65 
66  friend class ZlibCompressionReadFilter;
67  friend class ZlibCompressionWriteFilter;
68 
69  std::shared_ptr<ZlibCompressionReadFilter> mReadFilter;
70  std::shared_ptr<ZlibCompressionWriteFilter> mWriteFilter;
71  };
72 
73  class ServerSide {};
74 
75  class RCF_EXPORT ZlibStatelessCompressionFilter :
76  public ZlibCompressionFilterBase
77  {
78  private:
79  friend class ZlibStatelessCompressionFilterFactory;
80 
81  ZlibStatelessCompressionFilter(ServerSide *);
82 
83  public:
84  ZlibStatelessCompressionFilter();
85 
86  int getFilterId() const;
87  };
88 
89  class RCF_EXPORT ZlibStatefulCompressionFilter :
90  public ZlibCompressionFilterBase
91  {
92  private:
93  friend class ZlibStatefulCompressionFilterFactory;
94 
95  ZlibStatefulCompressionFilter(ServerSide *);
96 
97  public:
98  ZlibStatefulCompressionFilter();
99 
100  int getFilterId() const;
101  };
102 
103  class RCF_EXPORT ZlibStatelessCompressionFilterFactory :
104  public FilterFactory
105  {
106  public:
107  ZlibStatelessCompressionFilterFactory();
108 
109  FilterPtr createFilter(RcfServer & server);
110  int getFilterId();
111  };
112 
113  class RCF_EXPORT ZlibStatefulCompressionFilterFactory :
114  public FilterFactory
115  {
116  public:
117  ZlibStatefulCompressionFilterFactory();
118 
119  FilterPtr createFilter(RcfServer & server);
120  int getFilterId();
121  };
122 
123  typedef ZlibStatefulCompressionFilter ZlibCompressionFilter;
124  typedef std::shared_ptr<ZlibCompressionFilter> ZlibCompressionFilterPtr;
125 
126  typedef ZlibStatefulCompressionFilterFactory ZlibCompressionFilterFactory;
127  typedef std::shared_ptr<ZlibCompressionFilterFactory> ZlibCompressionFilterFactoryPtr;
128 
129 } // namespace RCF
130 
131 #endif // ! INCLUDE_RCF_ZLIBCOMPRESSIONFILTER_HPP
Definition: AmiIoHandler.hpp:23