refactor: 将recognizer模块拆分到现有模块中
- 将课表识别功能合并到captcha模块 - 将RecognizerClient添加到client模块 - 将输出函数移至models/output.go - 更新API结构体添加扩展字段 - 删除recognizer目录
This commit is contained in:
60
main.go
60
main.go
@@ -16,8 +16,8 @@ import (
|
||||
"jwts/client"
|
||||
"jwts/config"
|
||||
grpcClient "jwts/grpc"
|
||||
"jwts/models"
|
||||
"jwts/parser"
|
||||
"jwts/recognizer"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@@ -49,35 +49,55 @@ func runGRPCClient(serverAddr string) {
|
||||
|
||||
log.Printf("启动 gRPC 客户端, Runner ID: %s, 版本: %s", runnerID, version)
|
||||
|
||||
client := grpcClient.NewClient(serverAddr, runnerID, version)
|
||||
handler := grpcClient.NewTaskHandler()
|
||||
client.SetHandler(handler)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// 处理信号
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
if err := client.Connect(ctx); err != nil {
|
||||
log.Printf("连接失败: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
go func() {
|
||||
<-sigChan
|
||||
log.Println("正在关闭...")
|
||||
client.Close()
|
||||
cancel()
|
||||
}()
|
||||
|
||||
// 启动心跳
|
||||
go client.HeartbeatLoop(ctx, 30*time.Second)
|
||||
reconnectInterval := 5 * time.Second
|
||||
|
||||
// 运行主循环
|
||||
if err := client.Run(ctx); err != nil {
|
||||
log.Printf("客户端错误: %v", err)
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
log.Println("客户端已停止")
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
client := grpcClient.NewClient(serverAddr, runnerID, version)
|
||||
handler := grpcClient.NewTaskHandler()
|
||||
client.SetHandler(handler)
|
||||
|
||||
if err := client.Connect(ctx); err != nil {
|
||||
log.Printf("连接失败: %v, %v 后重试...", err, reconnectInterval)
|
||||
time.Sleep(reconnectInterval)
|
||||
continue
|
||||
}
|
||||
|
||||
heartbeatCtx, heartbeatCancel := context.WithCancel(ctx)
|
||||
go client.HeartbeatLoop(heartbeatCtx, 30*time.Second)
|
||||
|
||||
err := client.Run(ctx)
|
||||
heartbeatCancel()
|
||||
client.Close()
|
||||
|
||||
if ctx.Err() != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Printf("连接断开: %v, %v 后重连...", err, reconnectInterval)
|
||||
} else {
|
||||
log.Printf("连接已关闭, %v 后重连...", reconnectInterval)
|
||||
}
|
||||
time.Sleep(reconnectInterval)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,15 +137,15 @@ func runHTTPServer() {
|
||||
return
|
||||
}
|
||||
|
||||
courses, err := recognizer.RecognizeFromBytes(imageData)
|
||||
courses, err := captcha.RecognizeScheduleFromBytes(imageData)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "识别失败", "details": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
recognizer.PrintCourses(courses)
|
||||
models.PrintCourses(courses)
|
||||
|
||||
err = recognizer.SaveToJSON(courses, "schedule_result.json")
|
||||
err = models.SaveToJSON(courses, "schedule_result.json")
|
||||
if err != nil {
|
||||
log.Printf("保存JSON失败: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user