mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:28:11 +00:00
LibChess: Allow UCIEndpoint to handle unexpected disconnections
This commit is contained in:
parent
bf320e4826
commit
680d4e34d5
2 changed files with 18 additions and 0 deletions
|
@ -56,14 +56,27 @@ void Endpoint::event(Core::Event& event)
|
||||||
case Command::Type::Quit:
|
case Command::Type::Quit:
|
||||||
return handle_quit();
|
return handle_quit();
|
||||||
default:
|
default:
|
||||||
|
Object::event(event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Endpoint::custom_event(Core::CustomEvent& custom_event)
|
||||||
|
{
|
||||||
|
if (custom_event.custom_type() == EndpointEventType::UnexpectedEof)
|
||||||
|
handle_unexpected_eof();
|
||||||
|
}
|
||||||
|
|
||||||
void Endpoint::set_in_notifier()
|
void Endpoint::set_in_notifier()
|
||||||
{
|
{
|
||||||
m_in_notifier = Core::Notifier::construct(m_in->fd(), Core::Notifier::Read);
|
m_in_notifier = Core::Notifier::construct(m_in->fd(), Core::Notifier::Read);
|
||||||
m_in_notifier->on_ready_to_read = [this] {
|
m_in_notifier->on_ready_to_read = [this] {
|
||||||
|
if (!m_in->can_read_line()) {
|
||||||
|
Core::EventLoop::current().post_event(*this, make<Core::CustomEvent>(EndpointEventType::UnexpectedEof));
|
||||||
|
m_in_notifier->set_enabled(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
while (m_in->can_read_line())
|
while (m_in->can_read_line())
|
||||||
Core::EventLoop::current().post_event(*this, read_command());
|
Core::EventLoop::current().post_event(*this, read_command());
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,6 +31,7 @@ public:
|
||||||
virtual void handle_bestmove(BestMoveCommand const&) { }
|
virtual void handle_bestmove(BestMoveCommand const&) { }
|
||||||
virtual void handle_info(InfoCommand const&) { }
|
virtual void handle_info(InfoCommand const&) { }
|
||||||
virtual void handle_quit() { }
|
virtual void handle_quit() { }
|
||||||
|
virtual void handle_unexpected_eof() { }
|
||||||
|
|
||||||
void send_command(Command const&);
|
void send_command(Command const&);
|
||||||
|
|
||||||
|
@ -49,8 +50,12 @@ public:
|
||||||
protected:
|
protected:
|
||||||
Endpoint() = default;
|
Endpoint() = default;
|
||||||
Endpoint(NonnullRefPtr<Core::IODevice> in, NonnullRefPtr<Core::IODevice> out);
|
Endpoint(NonnullRefPtr<Core::IODevice> in, NonnullRefPtr<Core::IODevice> out);
|
||||||
|
virtual void custom_event(Core::CustomEvent&) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
enum EndpointEventType {
|
||||||
|
UnexpectedEof
|
||||||
|
};
|
||||||
void set_in_notifier();
|
void set_in_notifier();
|
||||||
NonnullOwnPtr<Command> read_command();
|
NonnullOwnPtr<Command> read_command();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue