refactor: upgrade to Go 1.26 and modernize code idioms
- Replace `interface{}` with `any` type alias across all packages
- Use built-in `min()`/`max()` for parameter clamping
- Use `slices.SortFunc`, `slices.Min`, `slices.Max` for cleaner code
- Use `strings.Cut()` for simpler string parsing in auth middleware
- Use `errors.Is()` for proper error comparison in handlers
- Update dependencies: golang.org/x/image 0.37.0 -> 0.38.0
- Add Wire code generation guidelines to ARCHITECTURE.md
- Disable Go cache in CI build workflow
This commit is contained in:
@@ -16,11 +16,11 @@ const (
|
||||
|
||||
// Event 表示一个WebSocket事件
|
||||
type Event struct {
|
||||
ID uint64 `json:"event_id"`
|
||||
Type string `json:"type"`
|
||||
Event string `json:"event"` // 事件名称(兼容多种协议)
|
||||
TS int64 `json:"ts"`
|
||||
Payload interface{} `json:"payload"`
|
||||
ID uint64 `json:"event_id"`
|
||||
Type string `json:"type"`
|
||||
Event string `json:"event"` // 事件名称(兼容多种协议)
|
||||
TS int64 `json:"ts"`
|
||||
Payload any `json:"payload"`
|
||||
}
|
||||
|
||||
// Client 表示一个WebSocket客户端连接
|
||||
@@ -39,10 +39,10 @@ type Message struct {
|
||||
|
||||
// ResponseMessage 表示发送给客户端的消息
|
||||
type ResponseMessage struct {
|
||||
EventID uint64 `json:"event_id"`
|
||||
Type string `json:"type"`
|
||||
TS int64 `json:"ts"`
|
||||
Payload interface{} `json:"payload,omitempty"`
|
||||
EventID uint64 `json:"event_id"`
|
||||
Type string `json:"type"`
|
||||
TS int64 `json:"ts"`
|
||||
Payload any `json:"payload,omitempty"`
|
||||
}
|
||||
|
||||
// ErrorMessage 表示错误消息
|
||||
@@ -76,11 +76,11 @@ type Hub struct {
|
||||
seq uint64
|
||||
|
||||
mu sync.RWMutex
|
||||
clients map[string]map[uint64]*Client // userID -> clientID -> Client
|
||||
history map[string][]Event // userID -> []Event (用于断线重连历史回放)
|
||||
clients map[string]map[uint64]*Client // userID -> clientID -> Client
|
||||
history map[string][]Event // userID -> []Event (用于断线重连历史回放)
|
||||
subscribers map[string]map[uint64]*subscriber // userID -> subscriberID -> subscriber
|
||||
disconnectHandlers []DisconnectHandler // 断开连接事件处理器列表
|
||||
connectHandlers []ConnectHandler // 连接事件处理器列表
|
||||
disconnectHandlers []DisconnectHandler // 断开连接事件处理器列表
|
||||
connectHandlers []ConnectHandler // 连接事件处理器列表
|
||||
}
|
||||
|
||||
// NewHub 创建WebSocket Hub
|
||||
@@ -213,7 +213,7 @@ func (h *Hub) GetClientCount(userID string) int {
|
||||
}
|
||||
|
||||
// PublishToUser 向指定用户发送事件
|
||||
func (h *Hub) PublishToUser(userID string, eventType string, payload interface{}) Event {
|
||||
func (h *Hub) PublishToUser(userID string, eventType string, payload any) Event {
|
||||
ev := Event{
|
||||
ID: h.NextID(),
|
||||
Type: eventType,
|
||||
@@ -225,7 +225,7 @@ func (h *Hub) PublishToUser(userID string, eventType string, payload interface{}
|
||||
}
|
||||
|
||||
// PublishToUsers 向多个用户发送事件
|
||||
func (h *Hub) PublishToUsers(userIDs []string, eventType string, payload interface{}) {
|
||||
func (h *Hub) PublishToUsers(userIDs []string, eventType string, payload any) {
|
||||
for _, uid := range userIDs {
|
||||
h.PublishToUser(uid, eventType, payload)
|
||||
}
|
||||
@@ -233,7 +233,7 @@ func (h *Hub) PublishToUsers(userIDs []string, eventType string, payload interfa
|
||||
|
||||
// PublishToUserOnline 仅在用户在线时发送事件,不存入历史回放
|
||||
// 适用于通话信令等实时性消息,避免断线重连时重放过期消息
|
||||
func (h *Hub) PublishToUserOnline(userID string, eventType string, payload interface{}) bool {
|
||||
func (h *Hub) PublishToUserOnline(userID string, eventType string, payload any) bool {
|
||||
h.mu.RLock()
|
||||
targets := make([]*Client, 0, len(h.clients[userID]))
|
||||
for _, c := range h.clients[userID] {
|
||||
@@ -269,7 +269,7 @@ func (h *Hub) PublishToUserOnline(userID string, eventType string, payload inter
|
||||
// PublishToUserOnlineReliable 可靠地发送事件给在线用户(阻塞发送)
|
||||
// 用于重要的信令消息(如 SDP, ICE candidate),确保消息送达
|
||||
// 如果用户不在线,返回 false
|
||||
func (h *Hub) PublishToUserOnlineReliable(userID string, eventType string, payload interface{}) bool {
|
||||
func (h *Hub) PublishToUserOnlineReliable(userID string, eventType string, payload any) bool {
|
||||
h.mu.RLock()
|
||||
targets := make([]*Client, 0, len(h.clients[userID]))
|
||||
for _, c := range h.clients[userID] {
|
||||
@@ -376,7 +376,7 @@ func (h *Hub) SendError(client *Client, code string, message string) {
|
||||
}
|
||||
|
||||
// Broadcast 广播消息给所有连接
|
||||
func (h *Hub) Broadcast(eventType string, payload interface{}) {
|
||||
func (h *Hub) Broadcast(eventType string, payload any) {
|
||||
h.mu.RLock()
|
||||
userIDs := make([]string, 0, len(h.clients))
|
||||
for uid := range h.clients {
|
||||
@@ -454,4 +454,4 @@ func EncodeData(ev Event) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
return string(body), nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user