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) }