X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fserver.h;h=6ef2688310ba0ff46edb15c90d8cfdf5531abc90;hb=950ca13738e95f27ce67dbc087db15c68e0c6032;hp=97bc26fd896b130d777426a41c680e1a58ca1bbc;hpb=1ad291db7e847fbb71e5bd9f2f81db6bfb2a022e;p=dcpomatic.git diff --git a/src/lib/server.h b/src/lib/server.h index 97bc26fd8..6ef268831 100644 --- a/src/lib/server.h +++ b/src/lib/server.h @@ -1,85 +1,56 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2015 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 . */ #ifndef DCPOMATIC_SERVER_H #define DCPOMATIC_SERVER_H -/** @file src/server.h - * @brief Server class. - */ - -#include "exception_store.h" #include #include #include +#include #include class Socket; -class Log; -/** @class Server - * @brief A class to run a server which can accept requests to perform JPEG2000 - * encoding work. - */ -class Server : public ExceptionStore, public boost::noncopyable +class Server : public boost::noncopyable { public: - Server (boost::shared_ptr log, bool verbose); - ~Server (); + explicit Server (int port, int timeout = 30); + virtual ~Server (); + + 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, struct timeval &, struct timeval &); - void broadcast_thread (); - void broadcast_received (); + virtual void handle (boost::shared_ptr socket) = 0; + void start_accept (); void handle_accept (boost::shared_ptr, boost::system::error_code const &); - bool _terminate; - - std::vector _worker_threads; - std::list > _queue; - boost::mutex _worker_mutex; - boost::condition _full_condition; - boost::condition _empty_condition; - boost::shared_ptr _log; - bool _verbose; - boost::asio::io_service _io_service; boost::asio::ip::tcp::acceptor _acceptor; - - struct Broadcast { - - Broadcast () - : thread (0) - , socket (0) - {} - - boost::thread* thread; - boost::asio::ip::udp::socket* socket; - char buffer[64]; - boost::asio::ip::udp::endpoint send_endpoint; - boost::asio::io_service io_service; - - } _broadcast; + int _timeout; }; #endif