From 54347c52ee36c59f9631a058d5b06882c586b0f1 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Sun, 5 Nov 2023 19:18:47 +0800 Subject: [PATCH] Fix: room hot list max --- internal/op/rooms.go | 42 ++++++++++------------------------------- server/handlers/room.go | 2 +- server/model/room.go | 2 +- 3 files changed, 12 insertions(+), 34 deletions(-) diff --git a/internal/op/rooms.go b/internal/op/rooms.go index 486ecc5..e106189 100644 --- a/internal/op/rooms.go +++ b/internal/op/rooms.go @@ -9,7 +9,7 @@ import ( "github.com/synctv-org/synctv/internal/model" "github.com/synctv-org/synctv/internal/settings" synccache "github.com/synctv-org/synctv/utils/syncCache" - "github.com/zijiren233/gencontainer/heap" + "github.com/zijiren233/gencontainer/vec" ) var roomCache *synccache.SyncCache[string, *Room] @@ -183,7 +183,7 @@ func GetAllRoomsInCacheWithoutHidden() []*Room { return rooms } -type RoomHeapItem struct { +type RoomInfo struct { RoomId string `json:"roomId"` RoomName string `json:"roomName"` PeopleNum int64 `json:"peopleNum"` @@ -192,38 +192,16 @@ type RoomHeapItem struct { CreatedAt int64 `json:"createdAt"` } -type RoomHeap []*RoomHeapItem - -func (h RoomHeap) Len() int { - return len(h) -} - -func (h RoomHeap) Less(i, j int) bool { - return h[i].PeopleNum < h[j].PeopleNum -} - -func (h RoomHeap) Swap(i, j int) { - h[i], h[j] = h[j], h[i] -} - -func (h *RoomHeap) Push(x *RoomHeapItem) { - *h = append(*h, x) -} - -func (h *RoomHeap) Pop() *RoomHeapItem { - old := *h - n := len(old) - x := old[n-1] - *h = old[0 : n-1] - return x -} - -func GetRoomHeapInCacheWithoutHidden() RoomHeap { - rooms := make(RoomHeap, 0) +func GetRoomHeapInCacheWithoutHidden() []*RoomInfo { + rooms := vec.New[*RoomInfo](vec.WithCmpLess[*RoomInfo](func(v1, v2 *RoomInfo) bool { + return v1.PeopleNum > v2.PeopleNum + }), vec.WithCmpEqual[*RoomInfo](func(v1, v2 *RoomInfo) bool { + return v1.RoomId == v2.RoomId + })) roomCache.Range(func(key string, value *synccache.Entry[*Room]) bool { v := value.Value() if !v.Settings.Hidden { - heap.Push[*RoomHeapItem](&rooms, &RoomHeapItem{ + rooms.Push(&RoomInfo{ RoomId: v.ID, RoomName: v.Name, PeopleNum: v.ClientNum(), @@ -234,5 +212,5 @@ func GetRoomHeapInCacheWithoutHidden() RoomHeap { } return true }) - return rooms + return rooms.Slice() } diff --git a/server/handlers/room.go b/server/handlers/room.go index d0424ab..66784e2 100644 --- a/server/handlers/room.go +++ b/server/handlers/room.go @@ -64,7 +64,7 @@ func CreateRoom(ctx *gin.Context) { })) } -var roomHotCache = refreshcache.NewRefreshCache[op.RoomHeap](func() (op.RoomHeap, error) { +var roomHotCache = refreshcache.NewRefreshCache[[]*op.RoomInfo](func() ([]*op.RoomInfo, error) { return op.GetRoomHeapInCacheWithoutHidden(), nil }, time.Second*3) diff --git a/server/model/room.go b/server/model/room.go index c552949..e8b49de 100644 --- a/server/model/room.go +++ b/server/model/room.go @@ -71,7 +71,7 @@ func (c *CreateRoomReq) Validate() error { return nil } -type RoomListResp = op.RoomHeapItem +type RoomListResp = op.RoomInfo type LoginRoomReq struct { RoomId string `json:"roomId"`