一个用于创建郊狼 3.0 DG-Lab App Socket 控制终端和服务端的 Python 库
PyDGLab-WS
一个用于创建郊狼 3.0 DG-Lab App Socket 控制终端和服务端的 Python 库
💡 特性
- 通过该库可开发 Python 程序,接入 DG-Lab App
- 完全使用 asyncio 异步,并发执行各项操作
- 可部署第三方终端与 Socket 服务一体的服务端,降低部署复杂度和延迟
- 使用异步生成器、上下文管理器等,结合语言特性
- 通过 Pydantic, 枚举 管理消息结构和常量,便于开发
🔧 DG-Lab App 的 Socket 被控功能支持的操作
- 获取 A, B 通道强度 以及 通道强度上限 的数据更新
- 对 A, B 通道强度进行操作,支持增加、减少、设定到指定值
- 向 App 发送持续一段时间的波形操作数据
- 清空 App 波形操作队列
- 获取 App 按下反馈按钮的通知
🚀 快速开始
📖 更多用法和完整 API 请查看文档:https://pydglab-ws.readthedocs.io
[!Note]
注意,您可能需要先大致了解一下第三方终端通过 WebSocket 连接控制 DG-Lab App 的基本流程和原理 \
官方文档:https://github.com/DG-LAB-OPENSOURCE/DG-LAB-OPENSOURCE/blob/main/socket/README.md
🔨 安装
pip3 install pydglab-ws
📡 搭建服务端
import asyncio
from pydglab_ws.server import DGLabWSServer
async def main(): async with DGLabWSServer("0.0.0.0", 5678, 60) as server: while True: print(f"已连接的 WebSocket 客户端(终端/App):{list(server.uuidtows.keys())}") print(f"已连接的本地终端:{list(server.localclientids)}") print(f"关系绑定:{server.clientidtotargetid}") await asyncio.sleep(5)
if name == "main": asyncio.run(main())
更多演示请查看 examples/server.py
🕹️ 搭建客户端 / 第三方终端
当进入 DGLabWSServer 的异步生成器时,从 WebSocket 服务端获取 clientId 的操作会 自动完成
import asyncio
from websockets import ConnectionClosedOK
from pydglab_ws import DGLabWSConnect
def printqrcode(: str): """输出二维码到终端界面""" ...
async def main(): try: async with DGLabWSConnect("ws://192.168.1.161:5678") as client: # 获取二维码 url = client.get_qrcode() print("请用 DG-Lab App 扫描二维码以连接") print_qrcode(url)
# 等待绑定 await client.bind() print(f"已与 App {client.target_id} 成功绑定")
# 从 App 接收数据更新,并进行远控操作 async for data in client.data_generator(): print(f"收取到数据:{data}") except ConnectionClosedOK: print("Socket 服务端断开连接")
if name == "main": asyncio.run(main())
更多演示请查看 examples/ws_client.py
🕹️ 搭建与第三方终端一体的 WebSocket 服务端
这段代码不仅提供 DG-Lab WebSocket 服务端服务,还生成了一个本地终端可供 App 连接。
[!Tip]
不管是本地终端DGLabLocalClient还是 WebSocket 终端DGLabWSClient,包含的主要方法都相同 \
因此在该段代码中,终端相关的逻辑与上面的独立的 WebSocket 终端的实现基本相同。 \
这种方式,省去了终端连接 WebSocket 服务端的环节,终端与 WebSocket 服务端一体,网络延迟更低,部署更方便。
import asyncio
from pydglab_ws import DGLabWSServer
def printqrcode(: str): """输出二维码到终端界面""" ...
async def main(): async with DGLabWSServer("0.0.0.0", 5678, 60) as server: client = server.newlocalclient()
url = client.get_qrcode("ws://192.168.1.161:5678") print("请用 DG-Lab App 扫描二维码以连接") print_qrcode(url)
# 等待绑定 await client.bind() print(f"已与 App {client.target_id} 成功绑定")
# 从 App 接收数据更新,并进行远控操作 async for data in client.data_generator(): print(f"收取到数据:{data}")
if name == "main": asyncio.run(main())
更多演示请查看 examples/localclientwith_server.py
📌 更多
如果您在开发过程中,发现要实现一些常用的功能时并不方便,或者您有什么建议能够使开发更简单快捷,欢迎在 Issues 中提出~
相关项目
下列为采用了 PyDGLab-WS 的一些项目:
- Ljzd-PRO/nonebot-plugin-dg-lab-play:nonebot2 机器人插件 - ⚡在群里和大家一起玩郊狼吧!⚡
- Ljzd-PRO/HL2-DGLabInjuryExperienceMod:半条命 2 模组 - 用郊狼⚡模拟一下自己和敌人的受伤痛觉~
如果你的项目也应用了 PyDGLab-WS,欢迎在 Issues 页面分享。
🔗 链接
- PyPI: 🔗pydglab-ws
📐 代码覆盖率
许可证
PyDGLab-WS 使用 BSD 3-Clause 许可证.
Copyright © 2024 by Ljzd-PRO.