Chromium CDP 开发(五):注册自己的指令(中)

引言

在前一篇文章中,我们已经了解了 PDL(Protocol Description Language)的基本功能以及如何在其中声明 CDP(Chrome DevTools Protocol)指令和事件的具体内容。接下来,我们将深入探讨如何在实际开发中进行这些声明。我们将重点介绍声明的关键要点,并结合开发实例,详细说明在开发自定义 CDP 方法时所需的具体步骤和内容。

通过这篇文章,开发者将能够更好地理解如何基于 PDL 文件编写新的指令和事件,从而扩展 CDP 的功能。无论是定义新的参数类型,还是确保与浏览器组件的高效通信,本文将提供清晰的指导,帮助开发者顺利完成 CDP 方法的开发工作。

PDL声明的内容介绍

2.1指令声明

例如,使用command timerSend来声明一个新的CDP指令。在CDP中,有些指令可能会带有experimental前缀,这表示这些指令和事件尚处于实验阶段。这样的标记提醒开发者,这些功能可能不稳定,使用时需要谨慎。

2.2参数定义

在PDL中,parameters部分用于定义指令所需的输入参数。如果某个参数前面标有optional,这意味着该参数是可选的。在C++实现中,如果指令没有提供这些可选参数,将会生成一个参数包装。这种灵活的设计允许指令在没有参数的情况下被调用,增强了功能的适用性。

2.3返回值说明

指令的返回值通过returns部分进行描述。需要注意的是,并非所有指令都必须返回值,这一特性使得指令在设计上更加灵活,适应各种使用场景。

2.4类型声明

在我们的实现中,使用了一个名为TimerStatus的自定义类型,因此我们需要在PDL中进行相应的类型声明。在进行类型声明时,必须遵循帕斯卡命名法,即每个单词的首字母大写。这样可以确保类型名称的清晰性和规范性,便于后续的使用和维护。

综上所述,遵循这些命名规则和声明格式,不仅提高了代码的可读性,也促进了团队的协作。明确的结构和命名使得开发者在扩展和维护CDP功能时更加高效,同时也使新功能的理解和应用变得更加直观。

声明 TimerSend 具体方法

我们先声明一个timerSend指令用来作为我们的定时器开启指令

command timerSendparametersboolean enableoptional integer intervalreturnsTimerStatus status

这段PDL声明定义了一个名为timerSend的CDP指令,其主要作用是控制定时器的启用状态和触发频率。具体来说,声明包含以下几个部分:

3.1指令名称

command timerSend表明这是一个新的指令,用于控制定时器的行为。

3.2参数定义

  • boolean enable: 这是一个必需的布尔参数,用于指定是否启用定时器。如果设置为true,定时器将被启动;如果为false,则定时器将被禁用。
  • optional integer interval: 这是一个可选的整型参数,用于指定定时器的触发间隔(以毫秒为单位)。如果未提供该参数,定时器将使用默认间隔。这种灵活性允许开发者根据具体需求进行定制。

3.3返回值说明

returns TimerStatus status表示该指令将在执行后返回一个TimerStatus类型的状态信息。该状态信息可以包括定时器的当前状态、是否成功启用以及任何潜在的错误信息。这为开发者提供了实时反馈,有助于确保定时器的正确设置和运行。

声明TimerStatus 数据类型

我们看到在上面的声明里我们使用了一个TimerStatus 类型作为返回值类型,这里我们要把这个类型也声明出来。

type TimerStatus extends objectproperties# Timer statusstring status# Timer intervaloptional integer intervalcommand timerSendparametersboolean enableoptional integer intervalreturnsTimerStatus status

这段代码定义了一个名为TimerStatus的自定义类型,用于表示定时器的状态信息。具体来说,它包含以下几个部分:

4.1类型名称

type TimerStatus extends object:这行代码声明了一个新类型TimerStatus,并指出它是一个对象类型。这意味着TimerStatus可以包含多个属性,便于封装与定时器状态相关的数据。

4.2属性定义

  • string status: 这是一个必需的字符串属性,用于描述定时器的当前状态。这个状态可以是多个值,例如“running”、“stopped”或“paused”,帮助开发者了解定时器的运行情况。
  • optional integer interval: 这是一个可选的整型属性,用于表示定时器的触发间隔(以毫秒为单位)。如果该属性存在,它将提供有关定时器频率的具体信息。由于该属性是可选的,开发者在某些情况下可以选择不提供此信息,增强了灵活性。

