Move Socket to dcpomatic_socket.{cc,h}.
[dcpomatic.git] / src / lib / dcpomatic_socket.h
1 /*
2     Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #include <boost/asio.hpp>
21
22 /** @class Socket
23  *  @brief A class to wrap a boost::asio::ip::tcp::socket with some things
24  *  that are useful for DCP-o-matic.
25  *
26  *  This class wraps some things that I could not work out how to do with boost;
27  *  most notably, sync read/write calls with timeouts.
28  */
29 class Socket
30 {
31 public:
32         Socket (int timeout = 30);
33         ~Socket ();
34
35         /** @return Our underlying socket */
36         boost::asio::ip::tcp::socket& socket () {
37                 return _socket;
38         }
39
40         void connect (boost::asio::ip::tcp::endpoint);
41         void accept (int);
42
43         void write (uint32_t n);
44         void write (uint8_t const * data, int size);
45         
46         void read (uint8_t* data, int size);
47         uint32_t read_uint32 ();
48         
49 private:
50         void check ();
51
52         Socket (Socket const &);
53
54         boost::asio::io_service _io_service;
55         boost::asio::deadline_timer _deadline;
56         boost::asio::ip::tcp::socket _socket;
57         boost::asio::ip::tcp::acceptor* _acceptor;
58         int _timeout;
59 };