/* * Copyright (c) 2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include namespace DevTools { class Actor : public RefCounted , public Weakable { public: virtual ~Actor(); String const& name() const { return m_name; } virtual void handle_message(StringView type, JsonObject const&) = 0; class [[nodiscard]] BlockToken { public: BlockToken(Badge, Actor&); ~BlockToken(); BlockToken(BlockToken const&) = delete; BlockToken& operator=(BlockToken const&) = delete; BlockToken(BlockToken&&); BlockToken& operator=(BlockToken&&); private: WeakPtr m_actor; }; void send_message(JsonValue, Optional block_token = {}); void send_missing_parameter_error(StringView parameter); void send_unrecognized_packet_type_error(StringView type); void send_unknown_actor_error(StringView actor); protected: explicit Actor(DevToolsServer&, String name); DevToolsServer& devtools() { return m_devtools; } DevToolsServer const& devtools() const { return m_devtools; } BlockToken block_responses(); private: DevToolsServer& m_devtools; String m_name; Vector m_blocked_responses; bool m_block_responses { false }; }; }