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