summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/server/server_iostream_abstract.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/server/server_iostream_abstract.h')
-rw-r--r--ml/dlib/dlib/server/server_iostream_abstract.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/ml/dlib/dlib/server/server_iostream_abstract.h b/ml/dlib/dlib/server/server_iostream_abstract.h
new file mode 100644
index 000000000..86cd460bf
--- /dev/null
+++ b/ml/dlib/dlib/server/server_iostream_abstract.h
@@ -0,0 +1,84 @@
+// 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_
+
+