Merge branch 'master' of /home/carl/git/dvdomatic
[dcpomatic.git] / src / lib / server.cc
index 9e43601c471218d85ba50e86633ae0a259d6accd..f8c4425d991f42b4a538e2593b198514ddcd491c 100644 (file)
@@ -25,6 +25,7 @@
 #include <string>
 #include <vector>
 #include <sstream>
+#include <iostream>
 #include <boost/algorithm/string.hpp>
 #include "server.h"
 #include "util.h"
@@ -69,13 +70,11 @@ Server::Server (Log* log)
 }
 
 int
-Server::process (shared_ptr<asio::ip::tcp::socket> socket)
+Server::process (shared_ptr<Socket> socket)
 {
-       SocketReader reader (socket);
-       
        char buffer[128];
-       reader.read_indefinite ((uint8_t *) buffer, sizeof (buffer));
-       reader.consume (strlen (buffer) + 1);
+       socket->read_indefinite ((uint8_t *) buffer, sizeof (buffer), 30);
+       socket->consume (strlen (buffer) + 1);
        
        stringstream s (buffer);
        
@@ -122,20 +121,12 @@ Server::process (shared_ptr<asio::ip::tcp::socket> socket)
        }
        
        for (int i = 0; i < image->components(); ++i) {
-               reader.read_definite_and_consume (image->data()[i], image->line_size()[i] * image->lines(i));
+               socket->read_definite_and_consume (image->data()[i], image->line_size()[i] * image->lines(i), 30);
        }
        
-#ifdef DEBUG_HASH
-       image->hash ("Image for encoding (as received by server)");
-#endif         
-       
        DCPVideoFrame dcp_video_frame (image, out_size, padding, scaler, frame, frames_per_second, post_process, colour_lut_index, j2k_bandwidth, _log);
        shared_ptr<EncodedData> encoded = dcp_video_frame.encode_locally ();
        encoded->send (socket);
-
-#ifdef DEBUG_HASH
-       encoded->hash ("Encoded image (as made by server and as sent back)");
-#endif         
        
        return frame;
 }
@@ -149,7 +140,7 @@ Server::worker_thread ()
                        _worker_condition.wait (lock);
                }
 
-               shared_ptr<asio::ip::tcp::socket> socket = _queue.front ();
+               shared_ptr<Socket> socket = _queue.front ();
                _queue.pop_front ();
                
                lock.unlock ();
@@ -172,7 +163,9 @@ Server::worker_thread ()
                if (frame >= 0) {
                        struct timeval end;
                        gettimeofday (&end, 0);
-                       cout << "Encoded frame " << frame << " in " << (seconds (end) - seconds (start)) << "\n";
+                       stringstream s;
+                       s << "Encoded frame " << frame << " in " << (seconds (end) - seconds (start));
+                       _log->log (s.str ());
                }
                
                _worker_condition.notify_all ();
@@ -180,19 +173,21 @@ Server::worker_thread ()
 }
 
 void
-Server::run ()
+Server::run (int num_threads)
 {
-       int const num_threads = Config::instance()->num_local_encoding_threads ();
+       stringstream s;
+       s << "Server starting with " << num_threads << " threads.";
+       _log->log (s.str ());
        
        for (int i = 0; i < num_threads; ++i) {
                _worker_threads.push_back (new thread (bind (&Server::worker_thread, this)));
        }
-       
+
        asio::io_service io_service;
        asio::ip::tcp::acceptor acceptor (io_service, asio::ip::tcp::endpoint (asio::ip::tcp::v4(), Config::instance()->server_port ()));
        while (1) {
-               shared_ptr<asio::ip::tcp::socket> socket (new asio::ip::tcp::socket (io_service));
-               acceptor.accept (*socket);
+               shared_ptr<Socket> socket (new Socket);
+               acceptor.accept (socket->socket ());
 
                mutex::scoped_lock lock (_worker_mutex);