Files
file-transfer-go/internal/handlers/handlers.go

108 lines
2.4 KiB
Go

package handlers
import (
"encoding/json"
"log"
"net/http"
"chuan/internal/services"
)
type Handler struct {
webrtcService *services.WebRTCService
}
func NewHandler() *Handler {
return &Handler{
webrtcService: services.NewWebRTCService(),
}
}
// HandleWebRTCWebSocket 处理WebRTC信令WebSocket连接
func (h *Handler) HandleWebRTCWebSocket(w http.ResponseWriter, r *http.Request) {
h.webrtcService.HandleWebSocket(w, r)
}
// CreateRoomHandler 创建房间API
func (h *Handler) CreateRoomHandler(w http.ResponseWriter, r *http.Request) {
// 设置响应为JSON格式
w.Header().Set("Content-Type", "application/json")
if r.Method != http.MethodPost {
json.NewEncoder(w).Encode(map[string]interface{}{
"success": false,
"message": "方法不允许",
})
return
}
// 创建新房间
code := h.webrtcService.CreateNewRoom()
log.Printf("创建房间成功: %s", code)
// 构建响应
response := map[string]interface{}{
"success": true,
"code": code,
"message": "房间创建成功",
}
json.NewEncoder(w).Encode(response)
}
// WebRTCRoomStatusHandler WebRTC房间状态API
func (h *Handler) WebRTCRoomStatusHandler(w http.ResponseWriter, r *http.Request) {
// 设置响应为JSON格式
w.Header().Set("Content-Type", "application/json")
if r.Method != http.MethodGet {
json.NewEncoder(w).Encode(map[string]interface{}{
"success": false,
"message": "方法不允许",
})
return
}
// 从查询参数获取房间代码
code := r.URL.Query().Get("code")
if code == "" {
json.NewEncoder(w).Encode(map[string]interface{}{
"success": false,
"message": "缺少房间代码",
})
return
}
// 获取房间状态
status := h.webrtcService.GetRoomStatus(code)
json.NewEncoder(w).Encode(status)
}
// GetRoomStatusHandler 获取房间状态API
func (h *Handler) GetRoomStatusHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.Method != http.MethodGet {
json.NewEncoder(w).Encode(map[string]interface{}{
"success": false,
"message": "方法不允许",
})
return
}
// 获取房间码
code := r.URL.Query().Get("code")
if code == "" {
json.NewEncoder(w).Encode(map[string]interface{}{
"success": false,
"message": "房间码不能为空",
})
return
}
// 获取房间状态
status := h.webrtcService.GetRoomStatus(code)
json.NewEncoder(w).Encode(status)
}