~unity-system-compositor-team/unity-system-compositor/trunk

« back to all changes in this revision

Viewing changes to src/asio_dm_connection.h

  • Committer: CI bot
  • Author(s): Alexandros Frantzis
  • Date: 2014-07-18 10:18:42 UTC
  • mfrom: (150.2.6 grand-refactoring-first-steps)
  • Revision ID: ps-jenkins@lists.canonical.com-20140718101842-endujuyfodwuikct
First steps of refactoring to improve code comprehensibility and testability Fixes: 1339843
Approved by: Michael Terry, Alan Griffiths, PS Jenkins bot, Alberto Aguirre

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2013-2014 Canonical Ltd.
 
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 version 3 as
 
6
 * published by the Free Software Foundation.
 
7
 *
 
8
 * This program is distributed in the hope that it will be useful,
 
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
 * GNU General Public License for more details.
 
12
 *
 
13
 * You should have received a copy of the GNU General Public License
 
14
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 *
 
16
 * Authored by: Robert Ancell <robert.ancell@canonical.com>
 
17
 *              Alexandros Frantzis <alexandros.frantzis@canonical.com>
 
18
 */
 
19
 
 
20
#ifndef USC_ASIO_DM_CONNECTION_H_
 
21
#define USC_ASIO_DM_CONNECTION_H_
 
22
 
 
23
#include "dm_connection.h"
 
24
 
 
25
#include <boost/asio.hpp>
 
26
#include <thread>
 
27
 
 
28
namespace usc
 
29
{
 
30
 
 
31
class AsioDMConnection : public DMConnection
 
32
{
 
33
public:
 
34
    AsioDMConnection(
 
35
        int from_dm_fd, int to_dm_fd,
 
36
        std::shared_ptr<DMMessageHandler> const& dm_message_handler);
 
37
    ~AsioDMConnection();
 
38
 
 
39
    void start() override;
 
40
 
 
41
private:
 
42
    enum class USCMessageID
 
43
    {
 
44
        ping = 0,
 
45
        pong = 1,
 
46
        ready = 2,
 
47
        session_connected = 3,
 
48
        set_active_session = 4,
 
49
        set_next_session = 5,
 
50
    };
 
51
 
 
52
    void send_ready();
 
53
    void read_header();
 
54
    void on_read_header(const boost::system::error_code& ec);
 
55
    void on_read_payload(const boost::system::error_code& ec);
 
56
    void send(USCMessageID id, std::string const& body);
 
57
 
 
58
    boost::asio::io_service io_service;
 
59
    boost::asio::posix::stream_descriptor from_dm_pipe;
 
60
    boost::asio::posix::stream_descriptor to_dm_pipe;
 
61
    std::thread io_thread;
 
62
    std::shared_ptr<DMMessageHandler> const dm_message_handler;
 
63
 
 
64
    static size_t const size_of_header = 4;
 
65
    unsigned char message_header_bytes[size_of_header];
 
66
    boost::asio::streambuf message_payload_buffer;
 
67
    std::vector<char> write_buffer;
 
68
 
 
69
};
 
70
 
 
71
}
 
72
 
 
73
#endif /* USC_ASIO_DM_CONNECTION_H_ */