声明TimerLog 事件

timerLog事件能够定期将定时器的状态信息发送给客户端,包括当前时间戳和其他相关数据。这种主动的数据传输机制使得客户端可以实时接收到重要的状态更新,帮助开发者及时了解应用的运行状况。

这里是利用TimerLog事件来模拟一些类似异步日志的数据事件

  type TimerStatus extends objectproperties# Timer statusstring status# Timer intervaloptional integer intervalcommand timerSendparametersboolean enableoptional integer intervalreturnsTimerStatus statusevent timerLogparametersinteger time

这段代码定义了一个名为timerLog的事件,用于在CDP(Chrome DevTools Protocol)中主动发送消息。具体来说,它包含以下几个部分:

1. 事件名称

event timerLog:这行代码声明了一个新事件timerLog,表示这是一个将由浏览器主动触发的事件,用于向CDP客户端传递信息。

2. 参数定义

  • integer time:这是一个必需的整型参数,用于表示时间戳或定时器触发的时间。这一参数可以帮助客户端了解事件发生的具体时刻,以便进行后续的数据处理和展示。
  • 3. 功能作用

timerLog事件的主要作用是从浏览器向连接的CDP客户端发送定时器的状态信息。通过提供时间参数,客户端可以获取到定时器触发的准确时间,这对于监控和调试非常重要。

总结

根据上面的步骤我们已经声明了我们需要的指令和事件并且并且声明了其中的参数和返回值这些详细内容,结果如图

这些文件在尽显编译时会生成大量的头文件和用来进行序列化的方法简化CDP的开发流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/36170.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

回溯算法解决全排列问题

1. 问题描述 定义:给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。 示例: 输入数组 [1, 2, 3] 输出结果应该为: leetcode 地址 2. 代码实现 package com.ztq.algorithm.BackTrack;import java.util.List; impo…

金融行业 IT 实践|某信托公司:从虚拟化到容器平台的 VMware 替代与双活建设实践

