1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /*
- * Copyright (c) 2020-2022, the SerenityOS developers.
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <LibChess/UCICommand.h>
- #include <LibCore/IODevice.h>
- #include <LibCore/Notifier.h>
- #include <LibCore/Object.h>
- namespace Chess::UCI {
- class Endpoint : public Core::Object {
- C_OBJECT(Endpoint)
- public:
- virtual ~Endpoint() override = default;
- virtual void handle_uci() { }
- virtual void handle_debug(DebugCommand const&) { }
- virtual void handle_isready() { }
- virtual void handle_setoption(SetOptionCommand const&) { }
- virtual void handle_position(PositionCommand const&) { }
- virtual void handle_go(GoCommand const&) { }
- virtual void handle_stop() { }
- virtual void handle_id(IdCommand const&) { }
- virtual void handle_uciok() { }
- virtual void handle_readyok() { }
- virtual void handle_bestmove(BestMoveCommand const&) { }
- virtual void handle_info(InfoCommand const&) { }
- virtual void handle_quit() { }
- virtual void handle_ucinewgame() { }
- virtual void handle_unexpected_eof() { }
- void send_command(Command const&);
- virtual void event(Core::Event&) override;
- Core::IODevice& in() { return *m_in; }
- Core::IODevice& out() { return *m_out; }
- void set_in(RefPtr<Core::IODevice> in)
- {
- m_in = in;
- set_in_notifier();
- }
- void set_out(RefPtr<Core::IODevice> out) { m_out = out; }
- protected:
- Endpoint() = default;
- Endpoint(NonnullRefPtr<Core::IODevice> in, NonnullRefPtr<Core::IODevice> out);
- virtual void custom_event(Core::CustomEvent&) override;
- private:
- enum EndpointEventType {
- UnexpectedEof
- };
- void set_in_notifier();
- NonnullOwnPtr<Command> read_command();
- RefPtr<Core::IODevice> m_in;
- RefPtr<Core::IODevice> m_out;
- RefPtr<Core::Notifier> m_in_notifier;
- };
- }
|