X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fencode_server.h;h=6e24a19849827cdde20c276e79d331b8a2cd1ab5;hp=f6f1fc9b9c0e2a82071c1fb298fa965039db7cc2;hb=2d4e8c5f69cc694625ad95dcee554499605f823b;hpb=17df947ac256397311a11894062070f8069c7e75 diff --git a/src/lib/encode_server.h b/src/lib/encode_server.h index f6f1fc9b9..6e24a1984 100644 --- a/src/lib/encode_server.h +++ b/src/lib/encode_server.h @@ -1,79 +1,79 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-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 . */ + #ifndef DCPOMATIC_ENCODE_SERVER_H #define DCPOMATIC_ENCODE_SERVER_H + /** @file src/encode_server.h - * @brief Server class. + * @brief EncodeServer class. */ + +#include "server.h" #include "exception_store.h" #include #include #include #include + class Socket; class Log; + /** @class EncodeServer * @brief A class to run a server which can accept requests to perform JPEG2000 * encoding work. */ -class EncodeServer : public ExceptionStore, public boost::noncopyable +class EncodeServer : public Server, public ExceptionStore { public: - EncodeServer (boost::shared_ptr log, bool verbose); + EncodeServer (bool verbose, int num_threads); ~EncodeServer (); - void run (int num_threads); + void run (); private: + void handle (std::shared_ptr); void worker_thread (); - int process (boost::shared_ptr socket, struct timeval &, struct timeval &); + int process (std::shared_ptr socket, struct timeval &, struct timeval &); void broadcast_thread (); void broadcast_received (); - 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::thread_group _worker_threads; + std::list> _queue; 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; + int _num_threads; struct Broadcast { Broadcast () - : thread (0) - , socket (0) + : socket (0) {} - boost::thread* thread; + boost::mutex mutex; + boost::thread thread; boost::asio::ip::udp::socket* socket; char buffer[64]; boost::asio::ip::udp::endpoint send_endpoint; @@ -82,4 +82,5 @@ private: } _broadcast; }; + #endif