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
37namespace Pt {
38
39namespace Http {
40
41class Connection;
42
51class PT_HTTP_API IOStream : public Pt::BasicIOStream<char>,
52 public Pt::Connectable
53{
54 public :
58
61 virtual ~IOStream();
62
65 void beginInput();
66
69 size_t endInput();
70
74
77 size_t endOutput();
78
82 {
83 return _inputReady;
84 }
85
89 {
90 return _outputReady;
91 }
92
95 void cancel();
96
97 private:
98 void onInput(Pt::System::IOBuffer& b)
99 {
100 _inputReady.send();
101 }
102
103 void onOutput(Pt::System::IOBuffer& b)
104 {
105 _outputReady.send();
106 }
107 private:
108 Connection* _conn;
109 std::streambuf* _buffer;
110 Pt::Signal<> _inputReady;
111 Pt::Signal<> _outputReady;
112};
113
114}
115
116}
117
118#endif
Input and output stream over a BasicStreamBuffer.
Definition IOStream.h:180
Connection Management for Signal and Slot Objects.
Definition Connectable.h:50
Represents a connection between a Signal/Delegate and a slot.
Definition Connection.h:96
void cancel()
Cancels pending I/O.
IOStream(Connection *conn)
Constructs the stream for conn.
Pt::Signal & outputReady()
Returns the signal emitted when output is ready.
Definition IOStream.h:88
size_t endOutput()
Ends an asynchronous write.
Pt::Signal & inputReady()
Returns the signal emitted when input is ready.
Definition IOStream.h:81
size_t endInput()
Ends an asynchronous read.
void beginOutput()
Begins an asynchronous write.
void beginInput()
Begins an asynchronous read.
virtual ~IOStream()
Destructor.
Multicast Signal to call multiple slots.
Definition Signal.h:190
Stream buffer for an IODevice.
Definition IOBuffer.h:60
HTTP clients and servers.
Core module.
Definition Allocator.h:33