// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CRDTP_DISPATCH_H_ #define CRDTP_DISPATCH_H_ #include <cassert> #include <cstdint> #include <functional> #include <string> #include <unordered_set> #include "export.h" #include "serializable.h" #include "span.h" #include "status.h" namespace crdtp { class DeserializerState; class ErrorSupport; class FrontendChannel; namespace cbor { class CBORTokenizer; } // namespace cbor // ============================================================================= // DispatchResponse - Error status and chaining / fall through // ============================================================================= enum class DispatchCode { … }; // Information returned by command handlers. Usually returned after command // execution attempts. class CRDTP_EXPORT DispatchResponse { … }; // ============================================================================= // Dispatchable - a shallow parser for CBOR encoded DevTools messages // ============================================================================= // This parser extracts only the known top-level fields from a CBOR encoded map; // method, id, sessionId, and params. class CRDTP_EXPORT Dispatchable { … }; // ============================================================================= // Helpers for creating protocol cresponses and notifications. // ============================================================================= // The resulting notifications can be sent to a protocol client, // usually via a FrontendChannel (see frontend_channel.h). CRDTP_EXPORT std::unique_ptr<Serializable> CreateErrorResponse( int callId, DispatchResponse dispatch_response); CRDTP_EXPORT std::unique_ptr<Serializable> CreateErrorNotification( DispatchResponse dispatch_response); CRDTP_EXPORT std::unique_ptr<Serializable> CreateResponse( int callId, std::unique_ptr<Serializable> params); CRDTP_EXPORT std::unique_ptr<Serializable> CreateNotification( const char* method, std::unique_ptr<Serializable> params = nullptr); // ============================================================================= // DomainDispatcher - Dispatching betwen protocol methods within a domain. // ============================================================================= // This class is subclassed by |DomainDispatcherImpl|, which we generate per // DevTools domain. It contains routines called from the generated code, // e.g. ::MaybeReportInvalidParams, which are optimized for small code size. // The most important method is ::Dispatch, which implements method dispatch // by command name lookup. class CRDTP_EXPORT DomainDispatcher { … }; // ============================================================================= // UberDispatcher - dispatches between domains (backends). // ============================================================================= class CRDTP_EXPORT UberDispatcher { … }; } // namespace crdtp #endif // CRDTP_DISPATCH_H_