# datanet-gateway-bundle **Repository Path**: BDWare/datanet-gateway-bundle ## Basic Information - **Project Name**: datanet-gateway-bundle - **Description**: No description available - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 3 - **Created**: 2021-11-01 - **Last Updated**: 2025-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BDWare 数字对象仓库 数字对象网关系统,是BDWare数联网系统的子系统之一,其对外接口类似仓库系统,基于DOIP协议提供数字对象实体的访问。 与仓库系统不同的是,网管系统本身并不存储数字对象实体,而是通过接入、管理多个数字对象仓库系统,在本地维护仓库转发规则,并将接收到的DOIP请求转发至对应仓库节点。 系统架构如图所示。 ![](https://gitee.com/BDWare/BDWare/raw/master/_static/imgs/GatewayArch.png) ## 项目下载 初次clone可使用以下命令。 ```bash git clone https://xxxx/XXX-bundle.git ``` 在git clone之后执行 ```bash git submodule update --init ``` ```bash git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)' ``` 更新所有子项目: ``` git pull --rebase --recurse-submodules ``` ## 项目结构 主体分为两部分,backend和frontend。 backend负责后端的逻辑和接口的调用 frontend负责前端页面的展示和给后端发送请求数据。 ### backend #### 后端总体介绍 后端调用sdk的接口和逻辑的实现,目前已经实现forwarder转发和Repo的管理功能。 yjs合约可以通过包名+类名的方式调用Java里的相关接口,也可以做些简单的逻辑处理。 在java端要调用相关sdk的接口并做处理。 相关测试可以直接在test目录下测试,有样例可供参考。 #### backend目前的功能介绍 yjs上主要是实现了repo的管理,repo以key-value的形式存在rocksdb里,key为repo的id,唯一性,如果key重复会更新 value;value为repo的信息,包括repoName,repoId等,以JSON字符串的形式存储。 java端主要实现了对每一个repo建立doip的client和转发。 1. yjs主要接口-SearchEngine: - 事件的订阅与发布:网关添加repo时就会订阅该repo的更新事件,参数为该repo名字。之后该repo每次发布更新事件, 网关都会监听到,并把该事件发布给SearchEngine。 - getMetaByOffset:参数为一个JSON字符串,主要包含了offset和count,是首次建立连接给上层调用的。通过offset和 count来实现增量更新。(每个repo都会有,网关本身也是个repo) - getCount:获取当前repo的DO数量。 2. yjs主要接口-前端: - addRepo:参数为一个JSON字符串,然后通过解析,用repoName作为key,并调用repo的 getCount方法,获取repo的 DO数量,再加上初始为0的ofsset,并存入JSON中,作为value值存入RocksDB。并订阅该repo的更新事件。 - getMetaByAll:无参数,返回给前端的DO列表,主要为该网关所连接的repo的最近更新。 - deleteRepo:参数为repoName,删除指定repo。 - iter:遍历当前网关所连接的repo。 - getRepoSize:获取当前所连接的repo数量。 - getDoCount:获取所有repo的Do数量和。 3. java端主要功能 - 开始是遍历一遍rocksDB,把每个repo都添加。 - forwarder转发,每个DO都带有repoId的标识,所以通过解析DOId即可知道相应repo,并转发。 ### frontend 前端主要通过使用合约的sdk来像服务器上的合约发送请求,实现与后端的交互。主要有三个页面。核心是调用bdcontract-sdk的接口, 在client.ts里有具体实现,通过连接client来调用executeContract方法来调yjs上的接口,参数为合约名、合约方法、方法参数。 1. 首页 一个显示最近更新的DO列表。 2. Repo管理 一个显示当前repo的列表,有添加和删除功能。 3. 网关配置 通过连接router来获取当前网关的配置信息。 ### 部署和上传 1. yjs部署:写好yjs后,在后端build.gradle里,执行buildypk和buildzip,再在test-bundle里执行test-tool即可上传 到023服务器上。 2. 前端部署:前端npm run build后,在后端build里执行copyfront,即可把前端dist里的文件copy到后端的output/assets 里,在执行build ypk和zip,通步骤1,即可把前端也部署到023服务器。通过服务器url/DOID/Gateway/assets即可访问。