53 lines
1.8 KiB
Go
53 lines
1.8 KiB
Go
// Package controller - WebSocket控制器
|
||
// 功能:WebSocket连接管理、实时消息推送
|
||
package controller
|
||
|
||
import (
|
||
"context"
|
||
"customer-server/model/dto"
|
||
"customer-server/service"
|
||
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
)
|
||
|
||
var Websocket = new(websocket)
|
||
|
||
type websocket struct{}
|
||
|
||
// Connect WebSocket连接
|
||
// 参数: req - WebSocket连接请求,包含用户ID和平台信息
|
||
// 返回: res - 连接结果(实际通过WebSocket协议通信)
|
||
// 功能: 升级HTTP连接为WebSocket,建立实时通信通道
|
||
func (c *websocket) Connect(ctx context.Context, req *dto.WebSocketConnectReq) (res *dto.WebSocketConnectRes, err error) {
|
||
r := g.RequestFromCtx(ctx)
|
||
err = service.WebSocket.Connect(ctx, r, req.UserId, req.Platform)
|
||
return
|
||
}
|
||
|
||
// Send 发送消息到Redis Stream
|
||
// 参数: req - 发送消息请求,包含用户ID、内容等
|
||
// 返回: res - 发送结果,包含消息ID
|
||
// 功能: 将用户消息推送到Redis Stream,由RAGFlow处理器消费
|
||
func (c *websocket) Send(ctx context.Context, req *dto.WebSocketSendReq) (res *dto.WebSocketSendRes, err error) {
|
||
res, err = service.WebSocket.Send(ctx, req)
|
||
return
|
||
}
|
||
|
||
// Broadcast 广播消息给所有连接
|
||
// 参数: req - 广播请求,包含广播内容
|
||
// 返回: res - 广播结果(空响应)
|
||
// 功能: 向所有在线WebSocket连接广播消息
|
||
func (c *websocket) Broadcast(ctx context.Context, req *dto.WebSocketBroadcastReq) (res *dto.WebSocketBroadcastRes, err error) {
|
||
service.WebSocket.Broadcast(ctx, req.Content)
|
||
return
|
||
}
|
||
|
||
// Online 获取在线用户
|
||
// 参数: req - 查询请求(无参数)
|
||
// 返回: res - 在线用户列表
|
||
// 功能: 查询当前所有WebSocket在线用户信息
|
||
func (c *websocket) Online(ctx context.Context, req *dto.WebSocketOnlineReq) (res *dto.WebSocketOnlineRes, err error) {
|
||
res = service.WebSocket.GetOnlineUsers()
|
||
return
|
||
}
|