102 lines
2.4 KiB
Go
102 lines
2.4 KiB
Go
package services
|
|
|
|
import (
|
|
"ai_scheduler/internal/entitys"
|
|
"encoding/json"
|
|
"log"
|
|
|
|
"github.com/gofiber/websocket/v2"
|
|
)
|
|
|
|
// ChatHandler 聊天处理器
|
|
type ChatService struct {
|
|
routerService entitys.RouterService
|
|
}
|
|
|
|
// NewChatHandler 创建聊天处理器
|
|
func NewChatService(routerService entitys.RouterService) *ChatService {
|
|
return &ChatService{
|
|
routerService: routerService,
|
|
}
|
|
}
|
|
|
|
// ToolCallResponse 工具调用响应
|
|
type ToolCallResponse struct {
|
|
ID string `json:"id" example:"call_1"`
|
|
Type string `json:"type" example:"function"`
|
|
Function FunctionCallResponse `json:"function"`
|
|
Result interface{} `json:"result,omitempty"`
|
|
}
|
|
|
|
// FunctionCallResponse 函数调用响应
|
|
type FunctionCallResponse struct {
|
|
Name string `json:"name" example:"get_weather"`
|
|
Arguments interface{} `json:"arguments"`
|
|
}
|
|
|
|
func (h *ChatService) ChatFail(c *websocket.Conn, content string) {
|
|
//c.WriteMessage(messageType, message)
|
|
}
|
|
|
|
func (h *ChatService) Chat(c *websocket.Conn) {
|
|
log.Println("客户端已连接")
|
|
|
|
// 循环读取客户端消息
|
|
for {
|
|
messageType, msg, err := c.ReadMessage()
|
|
if err != nil {
|
|
log.Println("读取错误:", err)
|
|
break
|
|
}
|
|
|
|
log.Printf("收到消息: %s", msg)
|
|
var req entitys.ChatSockRequest
|
|
if err := json.Unmarshal(msg, &req); err != nil {
|
|
log.Println("JSON parse error:", err)
|
|
continue
|
|
}
|
|
|
|
// 回显消息给客户端
|
|
if err := c.WriteMessage(messageType, msg); err != nil {
|
|
log.Println("写入错误:", err)
|
|
break
|
|
}
|
|
}
|
|
|
|
log.Println("客户端已断开")
|
|
//var req entitys.ChatRequest
|
|
//if err := c.BodyParser(&req); err != nil {
|
|
// return errors.ParamError
|
|
//}
|
|
//
|
|
//// 转换为服务层请求
|
|
//serviceReq := &entitys.ChatRequest{
|
|
// UserInput: req.UserInput,
|
|
// Caller: req.Caller,
|
|
// SessionID: req.SessionID,
|
|
// ChatRequestMeta: entitys.ChatRequestMeta{
|
|
// Authorization: c.Request().Header(),
|
|
// },
|
|
//}
|
|
//
|
|
//// 调用路由服务
|
|
//response, err := h.routerService.Route(c.Request.Context(), serviceReq)
|
|
//if err != nil {
|
|
// c.JSON(http.StatusInternalServerError, ChatResponse{
|
|
// Status: "error",
|
|
// Message: err.Error(),
|
|
// })
|
|
// return
|
|
//}
|
|
//
|
|
//// 转换响应格式
|
|
//httpResponse := &ChatResponse{
|
|
// Message: response.Message,
|
|
// Status: response.Status,
|
|
// Data: response.Data,
|
|
// TaskCode: response.TaskCode,
|
|
//}
|
|
//
|
|
//c.JSON(http.StatusOK, httpResponse)
|
|
}
|