85 lines
3.1 KiB
C++
85 lines
3.1 KiB
C++
// Copyright (C) 2006 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#undef DLIB_SERVER_IOSTREAm_ABSTRACT_
|
|
#ifdef DLIB_SERVER_IOSTREAm_ABSTRACT_
|
|
|
|
|
|
#include "server_kernel_abstract.h"
|
|
#include <iostream>
|
|
#include <string>
|
|
#include "../uintn.h"
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
class server_iostream : public server
|
|
{
|
|
|
|
/*!
|
|
WHAT THIS EXTENSION DOES FOR server
|
|
This extension redefines the on_connect() function so that
|
|
instead of giving you a connection object you get an istream
|
|
and ostream object.
|
|
|
|
THREAD SAFETY
|
|
Note that in on_connect() the input stream in is tied to the output stream
|
|
out. This means that when you read from in it will modify out and thus
|
|
it is not safe to touch in and out concurrently from different threads
|
|
unless you untie them (which you do by saying in.tie(0);)
|
|
!*/
|
|
|
|
protected:
|
|
|
|
void shutdown_connection (
|
|
uint64 id
|
|
);
|
|
/*!
|
|
ensures
|
|
- if (there is a connection currently being serviced with the given id) then
|
|
- the specified connection is shutdown. (i.e. connection::shutdown() is
|
|
called on it so the iostreams operating on it will return EOF)
|
|
!*/
|
|
|
|
private:
|
|
|
|
virtual void on_connect (
|
|
std::istream& in,
|
|
std::ostream& out,
|
|
const std::string& foreign_ip,
|
|
const std::string& local_ip,
|
|
unsigned short foreign_port,
|
|
unsigned short local_port,
|
|
uint64 connection_id
|
|
)=0;
|
|
/*!
|
|
requires
|
|
- on_connect() is called when there is a new TCP connection that needs
|
|
to be serviced.
|
|
- in == the input stream that reads data from the new connection
|
|
- out == the output stream that writes data to the new connection
|
|
- in.tie() == &out (i.e. when you read from in it automatically calls out.flush())
|
|
- foreign_ip == the foreign ip address for this connection
|
|
- foreign_port == the foreign port number for this connection
|
|
- local_ip == the IP of the local interface this connection is using
|
|
- local_port == the local port number for this connection
|
|
- on_connect() is run in its own thread
|
|
- is_running() == true
|
|
- the number of current connections < get_max_connection()
|
|
- connection_id == an integer that uniquely identifies this connection.
|
|
It can be used by shutdown_connection() to terminate this connection.
|
|
ensures
|
|
- when the iostreams hit EOF on_connect() will terminate.
|
|
(because this is how clear() signals you the server is shutting down)
|
|
- this function will not call clear()
|
|
throws
|
|
- does not throw any exceptions
|
|
!*/
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif // DLIB_SERVER_IOSTREAm_ABSTRACT_
|
|
|
|
|