diff --git a/internal/op/hub.go b/internal/op/hub.go index e065980..ae37715 100644 --- a/internal/op/hub.go +++ b/internal/op/hub.go @@ -241,3 +241,8 @@ func (h *Hub) SendToUser(userID string, data Message) (err error) { } return } + +func (h *Hub) IsOnline(userID string) bool { + _, ok := h.clients.Load(userID) + return ok +} diff --git a/internal/op/room.go b/internal/op/room.go index 244edd5..300df56 100644 --- a/internal/op/room.go +++ b/internal/op/room.go @@ -351,6 +351,11 @@ func (r *Room) UnregisterClient(cli *Client) error { return r.hub.UnRegClient(cli) } +func (r *Room) IsOnline(userID string) bool { + r.lazyInitHub() + return r.hub.IsOnline(userID) +} + func (r *Room) SetCurrentStatus(playing bool, seek float64, rate float64, timeDiff float64) *Status { return r.current.SetStatus(playing, seek, rate, timeDiff) } diff --git a/server/handlers/admin.go b/server/handlers/admin.go index 32047c8..336a442 100644 --- a/server/handlers/admin.go +++ b/server/handlers/admin.go @@ -293,17 +293,18 @@ func AdminGetRoomMembers(ctx *gin.Context) { ctx.JSON(http.StatusOK, model.NewApiDataResp(gin.H{ "total": total, - "list": genRoomMemberListResp(list), + "list": genRoomMemberListResp(list, room), })) } -func genRoomMemberListResp(us []*dbModel.User) []*model.RoomMembersResp { +func genRoomMemberListResp(us []*dbModel.User, room *op.Room) []*model.RoomMembersResp { resp := make([]*model.RoomMembersResp, len(us)) for i, v := range us { resp[i] = &model.RoomMembersResp{ UserID: v.ID, Username: v.Username, JoinAt: v.RoomMembers[0].CreatedAt.UnixMilli(), + OnLine: room.IsOnline(v.ID), Role: v.RoomMembers[0].Role, RoomID: v.RoomMembers[0].RoomID, Permissions: v.RoomMembers[0].Permissions, diff --git a/server/handlers/member.go b/server/handlers/member.go index fbfbaee..b3c70aa 100644 --- a/server/handlers/member.go +++ b/server/handlers/member.go @@ -90,7 +90,7 @@ func RoomMembers(ctx *gin.Context) { ctx.JSON(http.StatusOK, model.NewApiDataResp(gin.H{ "total": total, - "list": genRoomMemberListResp(list), + "list": genRoomMemberListResp(list, room), })) } @@ -180,7 +180,7 @@ func RoomAdminMembers(ctx *gin.Context) { ctx.JSON(http.StatusOK, model.NewApiDataResp(gin.H{ "total": total, - "list": genRoomMemberListResp(list), + "list": genRoomMemberListResp(list, room), })) } diff --git a/server/model/member.go b/server/model/member.go index cfed6cf..b0adb4c 100644 --- a/server/model/member.go +++ b/server/model/member.go @@ -8,6 +8,7 @@ type RoomMembersResp struct { UserID string `json:"userId"` Username string `json:"username"` JoinAt int64 `json:"joinAt"` + OnLine bool `json:"onLine"` Role dbModel.RoomMemberRole `json:"role"` RoomID string `json:"roomId"` Permissions dbModel.RoomMemberPermission `json:"permissions"`