Files
wails-epic/internal/service/main_service.go
hxt 7865b0da7f refactor(frontend): 重构数据解析逻辑
- 新增 StopAndParseCapture 函数,整合停止抓包和解析数据流程
-重构 ReadRawJsonFile 函数,返回解析后的 ParsedResult 对象
- 优化数据解析流程,提高代码可读性和性能
- 调整前端 CapturePage组件,使用新的解析接口
2025-07-02 22:42:43 +08:00

166 lines
4.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"context"
"fmt"
"io/ioutil"
"time"
"equipment-analyzer/internal/capture"
"equipment-analyzer/internal/config"
"equipment-analyzer/internal/model"
"equipment-analyzer/internal/utils"
)
type App struct {
config *config.Config
logger *utils.Logger
captureService *CaptureService
parserService *ParserService
}
func NewApp(cfg *config.Config, logger *utils.Logger) *App {
return &App{
config: cfg,
logger: logger,
captureService: NewCaptureService(cfg, logger),
parserService: NewParserService(cfg, logger),
}
}
func (a *App) Startup(ctx context.Context) {
a.logger.Info("应用启动")
}
func (a *App) DomReady(ctx context.Context) {
a.logger.Info("DOM准备就绪")
}
func (a *App) BeforeClose(ctx context.Context) (prevent bool) {
a.logger.Info("应用即将关闭")
return false
}
func (a *App) Shutdown(ctx context.Context) {
a.logger.Info("应用关闭")
}
// GetNetworkInterfaces 获取网络接口列表
func (a *App) GetNetworkInterfaces() ([]model.NetworkInterface, error) {
interfaces, err := capture.GetNetworkInterfaces()
if err != nil {
a.logger.Error("获取网络接口失败", "error", err)
return nil, err
}
return interfaces, nil
}
// StartCapture 开始抓包
func (a *App) StartCapture(interfaceName string) error {
if a.captureService.IsCapturing() {
return fmt.Errorf("抓包已在进行中")
}
config := capture.Config{
InterfaceName: interfaceName,
Filter: a.config.Capture.DefaultFilter,
Timeout: time.Duration(a.config.Capture.DefaultTimeout) * time.Millisecond,
BufferSize: a.config.Capture.BufferSize,
}
err := a.captureService.StartCapture(context.Background(), config)
if err != nil {
a.logger.Error("开始抓包失败", "error", err)
return err
}
a.logger.Info("抓包开始", "interface", interfaceName)
return nil
}
// StopCapture 停止抓包
func (a *App) StopCapture() error {
if !a.captureService.IsCapturing() {
return fmt.Errorf("没有正在进行的抓包")
}
err := a.captureService.StopCapture()
if err != nil {
a.logger.Error("停止抓包失败", "error", err)
return err
}
// 处理所有收集的数据
a.captureService.ProcessAllData()
a.logger.Info("抓包停止")
return nil
}
// GetCapturedData 获取抓包数据
func (a *App) GetCapturedData() ([]string, error) {
return a.captureService.GetCapturedData(), nil
}
// ParseData 解析数据为JSON
func (a *App) ParseData(hexDataList []string) (string, error) {
_, rawJson, err := a.parserService.ParseHexData(hexDataList)
if err != nil {
a.logger.Error("解析数据失败", "error", err)
return "", err
}
return rawJson, nil
}
// ExportData 导出数据到文件
func (a *App) ExportData(hexDataList []string, filename string) error {
result, rawJson, err := a.parserService.ParseHexData(hexDataList)
if err != nil {
a.logger.Error("解析数据失败", "error", err)
return err
}
// 这里可以添加文件写入逻辑
a.logger.Info("导出数据", "filename", filename, "count", len(result.Items))
// 简单示例:写入到当前目录
err = utils.WriteFile(filename, []byte(rawJson))
if err != nil {
a.logger.Error("写入文件失败", "error", err)
return err
}
return nil
}
// GetCaptureStatus 获取抓包状态
func (a *App) GetCaptureStatus() model.CaptureStatus {
return model.CaptureStatus{
IsCapturing: a.captureService.IsCapturing(),
Status: a.getStatusMessage(),
}
}
func (a *App) getStatusMessage() string {
if a.captureService.IsCapturing() {
return "正在抓包..."
}
return "准备就绪"
}
// ReadRawJsonFile 供前端调用读取output_raw.json内容
func (a *App) ReadRawJsonFile() (*model.ParsedResult, error) {
data, err := ioutil.ReadFile("output_raw.json")
if err != nil {
return nil, err
}
return a.parserService.ReadRawJsonFile(string(data))
}
// StopAndParseCapture 停止抓包并解析数据,供前端调用
func (a *App) StopAndParseCapture() (*model.ParsedResult, error) {
result, err := a.captureService.StopAndParseCapture(a.parserService)
if err != nil {
a.logger.Error("停止抓包并解析数据失败", "error", err)
return nil, err
}
return result, nil
}