IOStream.h
1 /*
2 * Copyright (C) 2012 by Marc Boris Duerner
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * As a special exception, you may use this file as part of a free
10 * software library without restriction. Specifically, if other files
11 * instantiate templates or use macros or inline functions from this
12 * file, or you compile this file and link it with other files to
13 * produce an executable, this file does not by itself cause the
14 * resulting executable to be covered by the GNU General Public
15 * License. This exception does not however invalidate any other
16 * reasons why the executable file might be covered by the GNU Library
17 * General Public License.
18 *
19 * This library is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Lesser General Public License for more details.
23 *
24 * You should have received a copy of the GNU Lesser General Public
25 * License along with this library; if not, write to the Free Software
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 */
28 
29 #ifndef Pt_Http_IOStream_h
30 #define Pt_Http_IOStream_h
31 
32 #include <Pt/Http/Api.h>
33 #include <Pt/System/IOStream.h>
34 #include <Pt/Signal.h>
35 #include <Pt/Connectable.h>
36 
37 namespace Pt {
38 
39 namespace Http {
40 
41 class Connection;
42 
43 class PT_HTTP_API IOStream : public Pt::BasicIOStream<char>,
44  public Pt::Connectable
45 {
46  public :
47  IOStream(Connection* conn);
48 
49  virtual ~IOStream();
50 
51  void beginInput();
52 
53  size_t endInput();
54 
55  void beginOutput();
56 
57  size_t endOutput();
58 
59  Pt::Signal<>& inputReady()
60  {
61  return _inputReady;
62  }
63 
64  Pt::Signal<>& outputReady()
65  {
66  return _outputReady;
67  }
68 
69 
70  void cancel();
71 
72  private:
73  void onInput(Pt::System::IOBuffer& b)
74  {
75  _inputReady.send();
76  }
77 
78  void onOutput(Pt::System::IOBuffer& b)
79  {
80  _outputReady.send();
81  }
82  private:
83  Connection* _conn;
84  std::streambuf* _buffer;
85  Pt::Signal<> _inputReady;
86  Pt::Signal<> _outputReady;
87 };
88 
89 }
90 
91 }
92 
93 #endif
Connection Management for Signal and Slot Objects.
Definition: Connectable.h:49
Input/Output stream.
Definition: IOStream.h:141
Multicast Signal to call multiple slots.
Definition: Signal.h:109
Implements std::streambuf for I/O devices.
Definition: IOBuffer.h:43