随着“VMware 替代” 在金融行业的快速推进,不少金融用户的替代进程已逐渐从存储、虚拟化过渡到容器平台层面,实现更为全面的 VMware 国产化替代与架构升级。其中,某信托用户在使用 SmartX 超融合(采用 VMware 虚拟化和 Tanzu 容器…

python学习——格式化字符串

在Python中,格式化字符串是一种将变量插入到字符串中的方法,使得字符串的构建更为灵活和方便。以下是一些常见的格式化字符串的方法: 文章目录 1. 使用百分号 % 格式化2. 使用 str.format() 方法3. 使用 f-string (格式化字符串字面量)格式说…

【上线文档】系统上线方案模板,计算机系统上线保障计划,系统运维信息系统运行保障方案,系统上线方案模板(Word原件)

一、项目背景和目标 二、项目需求分析 2.1 功能需求 2.2 非功能需求 三、系统设计 3.1 系统架构设计 3.2 数据库设计 3.3 接口设计 3.4 用户界面设计 四、系统开发 4.1 开发环境搭建 4.2 业务逻辑开发 4.3 数据库实现 4.4 接口实现 4.5 用户界面实现 五、系统测…

MySQL索引再认识

在最近的一次MySQL测试过程中,我的同事幺加明遇到了一些令人困惑的现象,这些现象超出了我们最初的预期。一直以来,我们在建立索引时,首要考虑的原则是在区分度大的字段上建立索引。然而,在实际测试中,我们发…

SQL靶场第一关

打开sql靶场 一.判断注入类型 在网址输入?id1,页面正常回显 我们在输入?id1,页面报错,说明存在sql注入 我们再输入?id1 and 11--,页面正常回显 我们在输入?id1 and 12--,页面没有回显 这里我们知道了是字符型注入 为什么是…

ollama运行qwen2.5-coder:7b

1.linux安装 curl -fsSL https://ollama.com/install.sh | sh ollama serve # 启动ollama ollama create # 从模型文件创建模型 ollama show # 显示模型信息 ollama run # 运行模型,会先自动下载模型 ollama pull # 从注册仓库中拉取模…

牛客——打印日期,日期累加(C++)

目录 1.日期累加 1.1题目描述 1.2思路 1.3 2.打印日期 2.1题目描述 2.2思路 2.3代码 1.日期累加 1.1题目描述 计算一个日期加上若干天后是什么日期。输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。输出m行,每行按…

Stylus 浏览器扩展开发-Cursor AI辅助

项目起源 作为一个经常需要长时间盯着屏幕的开发者,我一直在寻找一个简单的方法来保护眼睛。最初的想法很简单:将网页背景色替换成护眼的豆沙绿。虽然市面上已经有类似的扩展,但我想要一个更加轻量且可定制的解决方案。 这个简单的需求逐渐…

AD20 原理图库和PCB库添加

一 点击右下角 二 点击Components 三 点击File-based Libraries Preferences 四 最后点击安装即可

微信小程序uni-app+vue3实现局部上下拉刷新和scroll-view动态高度计算

微信小程序uni-appvue3实现局部上下拉刷新和scroll-view动态高度计算 前言 在uni-appvue3项目开发中,经常需要实现列表的局部上下拉刷新功能。由于网上相关教程较少且比较零散,本文将详细介绍如何使用scroll-view组件实现这一功能,包括动态高度计算、下拉刷新、上拉加载等完整…

针对边缘计算优化LoRa的TinyML信道跳变管道

论文标题:Optimizing LoRa for Edge Computing with TinyML Pipeline for Channel Hopping(针对边缘计算优化LoRa的TinyML信道跳变管道) 作者信息:Marla Grunewald, Mounir Bensalem 和 Admela Jukan,来自德国布伦瑞克…

Linux-USB驱动实验

USB 是很常用的接口,目前大多数的设备都是 USB 接口的,比如鼠标、键盘、USB 摄像头等,我们在实际开发中也常常遇到 USB 接口的设备,本章我们就来学习一下如何使能 Linux内核自带的 USB 驱动。注意!本章并不讲解具体的 …

操作系统文件管理相关习题2

文件管理的任务和功能文件管理 任务:对用户文件和系统文件进行组织管理,以方便用户使用,并保证文件的安全 功能:文件存储空间的管理,目录管理,文件读写管理和保护 目录管理 对目录管理的要求 实现按名存…

MYSQL - 索引详解

一 什么是索引? 实际上在上一篇介绍MYSQL的体系结构当中我们稍微提及了一点,在引擎层,我们提到不同的引擎对应的索引的实现方式,选择是不一样的。 简单理解,索引(index)其实就是一种帮助MYSQL高…

AI智能体Prompt预设词指令大全+GPTs应用使用

AI智能体使用指南 直接复制在AI工具助手中使用(提问前) 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档:Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用: 文章润色器 你是一位具有敏锐洞察…

el-tree树形结构拖拽层级错乱问题

背景: 项目中有个文件夹树形菜单,并且各级菜单中的子级元素是可以任意拖拽的,也就是树形结构拖拽修改分组。 问题分析: 出现拖拽层级错乱的问题,这通常意味着在进行节点拖拽操作后,树的层级关系没有正确地被维护。这可能是因为在更新节点位…

线程和进程(juc)

线程 一:概念辨析 1:线程与进程 进程: 1:程序由指令和数据组成,指令要执行,数据要读写,就需要将指令加载给cpu,把数据加载到内存,同时程序运行时还会使用磁盘&#x…

Java基础集合(Map)

存储特点 以键值对的形式存储, 一个元素由两个值组成 键(K-key): 无序, 无下标, 元素不可重复 值(V-value): 无序, 无下标, 元素可以重复 常用实现类 HashMap JDK1.2 底层哈希表实现 线程不安全, 效率高 LinkedHashMap JDK1.2 是HashMap的子类, 底层哈希表实现 线程不安全…

NEXT开发应用质量建议与测试指南

随着鸿蒙原生开发如火如荼的进展,NEXT对应用的质量提出了更高的要求。 NEXT的应用质量分为2个部分内容: ⚫ 体验质量: 功能数据完备、基础体验、HarmonyOS特征增强体验 ⚫ 内容合规: 资质、内容、广告、付费、开发者行为等 单元测…