Response stream now subclass std::ostream. Also some cleanup of default_resource example.
This commit is contained in:
parent
4bc50785ac
commit
c58b7a788e
3 changed files with 88 additions and 112 deletions
|
|
@ -14,7 +14,7 @@ namespace SimpleWeb {
|
|||
template <class socket_type>
|
||||
class ServerBase {
|
||||
public:
|
||||
class Response {
|
||||
class Response : public std::ostream {
|
||||
friend class ServerBase<socket_type>;
|
||||
private:
|
||||
boost::asio::yield_context& yield;
|
||||
|
|
@ -24,8 +24,12 @@ namespace SimpleWeb {
|
|||
socket_type &socket;
|
||||
|
||||
Response(boost::asio::io_service& io_service, socket_type &socket, boost::asio::yield_context& yield):
|
||||
yield(yield), socket(socket), stream(&streambuf) {}
|
||||
|
||||
std::ostream(&streambuf), yield(yield), socket(socket) {}
|
||||
|
||||
public:
|
||||
size_t size() {
|
||||
return streambuf.size();
|
||||
}
|
||||
void flush() {
|
||||
boost::system::error_code ec;
|
||||
boost::asio::async_write(socket, streambuf, yield[ec]);
|
||||
|
|
@ -33,28 +37,6 @@ namespace SimpleWeb {
|
|||
if(ec)
|
||||
throw std::runtime_error(ec.message());
|
||||
}
|
||||
|
||||
public:
|
||||
std::ostream stream;
|
||||
|
||||
size_t size() {
|
||||
return streambuf.size();
|
||||
}
|
||||
|
||||
template <class T>
|
||||
Response& operator<<(const T& t) {
|
||||
stream << t;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Response& operator<<(std::ostream& (*manip)(std::ostream&)) {
|
||||
stream << manip;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Response& operator<<(Response& (*manip)(Response&)) {
|
||||
return manip(*this);
|
||||
}
|
||||
};
|
||||
|
||||
static Response& flush(Response& r) {
|
||||
|
|
@ -307,11 +289,13 @@ namespace SimpleWeb {
|
|||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
response.flush();
|
||||
}
|
||||
catch(const std::exception &e) {
|
||||
return;
|
||||
if(response.size()>0) {
|
||||
try {
|
||||
response.flush();
|
||||
}
|
||||
catch(const std::exception &e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(timeout_content>0)
|
||||
timer->cancel();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue