49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"time"
|
|
|
|
"google.golang.org/grpc"
|
|
roomv1 "hyapp.local/api/proto/room/v1"
|
|
"hyapp/pkg/appcode"
|
|
broadcastservice "hyapp/services/activity-service/internal/service/broadcast"
|
|
)
|
|
|
|
// GRPCRoomBroadcastSource 通过 room-service 的 owner 读模型补齐 game_win 跳转所需展示状态。
|
|
// activity-service 不缓存密码或房间状态,只把本次结算时读取到的 locked 快照固化进 IM payload。
|
|
type GRPCRoomBroadcastSource struct {
|
|
client roomv1.RoomQueryServiceClient
|
|
}
|
|
|
|
func NewGRPCRoomBroadcastSource(conn *grpc.ClientConn) *GRPCRoomBroadcastSource {
|
|
return &GRPCRoomBroadcastSource{client: roomv1.NewRoomQueryServiceClient(conn)}
|
|
}
|
|
|
|
func (s *GRPCRoomBroadcastSource) GetRoomBroadcastSnapshot(ctx context.Context, roomID string) (broadcastservice.RoomBroadcastSnapshot, error) {
|
|
roomID = strings.TrimSpace(roomID)
|
|
resp, err := s.client.AdminGetRoom(ctx, &roomv1.AdminGetRoomRequest{
|
|
Meta: &roomv1.RequestMeta{
|
|
RequestId: "activity-game-win-room:" + roomID,
|
|
AppCode: appcode.FromContext(ctx),
|
|
SentAtMs: time.Now().UTC().UnixMilli(),
|
|
},
|
|
RoomId: roomID,
|
|
})
|
|
if err != nil {
|
|
return broadcastservice.RoomBroadcastSnapshot{}, err
|
|
}
|
|
room := resp.GetRoom()
|
|
if room == nil {
|
|
return broadcastservice.RoomBroadcastSnapshot{RoomID: roomID}, nil
|
|
}
|
|
return broadcastservice.RoomBroadcastSnapshot{
|
|
RoomID: room.GetRoomId(),
|
|
Title: room.GetTitle(),
|
|
Locked: room.GetLocked(),
|
|
VisibleRegionID: room.GetVisibleRegionId(),
|
|
Status: room.GetStatus(),
|
|
}, nil
|
|
}
|