X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fserver.h;h=3e7c7945a34e69d246b1186ec963c5b67c157ce8;hb=8f12ef26c5f6c0e9f408828b99ff8bdc90236406;hp=398401a555dd1eff784ad1d2289677e5258660f2;hpb=5859b758e3a6e0191ce12e77b636c7def58bbc3b;p=dcpomatic.git diff --git a/src/lib/server.h b/src/lib/server.h index 398401a55..3e7c7945a 100644 --- a/src/lib/server.h +++ b/src/lib/server.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2015 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,83 +17,36 @@ */ -/** @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. - */ +#ifndef DCPOMATIC_SERVER_H +#define DCPOMATIC_SERVER_H -#include #include #include #include -#include -#include "log.h" +#include class Socket; -namespace cxml { - class Node; -} - -/** @class ServerDescription - * @brief Class to describe a server to which we can send encoding work. - */ -class ServerDescription +class Server : public boost::noncopyable { 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) - {} - - ServerDescription (boost::shared_ptr); - - /** @return server's host name or IP address in string form */ - std::string host_name () const { - return _host_name; - } + Server (int port); + virtual ~Server (); - /** @return number of threads to use on the server */ - int threads () const { - return _threads; - } + virtual void run (); - void set_host_name (std::string n) { - _host_name = n; - } - - void set_threads (int t) { - _threads = t; - } - - void as_xml (xmlpp::Node *) const; - - static ServerDescription * create_from_metadata (std::string v); +protected: + boost::mutex _mutex; + bool _terminate; private: - /** server's host name */ - std::string _host_name; - /** number of threads to use on the server */ - int _threads; -}; + virtual void handle (boost::shared_ptr socket) = 0; -class Server -{ -public: - Server (boost::shared_ptr log); - - void run (int num_threads); + void start_accept (); + void handle_accept (boost::shared_ptr, boost::system::error_code const &); -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; + boost::asio::io_service _io_service; + boost::asio::ip::tcp::acceptor _acceptor; }; + +#endif