File: xmock_server.hpp

package info (click to toggle)
xeus 6.0.2-2
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 9,780 kB
  • sloc: cpp: 7,646; makefile: 157; python: 25
file content (112 lines) | stat: -rw-r--r-- 3,312 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/***************************************************************************
* Copyright (c) 2016, Johan Mabille, Sylvain Corlay, Martin Renou          *
* Copyright (c) 2016, QuantStack                                           *
*                                                                          *
* Distributed under the terms of the BSD 3-Clause License.                 *
*                                                                          *
* The full license is in the file LICENSE, distributed with this software. *
****************************************************************************/

#ifndef XEUS_MOCK_SERVER_HPP
#define XEUS_MOCK_SERVER_HPP

#include <cstddef>
#include <memory>
#include <queue>

#include "xeus/xcontrol_messenger.hpp"
#include "xeus/xeus_context.hpp"
#include "xeus/xserver.hpp"

namespace xeus
{
    class xmock_server;

    class xmock_messenger : public xcontrol_messenger
    {
    public:

        xmock_messenger(xmock_server* server);
        virtual ~xmock_messenger() = default;

    private:

        nl::json send_to_shell_impl(const nl::json& message) override;

        xmock_server* p_server;
    };

    class xmock_server : public xserver
    {
    public:

        xmock_server();
        virtual ~xmock_server() = default;

        xmock_server(const xmock_server&) = delete;
        xmock_server& operator=(const xmock_server&) = delete;

        xmock_server(xmock_server&&) = delete;
        xmock_server& operator=(xmock_server&&) = delete;

        void receive_shell(xmessage message);
        void receive_control(xmessage message);
        void receive_stdin(xmessage message);

        std::size_t shell_size() const;
        xmessage read_shell();

        std::size_t control_size() const;
        xmessage read_control();

        std::size_t stdin_size() const;
        xmessage read_stdin();

        std::size_t iopub_size() const;
        xpub_message read_iopub();

        using xserver::notify_internal_listener;

    private:

        xcontrol_messenger& get_control_messenger_impl() override;

        void send_shell_impl(xmessage message) override;
        void send_control_impl(xmessage message) override;
        void send_stdin_impl(xmessage message) override;
        void publish_impl(xpub_message message, channel c) override;

        void start_impl(xpub_message message) override;
        void abort_queue_impl(const listener& l, long polling_interval) override;
        void stop_impl() override;
        void update_config_impl(xkernel_configuration& config) const override;

        using message_queue = std::queue<xmessage>;
        xmessage read_impl(message_queue& q);

        xmock_messenger m_messenger;

        message_queue m_shell_messages;
        message_queue m_control_messages;
        message_queue m_stdin_messages;
        std::queue<xpub_message> m_iopub_messages;
    };

    std::unique_ptr<xserver> make_mock_server(xcontext& context,
                                              const xconfiguration& config,
                                              nl::json::error_handler_t eh);

    class xmock_context : public xcontext
    {
    public:

        xmock_context();
        ~xmock_context() = default;

    };

    std::unique_ptr<xcontext> make_mock_context();
}

#endif