X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fserver.h;h=0b1950aa7c550e461e2dcf0e1a49ae1964949c49;hp=89aeca62632c3aeda94bff27b43e7fe494d6efa6;hb=ac34066d5e448d1984d11a180be74e31b6e13b5c;hpb=bb95f333f15ace7c032bb5b5761b512b6fe2e84e diff --git a/src/lib/server.h b/src/lib/server.h index 89aeca626..0b1950aa7 100644 --- a/src/lib/server.h +++ b/src/lib/server.h @@ -1,92 +1,63 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2015-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ -/** @file src/server.h - * @brief Class to describe a server to which we can send - * encoding work, and a class to implement such a server. - */ -#include +#ifndef DCPOMATIC_SERVER_H +#define DCPOMATIC_SERVER_H + + #include #include #include -#include "log.h" +#include + class Socket; -/** @class ServerDescription - * @brief Class to describe a server to which we can send encoding work. - */ -class ServerDescription -{ -public: - /** @param h Server host name or IP address in string form. - * @param t Number of threads to use on the server. - */ - ServerDescription (std::string h, int t) - : _host_name (h) - , _threads (t) - {} - - /** @return server's host name or IP address in string form */ - std::string host_name () const { - return _host_name; - } - - /** @return number of threads to use on the server */ - int threads () const { - return _threads; - } - - void set_host_name (std::string n) { - _host_name = n; - } - - void set_threads (int t) { - _threads = t; - } - - std::string as_metadata () const; - - static ServerDescription * create_from_metadata (std::string v); - -private: - /** server's host name */ - std::string _host_name; - /** number of threads to use on the server */ - int _threads; -}; class Server { public: - Server (boost::shared_ptr log); + explicit Server (int port, int timeout = 30); + virtual ~Server (); + + Server (Server const&) = delete; + Server& operator= (Server const&) = delete; + + virtual void run (); + void stop (); - void run (int num_threads); +protected: + boost::mutex _mutex; + bool _terminate; private: - void worker_thread (); - int process (boost::shared_ptr socket); - - std::vector _worker_threads; - std::list > _queue; - boost::mutex _worker_mutex; - boost::condition _worker_condition; - boost::shared_ptr _log; + virtual void handle (std::shared_ptr socket) = 0; + + void start_accept (); + void handle_accept (std::shared_ptr, boost::system::error_code const &); + + boost::asio::io_service _io_service; + boost::asio::ip::tcp::acceptor _acceptor; + int _timeout; }; + + +#endif