a
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
# 测区数据同步
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
- [DetcGD10Dev.cpp](file://cpp/Operator/DetcGD10Dev.cpp)
|
||||
- [OnLineSynTdDlg.cpp](file://cpp/Views/OnLineSynTdDlg.cpp)
|
||||
- [OnLineSynDevDlg.cpp](file://cpp/Views/OnLineSynDevDlg.cpp)
|
||||
- [OpSynDlg.cpp](file://cpp/Views/OpSynDlg.cpp)
|
||||
- [TaskDataOper.cpp](file://cpp/Operator/TaskDataOper.cpp)
|
||||
- [DataOperator.cpp](file://cpp/Operator/DataOperator.cpp)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [引言](#引言)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概述](#架构概述)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖分析](#依赖分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 引言
|
||||
本文档全面构建了测区数据同步机制的技术文档,重点描述了CProManager如何协调FileTransfer和UpdateDataBase组件实现测区数据在本地应用与GD10设备间的双向同步。详细说明了同步协议的实现细节,包括数据包格式、传输校验机制(如CRC16/CRC32)和断点续传逻辑。解释了同步过程中对testzone.xml文件的读取、解析和更新流程,以及如何确保设备端与PC端测区数据的一致性。分析了同步失败的异常处理策略,如网络中断、设备无响应等情况下的重试机制和错误码定义。提供了性能优化建议,包括大数据量测区的分批传输策略和同步进度的UI反馈实现。文档包含实际同步日志的分析示例,帮助开发者诊断常见同步问题。
|
||||
|
||||
## 项目结构
|
||||
项目结构显示了测区数据同步相关的文件和目录,包括CACHE、DB、Install、LOG、Release、cpp、h、res、tools等目录。关键文件包括ProManager.cpp、SynOperator.cpp、UpdateDataBase.cpp、FileTransfer.cpp等,这些文件实现了测区数据同步的核心功能。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[GeomativeStudio] --> B[CACHE]
|
||||
A --> C[DB]
|
||||
A --> D[Install]
|
||||
A --> E[LOG]
|
||||
A --> F[Release]
|
||||
A --> G[cpp]
|
||||
A --> H[h]
|
||||
A --> I[res]
|
||||
A --> J[tools]
|
||||
G --> K[Managers]
|
||||
G --> L[Operator]
|
||||
G --> M[Tools]
|
||||
G --> N[Views]
|
||||
K --> O[ProManager.cpp]
|
||||
L --> P[SynOperator.cpp]
|
||||
L --> Q[UpdateDataBase.cpp]
|
||||
M --> R[FileTransfer.cpp]
|
||||
M --> S[Crc16.cpp]
|
||||
M --> T[Crc32.cpp]
|
||||
N --> U[OnLineSynTdDlg.cpp]
|
||||
N --> V[OnLineSynDevDlg.cpp]
|
||||
N --> W[OpSynDlg.cpp]
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
- [OnLineSynTdDlg.cpp](file://cpp/Views/OnLineSynTdDlg.cpp)
|
||||
- [OnLineSynDevDlg.cpp](file://cpp/Views/OnLineSynDevDlg.cpp)
|
||||
- [OpSynDlg.cpp](file://cpp/Views/OpSynDlg.cpp)
|
||||
|
||||
**Section sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
- [OnLineSynTdDlg.cpp](file://cpp/Views/OnLineSynTdDlg.cpp)
|
||||
- [OnLineSynDevDlg.cpp](file://cpp/Views/OnLineSynDevDlg.cpp)
|
||||
- [OpSynDlg.cpp](file://cpp/Views/OpSynDlg.cpp)
|
||||
|
||||
## 核心组件
|
||||
核心组件包括CProManager、CSynOperator、CUpdateDataBase、FileTransfer、Crc16、Crc32等类,这些类实现了测区数据同步的核心功能。CProManager负责管理工程和测区,CSynOperator负责同步操作,CUpdateDataBase负责数据库更新,FileTransfer负责文件传输,Crc16和Crc32负责数据校验。
|
||||
|
||||
**Section sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
|
||||
## 架构概述
|
||||
测区数据同步机制的架构包括本地应用、GD10设备、网络通信、文件传输、数据校验等组件。CProManager协调FileTransfer和UpdateDataBase组件,实现测区数据在本地应用与GD10设备间的双向同步。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[本地应用] --> B[CProManager]
|
||||
B --> C[FileTransfer]
|
||||
B --> D[UpdateDataBase]
|
||||
C --> E[GD10设备]
|
||||
D --> F[数据库]
|
||||
E --> G[网络通信]
|
||||
C --> H[Crc16]
|
||||
C --> I[Crc32]
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
|
||||
## 详细组件分析
|
||||
### CProManager分析
|
||||
CProManager类负责管理工程和测区,包括创建工程、创建测区、同步数据等操作。它通过调用FileTransfer和UpdateDataBase组件实现测区数据的同步。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CProManager {
|
||||
+ShowTzList()
|
||||
+GetDMS()
|
||||
+ShowProList()
|
||||
+CreateProjectInDB()
|
||||
+InsertDefaultTzToProject()
|
||||
+CreateProjectInDev()
|
||||
+CreateDefaultTzInDev()
|
||||
+CreateTzInDev()
|
||||
}
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
|
||||
### CSynOperator分析
|
||||
CSynOperator类负责同步操作,包括同步测区数据、同步任务数据等。它通过调用CProManager和FileTransfer组件实现数据同步。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CSynOperator {
|
||||
+Syn()
|
||||
+InitialSynDlg()
|
||||
}
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
|
||||
|
||||
### CUpdateDataBase分析
|
||||
CUpdateDataBase类负责数据库更新,包括更新数据库版本、更新数据库结构等。它通过解析XML文件实现数据库的更新。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CUpdateDataBase {
|
||||
+QueryPreVersion()
|
||||
+CheckNecessaryVersion()
|
||||
+WriteVersionToDB()
|
||||
+GetDBUpdatesInfo()
|
||||
+ParserUpdateDBXml()
|
||||
+AddDBTable()
|
||||
+DeleteDBTable()
|
||||
+AddTableCol()
|
||||
+ModifyTableCol()
|
||||
+ModifyDBTable()
|
||||
}
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
|
||||
### FileTransfer分析
|
||||
FileTransfer类负责文件传输,包括发送文件、接收文件等。它通过调用底层通信接口实现文件的传输。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class FileTransfer {
|
||||
+error()
|
||||
+status()
|
||||
}
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
|
||||
### Crc16和Crc32分析
|
||||
Crc16和Crc32类负责数据校验,包括计算CRC16和CRC32校验码。它们通过查表法实现高效的校验码计算。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Crc16 {
|
||||
+table[256]
|
||||
+initialized
|
||||
+Crc16()
|
||||
}
|
||||
class Crc32 {
|
||||
+table[256]
|
||||
+initialized
|
||||
+Crc32()
|
||||
}
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
|
||||
**Section sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
|
||||
## 依赖分析
|
||||
测区数据同步机制的依赖包括本地应用、GD10设备、网络通信、文件传输、数据校验等。CProManager依赖于FileTransfer和UpdateDataBase组件,FileTransfer依赖于Crc16和Crc32组件。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[CProManager] --> B[FileTransfer]
|
||||
A --> C[UpdateDataBase]
|
||||
B --> D[Crc16]
|
||||
B --> E[Crc32]
|
||||
```
|
||||
|
||||
**Diagram sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
|
||||
## 性能考虑
|
||||
为了提高测区数据同步的性能,可以采用分批传输策略,将大数据量的测区数据分成多个小批次进行传输。同时,可以通过UI反馈显示同步进度,提高用户体验。
|
||||
|
||||
## 故障排除指南
|
||||
同步失败的常见原因包括网络中断、设备无响应、数据校验失败等。可以通过重试机制和错误码定义来处理这些异常情况。例如,当网络中断时,可以等待网络恢复后重新尝试同步;当设备无响应时,可以检查设备连接状态并重新连接。
|
||||
|
||||
**Section sources**
|
||||
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
|
||||
- [SynOperator.cpp](file://cpp/Operator/SynOperator.cpp)
|
||||
- [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)
|
||||
- [FileTransfer.cpp](file://cpp/Tools/FileTransfer.cpp)
|
||||
- [Crc16.cpp](file://cpp/Tools/Crc16.cpp)
|
||||
- [Crc32.cpp](file://cpp/Tools/Crc32.cpp)
|
||||
|
||||
## 结论
|
||||
本文档详细描述了测区数据同步机制的实现细节,包括核心组件、架构概述、详细组件分析、依赖分析、性能考虑和故障排除指南。通过本文档,开发者可以更好地理解和实现测区数据同步功能。
|
||||
Reference in New Issue
Block a user