add screen mode

This commit is contained in:
2026-09-10 11:40:20 +07:00
parent b8a9545b52
commit d4a6d84bc7
4 changed files with 65 additions and 10 deletions
+37 -6
View File
@@ -274,7 +274,9 @@ func screenState(session *screen_sessions_repo.ScreenSession) *proto.ScreenState
Id: fmt.Sprint(session.ID),
Status: "disconnected",
SoundEnabled: session.Sound,
Mode: proto.ScreenMode_SCREEN_MODE_UNSPECIFIED,
Mode: proto.ScreenMode(session.Mode),
StateVersion: session.Version,
PositionMs: session.Position,
}
if time.Since(session.LastSeen) <= 5*time.Second {
state.Status = "connected"
@@ -282,17 +284,46 @@ func screenState(session *screen_sessions_repo.ScreenSession) *proto.ScreenState
if session.GameID != nil {
gameID := int32(*session.GameID)
state.GameId = &gameID
state.Mode = proto.ScreenMode_SCREEN_MODE_COVER
if state.Mode == proto.ScreenMode_SCREEN_MODE_UNSPECIFIED {
state.Mode = proto.ScreenMode_SCREEN_MODE_COVER
}
}
return state
}
func (s *server) SetScreenMode(context.Context, *proto.SetScreenModeReq) (*proto.SetScreenModeRsp, error) {
panic("SetScreenMode is not implemented")
func (s *server) SetScreenMode(ctx context.Context, req *proto.SetScreenModeReq) (*proto.SetScreenModeRsp, error) {
if !canManageScreens(ctx) {
return nil, status.Error(codes.PermissionDenied, "permission denied")
}
if req == nil || req.GameId <= 0 || req.Mode == proto.ScreenMode_SCREEN_MODE_UNSPECIFIED {
return nil, status.Error(codes.InvalidArgument, "некорректный режим экрана")
}
if _, err := s.gameService.GetGame(ctx, int(req.GameId)); err != nil {
return nil, status.Error(codes.NotFound, "игра не найдена")
}
if err := s.screenRepo.SetMode(ctx, int(req.GameId), int32(req.Mode)); err != nil {
return nil, status.Error(codes.Internal, "не удалось изменить режим экранов")
}
return &proto.SetScreenModeRsp{}, nil
}
func (s *server) SendScreenCommand(context.Context, *proto.SendScreenCommandReq) (*proto.SendScreenCommandRsp, error) {
panic("SendScreenCommand is not implemented")
func (s *server) SendScreenCommand(ctx context.Context, req *proto.SendScreenCommandReq) (*proto.SendScreenCommandRsp, error) {
if !canManageScreens(ctx) {
return nil, status.Error(codes.PermissionDenied, "permission denied")
}
if req == nil || req.GameId <= 0 || req.Command == proto.ScreenCommand_SCREEN_COMMAND_UNSPECIFIED {
return nil, status.Error(codes.InvalidArgument, "некорректная команда экрана")
}
if _, err := s.gameService.GetGame(ctx, int(req.GameId)); err != nil {
return nil, status.Error(codes.NotFound, "игра не найдена")
}
if req.PositionMs < 0 {
return nil, status.Error(codes.InvalidArgument, "некорректная позиция")
}
if err := s.screenRepo.SetPosition(ctx, int(req.GameId), req.PositionMs); err != nil {
return nil, status.Error(codes.Internal, "не удалось сохранить позицию экранов")
}
return &proto.SendScreenCommandRsp{}, nil
}
func (s *server) Ping(_ context.Context, _ *proto.PingReq) (*proto.PingRsp, error) {