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
|