From c663fbb5047e168097e4a44e22f5a061a3c4e7d7 Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Sun, 4 Oct 2026 13:23:26 +0700 Subject: [PATCH] up --- api/main.proto | 71 + cmd/evening_detective_server/main.go | 7 + .../main.swagger.json | 199 ++- internal/app/screen_plan.go | 66 + internal/app/screen_plan_errors.go | 22 + internal/app/screen_plan_mapper.go | 39 + internal/app/screens.go | 4 + internal/app/server.go | 4 + internal/repos/game_screen_plans_repo/repo.go | 95 ++ internal/repos/screen_sessions_repo/repo.go | 41 +- .../services/screen_plan_service/mapper.go | 29 + .../services/screen_plan_service/service.go | 157 ++ .../screen_plan_service/service_test.go | 46 + internal/services/screen_service/mapper.go | 2 + internal/services/screen_service/service.go | 5 + ...0261004100000_create_game_screen_plans.sql | 10 + migrations/20261004110000_add_screen_text.sql | 6 + proto/main.pb.go | 1464 +++++++++++------ proto/main.pb.gw.go | 246 +++ proto/main_grpc.pb.go | 114 ++ 20 files changed, 2125 insertions(+), 502 deletions(-) create mode 100644 internal/app/screen_plan.go create mode 100644 internal/app/screen_plan_errors.go create mode 100644 internal/app/screen_plan_mapper.go create mode 100644 internal/repos/game_screen_plans_repo/repo.go create mode 100644 internal/services/screen_plan_service/mapper.go create mode 100644 internal/services/screen_plan_service/service.go create mode 100644 internal/services/screen_plan_service/service_test.go create mode 100644 migrations/20261004100000_create_game_screen_plans.sql create mode 100644 migrations/20261004110000_add_screen_text.sql diff --git a/api/main.proto b/api/main.proto index bc2e82a..06d814e 100644 --- a/api/main.proto +++ b/api/main.proto @@ -685,6 +685,36 @@ service EveningDetectiveServer { }; } + rpc GetScreenPlan(GetScreenPlanReq) returns (GetScreenPlanRsp) { + option (google.api.http) = { get: "/api/games/{gameID}/screen-plan" }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Экраны"; + summary: "Получить план экранов"; + }; + } + + rpc SaveScreenPlan(SaveScreenPlanReq) returns (SaveScreenPlanRsp) { + option (google.api.http) = { + put : "/api/games/{gameID}/screen-plan" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Экраны"; + summary: "Сохранить план экранов"; + }; + } + + rpc SetScreenPlanStep(SetScreenPlanStepReq) returns (SetScreenPlanStepRsp) { + option (google.api.http) = { + post: "/api/games/{gameID}/screen-plan/step" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Экраны"; + summary: "Перейти на шаг плана экранов"; + }; + } + rpc GetScreenResults(GetScreenResultsReq) returns (GetScreenResultsRsp) { option (google.api.http) = { post: "/api/screens/results" body: "*" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { @@ -1410,6 +1440,7 @@ enum ScreenMode { SCREEN_MODE_CONCLUSION_DONE = 5; SCREEN_MODE_RESULTS = 6; SCREEN_MODE_TIMER = 7; + SCREEN_MODE_TEXT = 8; } enum ScreenTimerState { @@ -1455,6 +1486,7 @@ message ScreenState { int64 timer_duration_seconds = 17; int64 timer_remaining_seconds = 18; ScreenTimerState timer_state = 19; + string text = 20; } message CreateScreenSessionReq {} @@ -1563,6 +1595,45 @@ message SendScreenCommandReq { message SendScreenCommandRsp { } +message ScreenPlanStep { + ScreenMode mode = 1; + string text = 2; + string timer_label = 3; + int64 timer_duration_seconds = 4; +} + +message ScreenPlan { + repeated ScreenPlanStep steps = 1; + int32 current_step = 2; +} + +message GetScreenPlanReq { + int32 gameID = 1; +} + +message GetScreenPlanRsp { + ScreenPlan plan = 1; +} + +message SaveScreenPlanReq { + int32 gameID = 1; + repeated ScreenPlanStep steps = 2; + int32 current_step = 3; +} + +message SaveScreenPlanRsp { + ScreenPlan plan = 1; +} + +message SetScreenPlanStepReq { + int32 gameID = 1; + int32 current_step = 2; +} + +message SetScreenPlanStepRsp { + ScreenPlan plan = 1; +} + message GetScreenResultsReq { string screenID = 1; string accessToken = 2; diff --git a/cmd/evening_detective_server/main.go b/cmd/evening_detective_server/main.go index 029567e..040675e 100644 --- a/cmd/evening_detective_server/main.go +++ b/cmd/evening_detective_server/main.go @@ -18,6 +18,7 @@ import ( "evening_detective_server/internal/repos/applications_repo" "evening_detective_server/internal/repos/game_map_repo" "evening_detective_server/internal/repos/game_reviews_repo" + "evening_detective_server/internal/repos/game_screen_plans_repo" "evening_detective_server/internal/repos/games_repo" "evening_detective_server/internal/repos/health_repo" "evening_detective_server/internal/repos/refresh_tokens_repo" @@ -36,6 +37,7 @@ import ( "evening_detective_server/internal/services/mcp_service" "evening_detective_server/internal/services/participation_service" "evening_detective_server/internal/services/scenarios_service" + "evening_detective_server/internal/services/screen_plan_service" "evening_detective_server/internal/services/screen_service" "evening_detective_server/internal/services/team_service" "evening_detective_server/internal/services/ticket_service" @@ -134,6 +136,10 @@ func main() { answersRepo := team_answers_repo.NewTeamAnswersRepo(dbpool) screenRepo := screen_sessions_repo.NewScreenSessionsRepo(dbpool) screenService := screen_service.NewScreenService(screenRepo) + screenPlanService := screen_plan_service.NewScreenPlanService( + game_screen_plans_repo.NewGameScreenPlansRepo(dbpool), + screenService, + ) mapService := map_service.NewMapService(game_map_repo.NewGameMapRepo(dbpool)) reviewsRepo := game_reviews_repo.NewGameReviewsRepo(dbpool) gameService := game_service.NewGameService( @@ -213,6 +219,7 @@ func main() { ticketService, participationService, screenService, + screenPlanService, mapService, ), ) diff --git a/cmd/evening_detective_server/main.swagger.json b/cmd/evening_detective_server/main.swagger.json index a9e22ad..8b37a3f 100644 --- a/cmd/evening_detective_server/main.swagger.json +++ b/cmd/evening_detective_server/main.swagger.json @@ -1012,6 +1012,116 @@ ] } }, + "/api/games/{gameID}/screen-plan": { + "get": { + "summary": "Получить план экранов", + "operationId": "EveningDetectiveServer_GetScreenPlan", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverGetScreenPlanRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "gameID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Экраны" + ] + }, + "put": { + "summary": "Сохранить план экранов", + "operationId": "EveningDetectiveServer_SaveScreenPlan", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverSaveScreenPlanRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "gameID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerSaveScreenPlanBody" + } + } + ], + "tags": [ + "Экраны" + ] + } + }, + "/api/games/{gameID}/screen-plan/step": { + "post": { + "summary": "Перейти на шаг плана экранов", + "operationId": "EveningDetectiveServer_SetScreenPlanStep", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverSetScreenPlanStepRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "gameID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerSetScreenPlanStepBody" + } + } + ], + "tags": [ + "Экраны" + ] + } + }, "/api/games/{gameID}/screens": { "get": { "summary": "Получить экраны игры", @@ -3176,6 +3286,22 @@ "EveningDetectiveServerResetGameBody": { "type": "object" }, + "EveningDetectiveServerSaveScreenPlanBody": { + "type": "object", + "properties": { + "steps": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverScreenPlanStep" + } + }, + "currentStep": { + "type": "integer", + "format": "int32" + } + } + }, "EveningDetectiveServerSendScreenCommandBody": { "type": "object", "properties": { @@ -3200,6 +3326,15 @@ } } }, + "EveningDetectiveServerSetScreenPlanStepBody": { + "type": "object", + "properties": { + "currentStep": { + "type": "integer", + "format": "int32" + } + } + }, "EveningDetectiveServerSetScreenSoundBody": { "type": "object", "properties": { @@ -3903,6 +4038,14 @@ } } }, + "evening_detective_serverGetScreenPlanRsp": { + "type": "object", + "properties": { + "plan": { + "$ref": "#/definitions/evening_detective_serverScreenPlan" + } + } + }, "evening_detective_serverGetScreenResultsReq": { "type": "object", "properties": { @@ -4261,6 +4404,14 @@ }, "description": "Вопрос в шапке итоговой таблицы: правильный ответ (поле answer сообщения\nQuestion) командам/таблице не передаётся — он виден только в панели оценки." }, + "evening_detective_serverSaveScreenPlanRsp": { + "type": "object", + "properties": { + "plan": { + "$ref": "#/definitions/evening_detective_serverScreenPlan" + } + } + }, "evening_detective_serverScenario": { "type": "object", "properties": { @@ -4339,10 +4490,45 @@ "SCREEN_MODE_CONCLUSION", "SCREEN_MODE_CONCLUSION_DONE", "SCREEN_MODE_RESULTS", - "SCREEN_MODE_TIMER" + "SCREEN_MODE_TIMER", + "SCREEN_MODE_TEXT" ], "default": "SCREEN_MODE_UNSPECIFIED" }, + "evening_detective_serverScreenPlan": { + "type": "object", + "properties": { + "steps": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverScreenPlanStep" + } + }, + "currentStep": { + "type": "integer", + "format": "int32" + } + } + }, + "evening_detective_serverScreenPlanStep": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/definitions/evening_detective_serverScreenMode" + }, + "text": { + "type": "string" + }, + "timerLabel": { + "type": "string" + }, + "timerDurationSeconds": { + "type": "string", + "format": "int64" + } + } + }, "evening_detective_serverScreenState": { "type": "object", "properties": { @@ -4408,6 +4594,9 @@ }, "timerState": { "$ref": "#/definitions/evening_detective_serverScreenTimerState" + }, + "text": { + "type": "string" } } }, @@ -4428,6 +4617,14 @@ "evening_detective_serverSetScreenModeRsp": { "type": "object" }, + "evening_detective_serverSetScreenPlanStepRsp": { + "type": "object", + "properties": { + "plan": { + "$ref": "#/definitions/evening_detective_serverScreenPlan" + } + } + }, "evening_detective_serverSetScreenSoundRsp": { "type": "object" }, diff --git a/internal/app/screen_plan.go b/internal/app/screen_plan.go new file mode 100644 index 0000000..a0c45d9 --- /dev/null +++ b/internal/app/screen_plan.go @@ -0,0 +1,66 @@ +package app + +import ( + "context" + "errors" + + "evening_detective_server/internal/services/screen_plan_service" + proto "evening_detective_server/proto" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (s *server) GetScreenPlan(ctx context.Context, req *proto.GetScreenPlanReq) (*proto.GetScreenPlanRsp, error) { + if !canManageScreens(ctx) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + if req == nil || req.GameID <= 0 { + return nil, status.Error(codes.InvalidArgument, "некорректный идентификатор игры") + } + if _, err := s.gameService.GetGame(ctx, int(req.GameID)); err != nil { + return nil, status.Error(codes.NotFound, "игра не найдена") + } + plan, err := s.screenPlanService.Get(ctx, int(req.GameID)) + if errors.Is(err, screen_plan_service.ErrPlanNotFound) { + return &proto.GetScreenPlanRsp{}, nil + } + if err != nil { + return nil, status.Error(codes.Internal, "не удалось получить план экранов") + } + return &proto.GetScreenPlanRsp{Plan: mapScreenPlan(plan)}, nil +} + +func (s *server) SaveScreenPlan(ctx context.Context, req *proto.SaveScreenPlanReq) (*proto.SaveScreenPlanRsp, error) { + if !canManageScreens(ctx) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + if req == nil || req.GameID <= 0 { + return nil, status.Error(codes.InvalidArgument, "некорректный идентификатор игры") + } + if _, err := s.gameService.GetGame(ctx, int(req.GameID)); err != nil { + return nil, status.Error(codes.NotFound, "игра не найдена") + } + plan, err := s.screenPlanService.Save(ctx, int(req.GameID), mapScreenPlanSteps(req.Steps), int(req.CurrentStep)) + if err != nil { + return nil, screenPlanStatus(err, "не удалось сохранить план экранов") + } + return &proto.SaveScreenPlanRsp{Plan: mapScreenPlan(plan)}, nil +} + +func (s *server) SetScreenPlanStep(ctx context.Context, req *proto.SetScreenPlanStepReq) (*proto.SetScreenPlanStepRsp, error) { + if !canManageScreens(ctx) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + if req == nil || req.GameID <= 0 || req.CurrentStep < 0 { + return nil, status.Error(codes.InvalidArgument, "некорректный шаг плана экранов") + } + if _, err := s.gameService.GetGame(ctx, int(req.GameID)); err != nil { + return nil, status.Error(codes.NotFound, "игра не найдена") + } + plan, err := s.screenPlanService.SetStep(ctx, int(req.GameID), int(req.CurrentStep)) + if err != nil { + return nil, screenPlanStatus(err, "не удалось применить шаг плана экранов") + } + return &proto.SetScreenPlanStepRsp{Plan: mapScreenPlan(plan)}, nil +} diff --git a/internal/app/screen_plan_errors.go b/internal/app/screen_plan_errors.go new file mode 100644 index 0000000..2aff575 --- /dev/null +++ b/internal/app/screen_plan_errors.go @@ -0,0 +1,22 @@ +package app + +import ( + "errors" + + "evening_detective_server/internal/services/screen_plan_service" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func screenPlanStatus(err error, fallback string) error { + switch { + case errors.Is(err, screen_plan_service.ErrPlanNotFound): + return status.Error(codes.NotFound, "план экранов не найден") + case errors.Is(err, screen_plan_service.ErrStepNotFound): + return status.Error(codes.InvalidArgument, "шаг плана экранов не найден") + case errors.Is(err, screen_plan_service.ErrInvalidPlan): + return status.Error(codes.InvalidArgument, "некорректный план экранов") + default: + return status.Error(codes.Internal, fallback) + } +} diff --git a/internal/app/screen_plan_mapper.go b/internal/app/screen_plan_mapper.go new file mode 100644 index 0000000..03b61b6 --- /dev/null +++ b/internal/app/screen_plan_mapper.go @@ -0,0 +1,39 @@ +package app + +import ( + "evening_detective_server/internal/services/screen_plan_service" + proto "evening_detective_server/proto" +) + +func mapScreenPlanSteps(steps []*proto.ScreenPlanStep) []screen_plan_service.Step { + mapped := make([]screen_plan_service.Step, 0, len(steps)) + for _, step := range steps { + if step == nil { + mapped = append(mapped, screen_plan_service.Step{}) + continue + } + mapped = append(mapped, screen_plan_service.Step{ + Mode: int32(step.Mode), + Text: step.Text, + TimerLabel: step.TimerLabel, + TimerDurationSeconds: step.TimerDurationSeconds, + }) + } + return mapped +} + +func mapScreenPlan(plan *screen_plan_service.Plan) *proto.ScreenPlan { + if plan == nil { + return nil + } + steps := make([]*proto.ScreenPlanStep, 0, len(plan.Steps)) + for _, step := range plan.Steps { + steps = append(steps, &proto.ScreenPlanStep{ + Mode: proto.ScreenMode(step.Mode), + Text: step.Text, + TimerLabel: step.TimerLabel, + TimerDurationSeconds: step.TimerDurationSeconds, + }) + } + return &proto.ScreenPlan{Steps: steps, CurrentStep: int32(plan.CurrentStep)} +} diff --git a/internal/app/screens.go b/internal/app/screens.go index 9662afa..58ebb37 100644 --- a/internal/app/screens.go +++ b/internal/app/screens.go @@ -93,6 +93,9 @@ func (s *server) BindScreen(ctx context.Context, req *proto.BindScreenReq) (*pro } return nil, status.Error(codes.Internal, "не удалось привязать экран") } + if err := s.screenPlanService.ApplyCurrent(ctx, int(req.GameID)); err != nil { + return nil, status.Error(codes.Internal, "не удалось применить план экранов") + } session, err := s.screenService.Get(ctx, id, hash) if err != nil { return nil, status.Error(codes.Internal, "не удалось получить состояние экрана") @@ -179,6 +182,7 @@ func screenState(session *screen_service.ScreenSession) *proto.ScreenState { TimerDurationSeconds: session.TimerDurationSeconds, TimerRemainingSeconds: timerRemaining, TimerState: timerState, + Text: session.Text, } if time.Since(session.LastSeen) <= 5*time.Second { state.Status = "connected" diff --git a/internal/app/server.go b/internal/app/server.go index 6b3d278..fdec2b9 100644 --- a/internal/app/server.go +++ b/internal/app/server.go @@ -9,6 +9,7 @@ import ( "evening_detective_server/internal/services/map_service" "evening_detective_server/internal/services/participation_service" "evening_detective_server/internal/services/scenarios_service" + "evening_detective_server/internal/services/screen_plan_service" "evening_detective_server/internal/services/screen_service" "evening_detective_server/internal/services/team_service" "evening_detective_server/internal/services/ticket_service" @@ -32,6 +33,7 @@ type server struct { ticketService *ticket_service.TicketService participationService *participation_service.ParticipationService screenService *screen_service.ScreenService + screenPlanService *screen_plan_service.ScreenPlanService mapService *map_service.MapService } @@ -49,6 +51,7 @@ func NewServer( ticketService *ticket_service.TicketService, participationService *participation_service.ParticipationService, screenService *screen_service.ScreenService, + screenPlanService *screen_plan_service.ScreenPlanService, mapService *map_service.MapService, ) proto.EveningDetectiveServerServer { return &server{ @@ -64,6 +67,7 @@ func NewServer( ticketService: ticketService, participationService: participationService, screenService: screenService, + screenPlanService: screenPlanService, mapService: mapService, } } diff --git a/internal/repos/game_screen_plans_repo/repo.go b/internal/repos/game_screen_plans_repo/repo.go new file mode 100644 index 0000000..90f619d --- /dev/null +++ b/internal/repos/game_screen_plans_repo/repo.go @@ -0,0 +1,95 @@ +// Package game_screen_plans_repo persists game screen plans. +package game_screen_plans_repo + +import ( + "context" + "encoding/json" + "errors" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" +) + +var ErrPlanNotFound = errors.New("план экранов не найден") + +// Step is a stored screen plan step. +type Step struct { + Mode int32 `json:"mode"` + Text string `json:"text,omitempty"` + TimerLabel string `json:"timerLabel,omitempty"` + TimerDurationSeconds int64 `json:"timerDurationSeconds,omitempty"` +} + +// Plan is a stored game screen plan. +type Plan struct { + GameID int + Steps []Step + CurrentStep int +} + +// GameScreenPlansRepo persists game screen plans. +type GameScreenPlansRepo struct { + pool *pgxpool.Pool +} + +// NewGameScreenPlansRepo creates a game screen plans repository. +func NewGameScreenPlansRepo(pool *pgxpool.Pool) *GameScreenPlansRepo { + return &GameScreenPlansRepo{pool: pool} +} + +func (r *GameScreenPlansRepo) Get(ctx context.Context, gameID int) (*Plan, error) { + plan := &Plan{GameID: gameID} + var raw []byte + err := r.pool.QueryRow( + ctx, + ` + SELECT steps, current_step + FROM game_screen_plans + WHERE game_id = $1`, + gameID, + ).Scan(&raw, &plan.CurrentStep) + if errors.Is(err, pgx.ErrNoRows) { + return nil, ErrPlanNotFound + } + if err != nil { + return nil, err + } + if err := json.Unmarshal(raw, &plan.Steps); err != nil { + return nil, err + } + return plan, nil +} + +func (r *GameScreenPlansRepo) Save(ctx context.Context, gameID int, steps []Step, currentStep int) (*Plan, error) { + raw, err := json.Marshal(steps) + if err != nil { + return nil, err + } + _, err = r.pool.Exec( + ctx, + ` + INSERT INTO game_screen_plans (game_id, steps, current_step) + VALUES ($1, $2::jsonb, $3) + ON CONFLICT (game_id) DO UPDATE SET + steps = EXCLUDED.steps, + current_step = EXCLUDED.current_step, + updated_at = NOW()`, + gameID, + raw, + currentStep, + ) + if err != nil { + return nil, err + } + return &Plan{GameID: gameID, Steps: steps, CurrentStep: currentStep}, nil +} + +func (r *GameScreenPlansRepo) Delete(ctx context.Context, gameID int) error { + _, err := r.pool.Exec( + ctx, + `DELETE FROM game_screen_plans + WHERE game_id = $1`, + gameID, + ) + return err +} diff --git a/internal/repos/screen_sessions_repo/repo.go b/internal/repos/screen_sessions_repo/repo.go index a67a283..d91cdc8 100644 --- a/internal/repos/screen_sessions_repo/repo.go +++ b/internal/repos/screen_sessions_repo/repo.go @@ -29,6 +29,7 @@ type ScreenSession struct { TimerRemainingSeconds int64 TimerState int32 TimerEndsAt *time.Time + Text string } // ScreenSessionsRepo persists screen sessions. @@ -56,11 +57,11 @@ func (r *ScreenSessionsRepo) Get(ctx context.Context, id int, tokenHash string) session := &ScreenSession{ID: id} err := r.pool.QueryRow(ctx, ` SELECT game_id, sound_enabled, last_seen_at, mode, state_version, position_ms, command, volume, - timer_label, timer_duration_seconds, timer_remaining_seconds, timer_state, timer_ends_at + timer_label, timer_duration_seconds, timer_remaining_seconds, timer_state, timer_ends_at, text FROM screen_sessions WHERE id = $1 AND access_token_hash = $2`, id, tokenHash). Scan(&session.GameID, &session.Sound, &session.LastSeen, &session.Mode, &session.Version, &session.Position, &session.Command, &session.Volume, - &session.TimerLabel, &session.TimerDurationSeconds, &session.TimerRemainingSeconds, &session.TimerState, &session.TimerEndsAt) + &session.TimerLabel, &session.TimerDurationSeconds, &session.TimerRemainingSeconds, &session.TimerState, &session.TimerEndsAt, &session.Text) if errors.Is(err, pgx.ErrNoRows) { return nil, ErrScreenNotFound } @@ -79,7 +80,7 @@ func (r *ScreenSessionsRepo) Get(ctx context.Context, id int, tokenHash string) func (r *ScreenSessionsRepo) ListByGame(ctx context.Context, gameID int) ([]*ScreenSession, error) { rows, err := r.pool.Query(ctx, ` SELECT id, game_id, sound_enabled, last_seen_at, mode, state_version, position_ms, command, volume, - timer_label, timer_duration_seconds, timer_remaining_seconds, timer_state, timer_ends_at + timer_label, timer_duration_seconds, timer_remaining_seconds, timer_state, timer_ends_at, text FROM screen_sessions WHERE game_id = $1 ORDER BY id`, gameID) @@ -92,7 +93,7 @@ func (r *ScreenSessionsRepo) ListByGame(ctx context.Context, gameID int) ([]*Scr for rows.Next() { session := &ScreenSession{} if err := rows.Scan(&session.ID, &session.GameID, &session.Sound, &session.LastSeen, &session.Mode, &session.Version, &session.Position, &session.Command, &session.Volume, - &session.TimerLabel, &session.TimerDurationSeconds, &session.TimerRemainingSeconds, &session.TimerState, &session.TimerEndsAt); err != nil { + &session.TimerLabel, &session.TimerDurationSeconds, &session.TimerRemainingSeconds, &session.TimerState, &session.TimerEndsAt, &session.Text); err != nil { return nil, err } sessions = append(sessions, session) @@ -102,7 +103,35 @@ func (r *ScreenSessionsRepo) ListByGame(ctx context.Context, gameID int) ([]*Scr // SetMode updates the display mode for a game. func (r *ScreenSessionsRepo) SetMode(ctx context.Context, gameID int, mode int32) error { - _, err := r.pool.Exec(ctx, `UPDATE screen_sessions SET mode = $2, command = 0, state_version = state_version + 1, updated_at = NOW() WHERE game_id = $1`, gameID, mode) + _, err := r.pool.Exec( + ctx, + `UPDATE screen_sessions + SET mode = $2, + text = '', + command = 0, + state_version = state_version + 1, + updated_at = NOW() + WHERE game_id = $1`, + gameID, + mode, + ) + return err +} + +// SetText updates the text screen for a game. +func (r *ScreenSessionsRepo) SetText(ctx context.Context, gameID int, text string) error { + _, err := r.pool.Exec( + ctx, + `UPDATE screen_sessions + SET mode = 8, + text = $2, + command = 0, + state_version = state_version + 1, + updated_at = NOW() + WHERE game_id = $1`, + gameID, + text, + ) return err } @@ -130,6 +159,7 @@ func (r *ScreenSessionsRepo) SetTimer(ctx context.Context, gameID int, duration timer_ends_at = NULL, command = 0, state_version = state_version + 1, + text = '', updated_at = NOW() WHERE game_id = $1`, gameID, label, duration) return err @@ -194,6 +224,7 @@ func (r *ScreenSessionsRepo) Unbind(ctx context.Context, id int) error { timer_remaining_seconds = 600, timer_state = 1, timer_ends_at = NULL, + text = '', state_version = state_version + 1, updated_at = NOW() WHERE id = $1`, id) diff --git a/internal/services/screen_plan_service/mapper.go b/internal/services/screen_plan_service/mapper.go new file mode 100644 index 0000000..3585c98 --- /dev/null +++ b/internal/services/screen_plan_service/mapper.go @@ -0,0 +1,29 @@ +package screen_plan_service + +import "evening_detective_server/internal/repos/game_screen_plans_repo" + +func mapPlan(plan *game_screen_plans_repo.Plan) *Plan { + steps := make([]Step, 0, len(plan.Steps)) + for _, step := range plan.Steps { + steps = append(steps, Step{ + Mode: step.Mode, + Text: step.Text, + TimerLabel: step.TimerLabel, + TimerDurationSeconds: step.TimerDurationSeconds, + }) + } + return &Plan{GameID: plan.GameID, Steps: steps, CurrentStep: plan.CurrentStep} +} + +func mapSteps(steps []Step) []game_screen_plans_repo.Step { + mapped := make([]game_screen_plans_repo.Step, 0, len(steps)) + for _, step := range steps { + mapped = append(mapped, game_screen_plans_repo.Step{ + Mode: step.Mode, + Text: step.Text, + TimerLabel: step.TimerLabel, + TimerDurationSeconds: step.TimerDurationSeconds, + }) + } + return mapped +} diff --git a/internal/services/screen_plan_service/service.go b/internal/services/screen_plan_service/service.go new file mode 100644 index 0000000..849fa83 --- /dev/null +++ b/internal/services/screen_plan_service/service.go @@ -0,0 +1,157 @@ +// Package screen_plan_service handles game screen plans. +package screen_plan_service + +import ( + "context" + "errors" + "strings" + + "evening_detective_server/internal/repos/game_screen_plans_repo" + "evening_detective_server/internal/services/screen_service" +) + +var ( + // ErrPlanNotFound indicates that a game has no screen plan. + ErrPlanNotFound = errors.New("план экранов не найден") + // ErrInvalidPlan indicates invalid screen plan data. + ErrInvalidPlan = errors.New("некорректный план экранов") + // ErrStepNotFound indicates that a screen plan step does not exist. + ErrStepNotFound = errors.New("шаг плана экранов не найден") +) + +// Step is a screen plan step used by the application layer. +type Step struct { + Mode int32 + Text string + TimerLabel string + TimerDurationSeconds int64 +} + +// Plan is a game screen plan used by the application layer. +type Plan struct { + GameID int + Steps []Step + CurrentStep int +} + +// ScreenPlanService handles game screen plans and applies their current step. +type ScreenPlanService struct { + repo *game_screen_plans_repo.GameScreenPlansRepo + screenService *screen_service.ScreenService +} + +// NewScreenPlanService creates a screen plan service. +func NewScreenPlanService( + repo *game_screen_plans_repo.GameScreenPlansRepo, + screenService *screen_service.ScreenService, +) *ScreenPlanService { + return &ScreenPlanService{repo: repo, screenService: screenService} +} + +// Get returns a game's screen plan. +func (s *ScreenPlanService) Get(ctx context.Context, gameID int) (*Plan, error) { + stored, err := s.repo.Get(ctx, gameID) + if errors.Is(err, game_screen_plans_repo.ErrPlanNotFound) { + return nil, ErrPlanNotFound + } + if err != nil { + return nil, err + } + return mapPlan(stored), nil +} + +// Save validates, stores and applies a game's screen plan. +func (s *ScreenPlanService) Save(ctx context.Context, gameID int, steps []Step, currentStep int) (*Plan, error) { + steps, err := normalizePlan(steps, currentStep) + if err != nil { + return nil, err + } + if len(steps) == 0 { + if err := s.repo.Delete(ctx, gameID); err != nil { + return nil, err + } + return nil, nil + } + stored, err := s.repo.Save(ctx, gameID, mapSteps(steps), currentStep) + if err != nil { + return nil, err + } + plan := mapPlan(stored) + if err := s.applyStep(ctx, gameID, plan); err != nil { + return nil, err + } + return plan, nil +} + +// SetStep stores and applies the selected step. +func (s *ScreenPlanService) SetStep(ctx context.Context, gameID, currentStep int) (*Plan, error) { + plan, err := s.Get(ctx, gameID) + if err != nil { + return nil, err + } + if currentStep < 0 || currentStep >= len(plan.Steps) { + return nil, ErrStepNotFound + } + stored, err := s.repo.Save(ctx, gameID, mapSteps(plan.Steps), currentStep) + if err != nil { + return nil, err + } + plan = mapPlan(stored) + if err := s.applyStep(ctx, gameID, plan); err != nil { + return nil, err + } + return plan, nil +} + +// ApplyCurrent applies the current step when a screen joins a game. +func (s *ScreenPlanService) ApplyCurrent(ctx context.Context, gameID int) error { + plan, err := s.Get(ctx, gameID) + if errors.Is(err, ErrPlanNotFound) { + return nil + } + if err != nil { + return err + } + return s.applyStep(ctx, gameID, plan) +} + +func normalizePlan(steps []Step, currentStep int) ([]Step, error) { + if currentStep < 0 || (len(steps) > 0 && currentStep >= len(steps)) || (len(steps) == 0 && currentStep != 0) { + return nil, ErrInvalidPlan + } + normalized := make([]Step, 0, len(steps)) + for _, step := range steps { + if step.Mode <= 0 || step.Mode > 8 { + return nil, ErrInvalidPlan + } + step.Text = strings.TrimSpace(step.Text) + step.TimerLabel = strings.TrimSpace(step.TimerLabel) + if step.Mode == 8 && (step.Text == "" || len(step.Text) > 10000) { + return nil, ErrInvalidPlan + } + if step.Mode == 7 { + if step.TimerDurationSeconds <= 0 || step.TimerDurationSeconds > 24*60*60 { + return nil, ErrInvalidPlan + } + if step.TimerLabel == "" { + step.TimerLabel = "Перерыв" + } + if len(step.TimerLabel) > 200 { + return nil, ErrInvalidPlan + } + } + normalized = append(normalized, step) + } + return normalized, nil +} + +func (s *ScreenPlanService) applyStep(ctx context.Context, gameID int, plan *Plan) error { + step := plan.Steps[plan.CurrentStep] + if step.Mode == 8 { + return s.screenService.SetText(ctx, gameID, step.Text) + } + if step.Mode == 7 { + return s.screenService.SetTimer(ctx, gameID, step.TimerDurationSeconds, step.TimerLabel) + } + return s.screenService.SetMode(ctx, gameID, step.Mode) +} diff --git a/internal/services/screen_plan_service/service_test.go b/internal/services/screen_plan_service/service_test.go new file mode 100644 index 0000000..c26558a --- /dev/null +++ b/internal/services/screen_plan_service/service_test.go @@ -0,0 +1,46 @@ +package screen_plan_service + +import "testing" + +func TestNormalizePlan(t *testing.T) { + tests := []struct { + name string + steps []Step + currentStep int + wantErr bool + }{ + { + name: "normalizes text and timer defaults", + steps: []Step{ + {Mode: 8, Text: " Внимание "}, + {Mode: 7, TimerDurationSeconds: 60}, + }, + }, + { + name: "rejects empty text", + steps: []Step{{Mode: 8}}, + wantErr: true, + }, + { + name: "rejects missing current step", + steps: []Step{{Mode: 1}}, + currentStep: 1, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + steps, err := normalizePlan(tt.steps, tt.currentStep) + if (err != nil) != tt.wantErr { + t.Fatalf("normalizePlan() error = %v, want error: %v", err, tt.wantErr) + } + if tt.wantErr { + return + } + if steps[0].Text != "Внимание" || steps[1].TimerLabel != "Перерыв" { + t.Fatalf("plan defaults were not normalized: %+v", steps) + } + }) + } +} diff --git a/internal/services/screen_service/mapper.go b/internal/services/screen_service/mapper.go index e0714ce..c2a31e4 100644 --- a/internal/services/screen_service/mapper.go +++ b/internal/services/screen_service/mapper.go @@ -23,6 +23,7 @@ type ScreenSession struct { TimerRemainingSeconds int64 TimerState int32 TimerEndsAt *time.Time + Text string } func mapSession(session *screen_sessions_repo.ScreenSession) *ScreenSession { @@ -41,5 +42,6 @@ func mapSession(session *screen_sessions_repo.ScreenSession) *ScreenSession { TimerRemainingSeconds: session.TimerRemainingSeconds, TimerState: session.TimerState, TimerEndsAt: session.TimerEndsAt, + Text: session.Text, } } diff --git a/internal/services/screen_service/service.go b/internal/services/screen_service/service.go index bd5c1a0..532e429 100644 --- a/internal/services/screen_service/service.go +++ b/internal/services/screen_service/service.go @@ -57,6 +57,11 @@ func (s *ScreenService) SetTimer(ctx context.Context, gameID int, duration int64 return s.repo.SetTimer(ctx, gameID, duration, label) } +// SetText updates the text screen for a game. +func (s *ScreenService) SetText(ctx context.Context, gameID int, text string) error { + return s.repo.SetText(ctx, gameID, text) +} + // SetTimerCommand updates the timer command for a game. func (s *ScreenService) SetTimerCommand(ctx context.Context, gameID int, command int32) error { return s.repo.SetTimerCommand(ctx, gameID, command) diff --git a/migrations/20261004100000_create_game_screen_plans.sql b/migrations/20261004100000_create_game_screen_plans.sql new file mode 100644 index 0000000..68848ec --- /dev/null +++ b/migrations/20261004100000_create_game_screen_plans.sql @@ -0,0 +1,10 @@ +-- +goose Up +CREATE TABLE IF NOT EXISTS game_screen_plans ( + game_id INTEGER PRIMARY KEY REFERENCES games(id) ON DELETE CASCADE, + steps JSONB NOT NULL DEFAULT '[]'::jsonb, + current_step INTEGER NOT NULL DEFAULT 0, + updated_at TIMESTAMP NOT NULL DEFAULT NOW() +); + +-- +goose Down +DROP TABLE IF EXISTS game_screen_plans; diff --git a/migrations/20261004110000_add_screen_text.sql b/migrations/20261004110000_add_screen_text.sql new file mode 100644 index 0000000..9b8b75a --- /dev/null +++ b/migrations/20261004110000_add_screen_text.sql @@ -0,0 +1,6 @@ +-- +goose Up +ALTER TABLE screen_sessions + ADD COLUMN IF NOT EXISTS text TEXT NOT NULL DEFAULT ''; + +-- +goose Down +ALTER TABLE screen_sessions DROP COLUMN IF EXISTS text; diff --git a/proto/main.pb.go b/proto/main.pb.go index 2c60b4c..e17e033 100644 --- a/proto/main.pb.go +++ b/proto/main.pb.go @@ -42,6 +42,7 @@ const ( ScreenMode_SCREEN_MODE_CONCLUSION_DONE ScreenMode = 5 ScreenMode_SCREEN_MODE_RESULTS ScreenMode = 6 ScreenMode_SCREEN_MODE_TIMER ScreenMode = 7 + ScreenMode_SCREEN_MODE_TEXT ScreenMode = 8 ) // Enum value maps for ScreenMode. @@ -55,6 +56,7 @@ var ( 5: "SCREEN_MODE_CONCLUSION_DONE", 6: "SCREEN_MODE_RESULTS", 7: "SCREEN_MODE_TIMER", + 8: "SCREEN_MODE_TEXT", } ScreenMode_value = map[string]int32{ "SCREEN_MODE_UNSPECIFIED": 0, @@ -65,6 +67,7 @@ var ( "SCREEN_MODE_CONCLUSION_DONE": 5, "SCREEN_MODE_RESULTS": 6, "SCREEN_MODE_TIMER": 7, + "SCREEN_MODE_TEXT": 8, } ) @@ -4578,6 +4581,7 @@ type ScreenState struct { TimerDurationSeconds int64 `protobuf:"varint,17,opt,name=timer_duration_seconds,json=timerDurationSeconds,proto3" json:"timer_duration_seconds,omitempty"` TimerRemainingSeconds int64 `protobuf:"varint,18,opt,name=timer_remaining_seconds,json=timerRemainingSeconds,proto3" json:"timer_remaining_seconds,omitempty"` TimerState ScreenTimerState `protobuf:"varint,19,opt,name=timer_state,json=timerState,proto3,enum=crabs.evening_detective_server.ScreenTimerState" json:"timer_state,omitempty"` + Text string `protobuf:"bytes,20,opt,name=text,proto3" json:"text,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4745,6 +4749,13 @@ func (x *ScreenState) GetTimerState() ScreenTimerState { return ScreenTimerState_SCREEN_TIMER_STATE_UNSPECIFIED } +func (x *ScreenState) GetText() string { + if x != nil { + return x.Text + } + return "" +} + type CreateScreenSessionReq struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -5885,6 +5896,414 @@ func (*SendScreenCommandRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{112} } +type ScreenPlanStep struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mode ScreenMode `protobuf:"varint,1,opt,name=mode,proto3,enum=crabs.evening_detective_server.ScreenMode" json:"mode,omitempty"` + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + TimerLabel string `protobuf:"bytes,3,opt,name=timer_label,json=timerLabel,proto3" json:"timer_label,omitempty"` + TimerDurationSeconds int64 `protobuf:"varint,4,opt,name=timer_duration_seconds,json=timerDurationSeconds,proto3" json:"timer_duration_seconds,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ScreenPlanStep) Reset() { + *x = ScreenPlanStep{} + mi := &file_main_proto_msgTypes[113] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ScreenPlanStep) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScreenPlanStep) ProtoMessage() {} + +func (x *ScreenPlanStep) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[113] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScreenPlanStep.ProtoReflect.Descriptor instead. +func (*ScreenPlanStep) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{113} +} + +func (x *ScreenPlanStep) GetMode() ScreenMode { + if x != nil { + return x.Mode + } + return ScreenMode_SCREEN_MODE_UNSPECIFIED +} + +func (x *ScreenPlanStep) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +func (x *ScreenPlanStep) GetTimerLabel() string { + if x != nil { + return x.TimerLabel + } + return "" +} + +func (x *ScreenPlanStep) GetTimerDurationSeconds() int64 { + if x != nil { + return x.TimerDurationSeconds + } + return 0 +} + +type ScreenPlan struct { + state protoimpl.MessageState `protogen:"open.v1"` + Steps []*ScreenPlanStep `protobuf:"bytes,1,rep,name=steps,proto3" json:"steps,omitempty"` + CurrentStep int32 `protobuf:"varint,2,opt,name=current_step,json=currentStep,proto3" json:"current_step,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ScreenPlan) Reset() { + *x = ScreenPlan{} + mi := &file_main_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ScreenPlan) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScreenPlan) ProtoMessage() {} + +func (x *ScreenPlan) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[114] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScreenPlan.ProtoReflect.Descriptor instead. +func (*ScreenPlan) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{114} +} + +func (x *ScreenPlan) GetSteps() []*ScreenPlanStep { + if x != nil { + return x.Steps + } + return nil +} + +func (x *ScreenPlan) GetCurrentStep() int32 { + if x != nil { + return x.CurrentStep + } + return 0 +} + +type GetScreenPlanReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetScreenPlanReq) Reset() { + *x = GetScreenPlanReq{} + mi := &file_main_proto_msgTypes[115] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetScreenPlanReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetScreenPlanReq) ProtoMessage() {} + +func (x *GetScreenPlanReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[115] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetScreenPlanReq.ProtoReflect.Descriptor instead. +func (*GetScreenPlanReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{115} +} + +func (x *GetScreenPlanReq) GetGameID() int32 { + if x != nil { + return x.GameID + } + return 0 +} + +type GetScreenPlanRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Plan *ScreenPlan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetScreenPlanRsp) Reset() { + *x = GetScreenPlanRsp{} + mi := &file_main_proto_msgTypes[116] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetScreenPlanRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetScreenPlanRsp) ProtoMessage() {} + +func (x *GetScreenPlanRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[116] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetScreenPlanRsp.ProtoReflect.Descriptor instead. +func (*GetScreenPlanRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{116} +} + +func (x *GetScreenPlanRsp) GetPlan() *ScreenPlan { + if x != nil { + return x.Plan + } + return nil +} + +type SaveScreenPlanReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` + Steps []*ScreenPlanStep `protobuf:"bytes,2,rep,name=steps,proto3" json:"steps,omitempty"` + CurrentStep int32 `protobuf:"varint,3,opt,name=current_step,json=currentStep,proto3" json:"current_step,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SaveScreenPlanReq) Reset() { + *x = SaveScreenPlanReq{} + mi := &file_main_proto_msgTypes[117] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SaveScreenPlanReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SaveScreenPlanReq) ProtoMessage() {} + +func (x *SaveScreenPlanReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[117] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SaveScreenPlanReq.ProtoReflect.Descriptor instead. +func (*SaveScreenPlanReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{117} +} + +func (x *SaveScreenPlanReq) GetGameID() int32 { + if x != nil { + return x.GameID + } + return 0 +} + +func (x *SaveScreenPlanReq) GetSteps() []*ScreenPlanStep { + if x != nil { + return x.Steps + } + return nil +} + +func (x *SaveScreenPlanReq) GetCurrentStep() int32 { + if x != nil { + return x.CurrentStep + } + return 0 +} + +type SaveScreenPlanRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Plan *ScreenPlan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SaveScreenPlanRsp) Reset() { + *x = SaveScreenPlanRsp{} + mi := &file_main_proto_msgTypes[118] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SaveScreenPlanRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SaveScreenPlanRsp) ProtoMessage() {} + +func (x *SaveScreenPlanRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[118] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SaveScreenPlanRsp.ProtoReflect.Descriptor instead. +func (*SaveScreenPlanRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{118} +} + +func (x *SaveScreenPlanRsp) GetPlan() *ScreenPlan { + if x != nil { + return x.Plan + } + return nil +} + +type SetScreenPlanStepReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` + CurrentStep int32 `protobuf:"varint,2,opt,name=current_step,json=currentStep,proto3" json:"current_step,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetScreenPlanStepReq) Reset() { + *x = SetScreenPlanStepReq{} + mi := &file_main_proto_msgTypes[119] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetScreenPlanStepReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetScreenPlanStepReq) ProtoMessage() {} + +func (x *SetScreenPlanStepReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[119] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetScreenPlanStepReq.ProtoReflect.Descriptor instead. +func (*SetScreenPlanStepReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{119} +} + +func (x *SetScreenPlanStepReq) GetGameID() int32 { + if x != nil { + return x.GameID + } + return 0 +} + +func (x *SetScreenPlanStepReq) GetCurrentStep() int32 { + if x != nil { + return x.CurrentStep + } + return 0 +} + +type SetScreenPlanStepRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Plan *ScreenPlan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetScreenPlanStepRsp) Reset() { + *x = SetScreenPlanStepRsp{} + mi := &file_main_proto_msgTypes[120] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetScreenPlanStepRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetScreenPlanStepRsp) ProtoMessage() {} + +func (x *SetScreenPlanStepRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[120] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetScreenPlanStepRsp.ProtoReflect.Descriptor instead. +func (*SetScreenPlanStepRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{120} +} + +func (x *SetScreenPlanStepRsp) GetPlan() *ScreenPlan { + if x != nil { + return x.Plan + } + return nil +} + type GetScreenResultsReq struct { state protoimpl.MessageState `protogen:"open.v1"` ScreenID string `protobuf:"bytes,1,opt,name=screenID,proto3" json:"screenID,omitempty"` @@ -5895,7 +6314,7 @@ type GetScreenResultsReq struct { func (x *GetScreenResultsReq) Reset() { *x = GetScreenResultsReq{} - mi := &file_main_proto_msgTypes[113] + mi := &file_main_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5907,7 +6326,7 @@ func (x *GetScreenResultsReq) String() string { func (*GetScreenResultsReq) ProtoMessage() {} func (x *GetScreenResultsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[113] + mi := &file_main_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5920,7 +6339,7 @@ func (x *GetScreenResultsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenResultsReq.ProtoReflect.Descriptor instead. func (*GetScreenResultsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{113} + return file_main_proto_rawDescGZIP(), []int{121} } func (x *GetScreenResultsReq) GetScreenID() string { @@ -5947,7 +6366,7 @@ type GetScreenResultsRsp struct { func (x *GetScreenResultsRsp) Reset() { *x = GetScreenResultsRsp{} - mi := &file_main_proto_msgTypes[114] + mi := &file_main_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5959,7 +6378,7 @@ func (x *GetScreenResultsRsp) String() string { func (*GetScreenResultsRsp) ProtoMessage() {} func (x *GetScreenResultsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[114] + mi := &file_main_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5972,7 +6391,7 @@ func (x *GetScreenResultsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenResultsRsp.ProtoReflect.Descriptor instead. func (*GetScreenResultsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{114} + return file_main_proto_rawDescGZIP(), []int{122} } func (x *GetScreenResultsRsp) GetQuestions() []*ResultsQuestion { @@ -5999,7 +6418,7 @@ type GetParticipationReq struct { func (x *GetParticipationReq) Reset() { *x = GetParticipationReq{} - mi := &file_main_proto_msgTypes[115] + mi := &file_main_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6011,7 +6430,7 @@ func (x *GetParticipationReq) String() string { func (*GetParticipationReq) ProtoMessage() {} func (x *GetParticipationReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[115] + mi := &file_main_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6024,7 +6443,7 @@ func (x *GetParticipationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetParticipationReq.ProtoReflect.Descriptor instead. func (*GetParticipationReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{115} + return file_main_proto_rawDescGZIP(), []int{123} } func (x *GetParticipationReq) GetToken() string { @@ -6046,7 +6465,7 @@ type AnswerParticipationReq struct { func (x *AnswerParticipationReq) Reset() { *x = AnswerParticipationReq{} - mi := &file_main_proto_msgTypes[116] + mi := &file_main_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6058,7 +6477,7 @@ func (x *AnswerParticipationReq) String() string { func (*AnswerParticipationReq) ProtoMessage() {} func (x *AnswerParticipationReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[116] + mi := &file_main_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6071,7 +6490,7 @@ func (x *AnswerParticipationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AnswerParticipationReq.ProtoReflect.Descriptor instead. func (*AnswerParticipationReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{116} + return file_main_proto_rawDescGZIP(), []int{124} } func (x *AnswerParticipationReq) GetToken() string { @@ -6109,7 +6528,7 @@ type ParticipationRsp struct { func (x *ParticipationRsp) Reset() { *x = ParticipationRsp{} - mi := &file_main_proto_msgTypes[117] + mi := &file_main_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6121,7 +6540,7 @@ func (x *ParticipationRsp) String() string { func (*ParticipationRsp) ProtoMessage() {} func (x *ParticipationRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[117] + mi := &file_main_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6134,7 +6553,7 @@ func (x *ParticipationRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ParticipationRsp.ProtoReflect.Descriptor instead. func (*ParticipationRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{117} + return file_main_proto_rawDescGZIP(), []int{125} } func (x *ParticipationRsp) GetTeamName() string { @@ -6203,7 +6622,7 @@ type Team struct { func (x *Team) Reset() { *x = Team{} - mi := &file_main_proto_msgTypes[118] + mi := &file_main_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6215,7 +6634,7 @@ func (x *Team) String() string { func (*Team) ProtoMessage() {} func (x *Team) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[118] + mi := &file_main_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6228,7 +6647,7 @@ func (x *Team) ProtoReflect() protoreflect.Message { // Deprecated: Use Team.ProtoReflect.Descriptor instead. func (*Team) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{118} + return file_main_proto_rawDescGZIP(), []int{126} } func (x *Team) GetID() int32 { @@ -6324,7 +6743,7 @@ type GetGameReq struct { func (x *GetGameReq) Reset() { *x = GetGameReq{} - mi := &file_main_proto_msgTypes[119] + mi := &file_main_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6336,7 +6755,7 @@ func (x *GetGameReq) String() string { func (*GetGameReq) ProtoMessage() {} func (x *GetGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[119] + mi := &file_main_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6349,7 +6768,7 @@ func (x *GetGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameReq.ProtoReflect.Descriptor instead. func (*GetGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{119} + return file_main_proto_rawDescGZIP(), []int{127} } func (x *GetGameReq) GetID() int32 { @@ -6368,7 +6787,7 @@ type GetGameRsp struct { func (x *GetGameRsp) Reset() { *x = GetGameRsp{} - mi := &file_main_proto_msgTypes[120] + mi := &file_main_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6380,7 +6799,7 @@ func (x *GetGameRsp) String() string { func (*GetGameRsp) ProtoMessage() {} func (x *GetGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[120] + mi := &file_main_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6393,7 +6812,7 @@ func (x *GetGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameRsp.ProtoReflect.Descriptor instead. func (*GetGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{120} + return file_main_proto_rawDescGZIP(), []int{128} } func (x *GetGameRsp) GetGame() *Game { @@ -6412,7 +6831,7 @@ type GetGameAnswersReq struct { func (x *GetGameAnswersReq) Reset() { *x = GetGameAnswersReq{} - mi := &file_main_proto_msgTypes[121] + mi := &file_main_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6424,7 +6843,7 @@ func (x *GetGameAnswersReq) String() string { func (*GetGameAnswersReq) ProtoMessage() {} func (x *GetGameAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[121] + mi := &file_main_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6437,7 +6856,7 @@ func (x *GetGameAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameAnswersReq.ProtoReflect.Descriptor instead. func (*GetGameAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{121} + return file_main_proto_rawDescGZIP(), []int{129} } func (x *GetGameAnswersReq) GetGameID() int32 { @@ -6457,7 +6876,7 @@ type GetGameAnswersRsp struct { func (x *GetGameAnswersRsp) Reset() { *x = GetGameAnswersRsp{} - mi := &file_main_proto_msgTypes[122] + mi := &file_main_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6469,7 +6888,7 @@ func (x *GetGameAnswersRsp) String() string { func (*GetGameAnswersRsp) ProtoMessage() {} func (x *GetGameAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[122] + mi := &file_main_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6482,7 +6901,7 @@ func (x *GetGameAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameAnswersRsp.ProtoReflect.Descriptor instead. func (*GetGameAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{122} + return file_main_proto_rawDescGZIP(), []int{130} } func (x *GetGameAnswersRsp) GetQuestions() []*Question { @@ -6508,7 +6927,7 @@ type GetGameResultsReq struct { func (x *GetGameResultsReq) Reset() { *x = GetGameResultsReq{} - mi := &file_main_proto_msgTypes[123] + mi := &file_main_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6520,7 +6939,7 @@ func (x *GetGameResultsReq) String() string { func (*GetGameResultsReq) ProtoMessage() {} func (x *GetGameResultsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[123] + mi := &file_main_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6533,7 +6952,7 @@ func (x *GetGameResultsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameResultsReq.ProtoReflect.Descriptor instead. func (*GetGameResultsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{123} + return file_main_proto_rawDescGZIP(), []int{131} } func (x *GetGameResultsReq) GetGameID() int32 { @@ -6555,7 +6974,7 @@ type ResultsQuestion struct { func (x *ResultsQuestion) Reset() { *x = ResultsQuestion{} - mi := &file_main_proto_msgTypes[124] + mi := &file_main_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6567,7 +6986,7 @@ func (x *ResultsQuestion) String() string { func (*ResultsQuestion) ProtoMessage() {} func (x *ResultsQuestion) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[124] + mi := &file_main_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6580,7 +6999,7 @@ func (x *ResultsQuestion) ProtoReflect() protoreflect.Message { // Deprecated: Use ResultsQuestion.ProtoReflect.Descriptor instead. func (*ResultsQuestion) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{124} + return file_main_proto_rawDescGZIP(), []int{132} } func (x *ResultsQuestion) GetCode() string { @@ -6616,7 +7035,7 @@ type TeamResult struct { func (x *TeamResult) Reset() { *x = TeamResult{} - mi := &file_main_proto_msgTypes[125] + mi := &file_main_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6628,7 +7047,7 @@ func (x *TeamResult) String() string { func (*TeamResult) ProtoMessage() {} func (x *TeamResult) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[125] + mi := &file_main_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6641,7 +7060,7 @@ func (x *TeamResult) ProtoReflect() protoreflect.Message { // Deprecated: Use TeamResult.ProtoReflect.Descriptor instead. func (*TeamResult) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{125} + return file_main_proto_rawDescGZIP(), []int{133} } func (x *TeamResult) GetTeam() *Team { @@ -6689,7 +7108,7 @@ type GetGameResultsRsp struct { func (x *GetGameResultsRsp) Reset() { *x = GetGameResultsRsp{} - mi := &file_main_proto_msgTypes[126] + mi := &file_main_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6701,7 +7120,7 @@ func (x *GetGameResultsRsp) String() string { func (*GetGameResultsRsp) ProtoMessage() {} func (x *GetGameResultsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[126] + mi := &file_main_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6714,7 +7133,7 @@ func (x *GetGameResultsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameResultsRsp.ProtoReflect.Descriptor instead. func (*GetGameResultsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{126} + return file_main_proto_rawDescGZIP(), []int{134} } func (x *GetGameResultsRsp) GetQuestions() []*ResultsQuestion { @@ -6749,7 +7168,7 @@ type GameReview struct { func (x *GameReview) Reset() { *x = GameReview{} - mi := &file_main_proto_msgTypes[127] + mi := &file_main_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6761,7 +7180,7 @@ func (x *GameReview) String() string { func (*GameReview) ProtoMessage() {} func (x *GameReview) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[127] + mi := &file_main_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6774,7 +7193,7 @@ func (x *GameReview) ProtoReflect() protoreflect.Message { // Deprecated: Use GameReview.ProtoReflect.Descriptor instead. func (*GameReview) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{127} + return file_main_proto_rawDescGZIP(), []int{135} } func (x *GameReview) GetID() int32 { @@ -6861,7 +7280,7 @@ type CreateGameReviewReq struct { func (x *CreateGameReviewReq) Reset() { *x = CreateGameReviewReq{} - mi := &file_main_proto_msgTypes[128] + mi := &file_main_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6873,7 +7292,7 @@ func (x *CreateGameReviewReq) String() string { func (*CreateGameReviewReq) ProtoMessage() {} func (x *CreateGameReviewReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[128] + mi := &file_main_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6886,7 +7305,7 @@ func (x *CreateGameReviewReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGameReviewReq.ProtoReflect.Descriptor instead. func (*CreateGameReviewReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{128} + return file_main_proto_rawDescGZIP(), []int{136} } func (x *CreateGameReviewReq) GetGameID() int32 { @@ -6940,7 +7359,7 @@ type CreateGameReviewRsp struct { func (x *CreateGameReviewRsp) Reset() { *x = CreateGameReviewRsp{} - mi := &file_main_proto_msgTypes[129] + mi := &file_main_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6952,7 +7371,7 @@ func (x *CreateGameReviewRsp) String() string { func (*CreateGameReviewRsp) ProtoMessage() {} func (x *CreateGameReviewRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[129] + mi := &file_main_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6965,7 +7384,7 @@ func (x *CreateGameReviewRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGameReviewRsp.ProtoReflect.Descriptor instead. func (*CreateGameReviewRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{129} + return file_main_proto_rawDescGZIP(), []int{137} } func (x *CreateGameReviewRsp) GetReview() *GameReview { @@ -6984,7 +7403,7 @@ type GetGameReviewsReq struct { func (x *GetGameReviewsReq) Reset() { *x = GetGameReviewsReq{} - mi := &file_main_proto_msgTypes[130] + mi := &file_main_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6996,7 +7415,7 @@ func (x *GetGameReviewsReq) String() string { func (*GetGameReviewsReq) ProtoMessage() {} func (x *GetGameReviewsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[130] + mi := &file_main_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7009,7 +7428,7 @@ func (x *GetGameReviewsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameReviewsReq.ProtoReflect.Descriptor instead. func (*GetGameReviewsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{130} + return file_main_proto_rawDescGZIP(), []int{138} } func (x *GetGameReviewsReq) GetGameID() int32 { @@ -7028,7 +7447,7 @@ type GetScenarioReviewsReq struct { func (x *GetScenarioReviewsReq) Reset() { *x = GetScenarioReviewsReq{} - mi := &file_main_proto_msgTypes[131] + mi := &file_main_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7040,7 +7459,7 @@ func (x *GetScenarioReviewsReq) String() string { func (*GetScenarioReviewsReq) ProtoMessage() {} func (x *GetScenarioReviewsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[131] + mi := &file_main_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7053,7 +7472,7 @@ func (x *GetScenarioReviewsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScenarioReviewsReq.ProtoReflect.Descriptor instead. func (*GetScenarioReviewsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{131} + return file_main_proto_rawDescGZIP(), []int{139} } func (x *GetScenarioReviewsReq) GetScenarioID() int32 { @@ -7071,7 +7490,7 @@ type GetReviewsForModerationReq struct { func (x *GetReviewsForModerationReq) Reset() { *x = GetReviewsForModerationReq{} - mi := &file_main_proto_msgTypes[132] + mi := &file_main_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7083,7 +7502,7 @@ func (x *GetReviewsForModerationReq) String() string { func (*GetReviewsForModerationReq) ProtoMessage() {} func (x *GetReviewsForModerationReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[132] + mi := &file_main_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7096,7 +7515,7 @@ func (x *GetReviewsForModerationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReviewsForModerationReq.ProtoReflect.Descriptor instead. func (*GetReviewsForModerationReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{132} + return file_main_proto_rawDescGZIP(), []int{140} } type GetGameReviewsRsp struct { @@ -7110,7 +7529,7 @@ type GetGameReviewsRsp struct { func (x *GetGameReviewsRsp) Reset() { *x = GetGameReviewsRsp{} - mi := &file_main_proto_msgTypes[133] + mi := &file_main_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7122,7 +7541,7 @@ func (x *GetGameReviewsRsp) String() string { func (*GetGameReviewsRsp) ProtoMessage() {} func (x *GetGameReviewsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[133] + mi := &file_main_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7135,7 +7554,7 @@ func (x *GetGameReviewsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameReviewsRsp.ProtoReflect.Descriptor instead. func (*GetGameReviewsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{133} + return file_main_proto_rawDescGZIP(), []int{141} } func (x *GetGameReviewsRsp) GetAverageRating() float64 { @@ -7169,7 +7588,7 @@ type ModerateGameReviewReq struct { func (x *ModerateGameReviewReq) Reset() { *x = ModerateGameReviewReq{} - mi := &file_main_proto_msgTypes[134] + mi := &file_main_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7181,7 +7600,7 @@ func (x *ModerateGameReviewReq) String() string { func (*ModerateGameReviewReq) ProtoMessage() {} func (x *ModerateGameReviewReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[134] + mi := &file_main_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7194,7 +7613,7 @@ func (x *ModerateGameReviewReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ModerateGameReviewReq.ProtoReflect.Descriptor instead. func (*ModerateGameReviewReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{134} + return file_main_proto_rawDescGZIP(), []int{142} } func (x *ModerateGameReviewReq) GetID() int32 { @@ -7220,7 +7639,7 @@ type ModerateGameReviewRsp struct { func (x *ModerateGameReviewRsp) Reset() { *x = ModerateGameReviewRsp{} - mi := &file_main_proto_msgTypes[135] + mi := &file_main_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7232,7 +7651,7 @@ func (x *ModerateGameReviewRsp) String() string { func (*ModerateGameReviewRsp) ProtoMessage() {} func (x *ModerateGameReviewRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[135] + mi := &file_main_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7245,7 +7664,7 @@ func (x *ModerateGameReviewRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ModerateGameReviewRsp.ProtoReflect.Descriptor instead. func (*ModerateGameReviewRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{135} + return file_main_proto_rawDescGZIP(), []int{143} } func (x *ModerateGameReviewRsp) GetReview() *GameReview { @@ -7270,7 +7689,7 @@ type UpdateGameReq struct { func (x *UpdateGameReq) Reset() { *x = UpdateGameReq{} - mi := &file_main_proto_msgTypes[136] + mi := &file_main_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7282,7 +7701,7 @@ func (x *UpdateGameReq) String() string { func (*UpdateGameReq) ProtoMessage() {} func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[136] + mi := &file_main_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7295,7 +7714,7 @@ func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameReq.ProtoReflect.Descriptor instead. func (*UpdateGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{136} + return file_main_proto_rawDescGZIP(), []int{144} } func (x *UpdateGameReq) GetID() int32 { @@ -7355,7 +7774,7 @@ type UpdateGameRsp struct { func (x *UpdateGameRsp) Reset() { *x = UpdateGameRsp{} - mi := &file_main_proto_msgTypes[137] + mi := &file_main_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7367,7 +7786,7 @@ func (x *UpdateGameRsp) String() string { func (*UpdateGameRsp) ProtoMessage() {} func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[137] + mi := &file_main_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7380,7 +7799,7 @@ func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameRsp.ProtoReflect.Descriptor instead. func (*UpdateGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{137} + return file_main_proto_rawDescGZIP(), []int{145} } type StartGameReq struct { @@ -7392,7 +7811,7 @@ type StartGameReq struct { func (x *StartGameReq) Reset() { *x = StartGameReq{} - mi := &file_main_proto_msgTypes[138] + mi := &file_main_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7404,7 +7823,7 @@ func (x *StartGameReq) String() string { func (*StartGameReq) ProtoMessage() {} func (x *StartGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[138] + mi := &file_main_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7417,7 +7836,7 @@ func (x *StartGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameReq.ProtoReflect.Descriptor instead. func (*StartGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{138} + return file_main_proto_rawDescGZIP(), []int{146} } func (x *StartGameReq) GetID() int32 { @@ -7435,7 +7854,7 @@ type StartGameRsp struct { func (x *StartGameRsp) Reset() { *x = StartGameRsp{} - mi := &file_main_proto_msgTypes[139] + mi := &file_main_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7447,7 +7866,7 @@ func (x *StartGameRsp) String() string { func (*StartGameRsp) ProtoMessage() {} func (x *StartGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[139] + mi := &file_main_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7460,7 +7879,7 @@ func (x *StartGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameRsp.ProtoReflect.Descriptor instead. func (*StartGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{139} + return file_main_proto_rawDescGZIP(), []int{147} } type PauseGameReq struct { @@ -7472,7 +7891,7 @@ type PauseGameReq struct { func (x *PauseGameReq) Reset() { *x = PauseGameReq{} - mi := &file_main_proto_msgTypes[140] + mi := &file_main_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7484,7 +7903,7 @@ func (x *PauseGameReq) String() string { func (*PauseGameReq) ProtoMessage() {} func (x *PauseGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[140] + mi := &file_main_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7497,7 +7916,7 @@ func (x *PauseGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameReq.ProtoReflect.Descriptor instead. func (*PauseGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{140} + return file_main_proto_rawDescGZIP(), []int{148} } func (x *PauseGameReq) GetID() int32 { @@ -7515,7 +7934,7 @@ type PauseGameRsp struct { func (x *PauseGameRsp) Reset() { *x = PauseGameRsp{} - mi := &file_main_proto_msgTypes[141] + mi := &file_main_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7527,7 +7946,7 @@ func (x *PauseGameRsp) String() string { func (*PauseGameRsp) ProtoMessage() {} func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[141] + mi := &file_main_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7540,7 +7959,7 @@ func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameRsp.ProtoReflect.Descriptor instead. func (*PauseGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{141} + return file_main_proto_rawDescGZIP(), []int{149} } type PlayGameReq struct { @@ -7552,7 +7971,7 @@ type PlayGameReq struct { func (x *PlayGameReq) Reset() { *x = PlayGameReq{} - mi := &file_main_proto_msgTypes[142] + mi := &file_main_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7564,7 +7983,7 @@ func (x *PlayGameReq) String() string { func (*PlayGameReq) ProtoMessage() {} func (x *PlayGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[142] + mi := &file_main_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7577,7 +7996,7 @@ func (x *PlayGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameReq.ProtoReflect.Descriptor instead. func (*PlayGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{142} + return file_main_proto_rawDescGZIP(), []int{150} } func (x *PlayGameReq) GetID() int32 { @@ -7595,7 +8014,7 @@ type PlayGameRsp struct { func (x *PlayGameRsp) Reset() { *x = PlayGameRsp{} - mi := &file_main_proto_msgTypes[143] + mi := &file_main_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7607,7 +8026,7 @@ func (x *PlayGameRsp) String() string { func (*PlayGameRsp) ProtoMessage() {} func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[143] + mi := &file_main_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7620,7 +8039,7 @@ func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameRsp.ProtoReflect.Descriptor instead. func (*PlayGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{143} + return file_main_proto_rawDescGZIP(), []int{151} } type FinishGameReq struct { @@ -7632,7 +8051,7 @@ type FinishGameReq struct { func (x *FinishGameReq) Reset() { *x = FinishGameReq{} - mi := &file_main_proto_msgTypes[144] + mi := &file_main_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7644,7 +8063,7 @@ func (x *FinishGameReq) String() string { func (*FinishGameReq) ProtoMessage() {} func (x *FinishGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[144] + mi := &file_main_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7657,7 +8076,7 @@ func (x *FinishGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameReq.ProtoReflect.Descriptor instead. func (*FinishGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{144} + return file_main_proto_rawDescGZIP(), []int{152} } func (x *FinishGameReq) GetID() int32 { @@ -7675,7 +8094,7 @@ type FinishGameRsp struct { func (x *FinishGameRsp) Reset() { *x = FinishGameRsp{} - mi := &file_main_proto_msgTypes[145] + mi := &file_main_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7687,7 +8106,7 @@ func (x *FinishGameRsp) String() string { func (*FinishGameRsp) ProtoMessage() {} func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[145] + mi := &file_main_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7700,7 +8119,7 @@ func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameRsp.ProtoReflect.Descriptor instead. func (*FinishGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{145} + return file_main_proto_rawDescGZIP(), []int{153} } type ResetGameReq struct { @@ -7712,7 +8131,7 @@ type ResetGameReq struct { func (x *ResetGameReq) Reset() { *x = ResetGameReq{} - mi := &file_main_proto_msgTypes[146] + mi := &file_main_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7724,7 +8143,7 @@ func (x *ResetGameReq) String() string { func (*ResetGameReq) ProtoMessage() {} func (x *ResetGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[146] + mi := &file_main_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7737,7 +8156,7 @@ func (x *ResetGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameReq.ProtoReflect.Descriptor instead. func (*ResetGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{146} + return file_main_proto_rawDescGZIP(), []int{154} } func (x *ResetGameReq) GetID() int32 { @@ -7755,7 +8174,7 @@ type ResetGameRsp struct { func (x *ResetGameRsp) Reset() { *x = ResetGameRsp{} - mi := &file_main_proto_msgTypes[147] + mi := &file_main_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7767,7 +8186,7 @@ func (x *ResetGameRsp) String() string { func (*ResetGameRsp) ProtoMessage() {} func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[147] + mi := &file_main_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7780,7 +8199,7 @@ func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameRsp.ProtoReflect.Descriptor instead. func (*ResetGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{147} + return file_main_proto_rawDescGZIP(), []int{155} } type DeleteGameReq struct { @@ -7792,7 +8211,7 @@ type DeleteGameReq struct { func (x *DeleteGameReq) Reset() { *x = DeleteGameReq{} - mi := &file_main_proto_msgTypes[148] + mi := &file_main_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7804,7 +8223,7 @@ func (x *DeleteGameReq) String() string { func (*DeleteGameReq) ProtoMessage() {} func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[148] + mi := &file_main_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7817,7 +8236,7 @@ func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameReq.ProtoReflect.Descriptor instead. func (*DeleteGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{148} + return file_main_proto_rawDescGZIP(), []int{156} } func (x *DeleteGameReq) GetID() int32 { @@ -7835,7 +8254,7 @@ type DeleteGameRsp struct { func (x *DeleteGameRsp) Reset() { *x = DeleteGameRsp{} - mi := &file_main_proto_msgTypes[149] + mi := &file_main_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7847,7 +8266,7 @@ func (x *DeleteGameRsp) String() string { func (*DeleteGameRsp) ProtoMessage() {} func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[149] + mi := &file_main_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7860,7 +8279,7 @@ func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameRsp.ProtoReflect.Descriptor instead. func (*DeleteGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{149} + return file_main_proto_rawDescGZIP(), []int{157} } type AddTeamReq struct { @@ -7875,7 +8294,7 @@ type AddTeamReq struct { func (x *AddTeamReq) Reset() { *x = AddTeamReq{} - mi := &file_main_proto_msgTypes[150] + mi := &file_main_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7887,7 +8306,7 @@ func (x *AddTeamReq) String() string { func (*AddTeamReq) ProtoMessage() {} func (x *AddTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[150] + mi := &file_main_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7900,7 +8319,7 @@ func (x *AddTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamReq.ProtoReflect.Descriptor instead. func (*AddTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{150} + return file_main_proto_rawDescGZIP(), []int{158} } func (x *AddTeamReq) GetGameID() int32 { @@ -7941,7 +8360,7 @@ type AddTeamRsp struct { func (x *AddTeamRsp) Reset() { *x = AddTeamRsp{} - mi := &file_main_proto_msgTypes[151] + mi := &file_main_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7953,7 +8372,7 @@ func (x *AddTeamRsp) String() string { func (*AddTeamRsp) ProtoMessage() {} func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[151] + mi := &file_main_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7966,7 +8385,7 @@ func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamRsp.ProtoReflect.Descriptor instead. func (*AddTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{151} + return file_main_proto_rawDescGZIP(), []int{159} } func (x *AddTeamRsp) GetID() int32 { @@ -7993,7 +8412,7 @@ type UpdateTeamReq struct { func (x *UpdateTeamReq) Reset() { *x = UpdateTeamReq{} - mi := &file_main_proto_msgTypes[152] + mi := &file_main_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8005,7 +8424,7 @@ func (x *UpdateTeamReq) String() string { func (*UpdateTeamReq) ProtoMessage() {} func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[152] + mi := &file_main_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8018,7 +8437,7 @@ func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamReq.ProtoReflect.Descriptor instead. func (*UpdateTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{152} + return file_main_proto_rawDescGZIP(), []int{160} } func (x *UpdateTeamReq) GetID() int32 { @@ -8043,7 +8462,7 @@ type UpdateTeamRsp struct { func (x *UpdateTeamRsp) Reset() { *x = UpdateTeamRsp{} - mi := &file_main_proto_msgTypes[153] + mi := &file_main_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8055,7 +8474,7 @@ func (x *UpdateTeamRsp) String() string { func (*UpdateTeamRsp) ProtoMessage() {} func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[153] + mi := &file_main_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8068,7 +8487,7 @@ func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamRsp.ProtoReflect.Descriptor instead. func (*UpdateTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{153} + return file_main_proto_rawDescGZIP(), []int{161} } type DeleteTeamReq struct { @@ -8080,7 +8499,7 @@ type DeleteTeamReq struct { func (x *DeleteTeamReq) Reset() { *x = DeleteTeamReq{} - mi := &file_main_proto_msgTypes[154] + mi := &file_main_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8092,7 +8511,7 @@ func (x *DeleteTeamReq) String() string { func (*DeleteTeamReq) ProtoMessage() {} func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[154] + mi := &file_main_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8105,7 +8524,7 @@ func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamReq.ProtoReflect.Descriptor instead. func (*DeleteTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{154} + return file_main_proto_rawDescGZIP(), []int{162} } func (x *DeleteTeamReq) GetID() int64 { @@ -8123,7 +8542,7 @@ type DeleteTeamRsp struct { func (x *DeleteTeamRsp) Reset() { *x = DeleteTeamRsp{} - mi := &file_main_proto_msgTypes[155] + mi := &file_main_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8135,7 +8554,7 @@ func (x *DeleteTeamRsp) String() string { func (*DeleteTeamRsp) ProtoMessage() {} func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[155] + mi := &file_main_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8148,7 +8567,7 @@ func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamRsp.ProtoReflect.Descriptor instead. func (*DeleteTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{155} + return file_main_proto_rawDescGZIP(), []int{163} } type GiveTeamApplicationsReq struct { @@ -8161,7 +8580,7 @@ type GiveTeamApplicationsReq struct { func (x *GiveTeamApplicationsReq) Reset() { *x = GiveTeamApplicationsReq{} - mi := &file_main_proto_msgTypes[156] + mi := &file_main_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8173,7 +8592,7 @@ func (x *GiveTeamApplicationsReq) String() string { func (*GiveTeamApplicationsReq) ProtoMessage() {} func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[156] + mi := &file_main_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8186,7 +8605,7 @@ func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsReq.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{156} + return file_main_proto_rawDescGZIP(), []int{164} } func (x *GiveTeamApplicationsReq) GetID() int64 { @@ -8211,7 +8630,7 @@ type GiveTeamApplicationsRsp struct { func (x *GiveTeamApplicationsRsp) Reset() { *x = GiveTeamApplicationsRsp{} - mi := &file_main_proto_msgTypes[157] + mi := &file_main_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8223,7 +8642,7 @@ func (x *GiveTeamApplicationsRsp) String() string { func (*GiveTeamApplicationsRsp) ProtoMessage() {} func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[157] + mi := &file_main_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8236,7 +8655,7 @@ func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsRsp.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{157} + return file_main_proto_rawDescGZIP(), []int{165} } type GetTeamStoryReq struct { @@ -8249,7 +8668,7 @@ type GetTeamStoryReq struct { func (x *GetTeamStoryReq) Reset() { *x = GetTeamStoryReq{} - mi := &file_main_proto_msgTypes[158] + mi := &file_main_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8261,7 +8680,7 @@ func (x *GetTeamStoryReq) String() string { func (*GetTeamStoryReq) ProtoMessage() {} func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[158] + mi := &file_main_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8274,7 +8693,7 @@ func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryReq.ProtoReflect.Descriptor instead. func (*GetTeamStoryReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{158} + return file_main_proto_rawDescGZIP(), []int{166} } func (x *GetTeamStoryReq) GetID() int64 { @@ -8302,7 +8721,7 @@ type GetTeamStoryRsp struct { func (x *GetTeamStoryRsp) Reset() { *x = GetTeamStoryRsp{} - mi := &file_main_proto_msgTypes[159] + mi := &file_main_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8314,7 +8733,7 @@ func (x *GetTeamStoryRsp) String() string { func (*GetTeamStoryRsp) ProtoMessage() {} func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[159] + mi := &file_main_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8327,7 +8746,7 @@ func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryRsp.ProtoReflect.Descriptor instead. func (*GetTeamStoryRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{159} + return file_main_proto_rawDescGZIP(), []int{167} } func (x *GetTeamStoryRsp) GetStory() *Story { @@ -8361,7 +8780,7 @@ type TeamAction struct { func (x *TeamAction) Reset() { *x = TeamAction{} - mi := &file_main_proto_msgTypes[160] + mi := &file_main_proto_msgTypes[168] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8373,7 +8792,7 @@ func (x *TeamAction) String() string { func (*TeamAction) ProtoMessage() {} func (x *TeamAction) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[160] + mi := &file_main_proto_msgTypes[168] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8386,7 +8805,7 @@ func (x *TeamAction) ProtoReflect() protoreflect.Message { // Deprecated: Use TeamAction.ProtoReflect.Descriptor instead. func (*TeamAction) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{160} + return file_main_proto_rawDescGZIP(), []int{168} } func (x *TeamAction) GetCode() string { @@ -8414,7 +8833,7 @@ type AddTeamActionReq struct { func (x *AddTeamActionReq) Reset() { *x = AddTeamActionReq{} - mi := &file_main_proto_msgTypes[161] + mi := &file_main_proto_msgTypes[169] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8426,7 +8845,7 @@ func (x *AddTeamActionReq) String() string { func (*AddTeamActionReq) ProtoMessage() {} func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[161] + mi := &file_main_proto_msgTypes[169] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8439,7 +8858,7 @@ func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionReq.ProtoReflect.Descriptor instead. func (*AddTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{161} + return file_main_proto_rawDescGZIP(), []int{169} } func (x *AddTeamActionReq) GetID() int64 { @@ -8471,7 +8890,7 @@ type AddTeamActionRsp struct { func (x *AddTeamActionRsp) Reset() { *x = AddTeamActionRsp{} - mi := &file_main_proto_msgTypes[162] + mi := &file_main_proto_msgTypes[170] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8483,7 +8902,7 @@ func (x *AddTeamActionRsp) String() string { func (*AddTeamActionRsp) ProtoMessage() {} func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[162] + mi := &file_main_proto_msgTypes[170] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8496,7 +8915,7 @@ func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionRsp.ProtoReflect.Descriptor instead. func (*AddTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{162} + return file_main_proto_rawDescGZIP(), []int{170} } type DeleteLastTeamActionReq struct { @@ -8508,7 +8927,7 @@ type DeleteLastTeamActionReq struct { func (x *DeleteLastTeamActionReq) Reset() { *x = DeleteLastTeamActionReq{} - mi := &file_main_proto_msgTypes[163] + mi := &file_main_proto_msgTypes[171] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8520,7 +8939,7 @@ func (x *DeleteLastTeamActionReq) String() string { func (*DeleteLastTeamActionReq) ProtoMessage() {} func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[163] + mi := &file_main_proto_msgTypes[171] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8533,7 +8952,7 @@ func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionReq.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{163} + return file_main_proto_rawDescGZIP(), []int{171} } func (x *DeleteLastTeamActionReq) GetID() int64 { @@ -8551,7 +8970,7 @@ type DeleteLastTeamActionRsp struct { func (x *DeleteLastTeamActionRsp) Reset() { *x = DeleteLastTeamActionRsp{} - mi := &file_main_proto_msgTypes[164] + mi := &file_main_proto_msgTypes[172] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8563,7 +8982,7 @@ func (x *DeleteLastTeamActionRsp) String() string { func (*DeleteLastTeamActionRsp) ProtoMessage() {} func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[164] + mi := &file_main_proto_msgTypes[172] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8576,7 +8995,7 @@ func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionRsp.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{164} + return file_main_proto_rawDescGZIP(), []int{172} } type GetTeamAnswersReq struct { @@ -8589,7 +9008,7 @@ type GetTeamAnswersReq struct { func (x *GetTeamAnswersReq) Reset() { *x = GetTeamAnswersReq{} - mi := &file_main_proto_msgTypes[165] + mi := &file_main_proto_msgTypes[173] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8601,7 +9020,7 @@ func (x *GetTeamAnswersReq) String() string { func (*GetTeamAnswersReq) ProtoMessage() {} func (x *GetTeamAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[165] + mi := &file_main_proto_msgTypes[173] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8614,7 +9033,7 @@ func (x *GetTeamAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamAnswersReq.ProtoReflect.Descriptor instead. func (*GetTeamAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{165} + return file_main_proto_rawDescGZIP(), []int{173} } func (x *GetTeamAnswersReq) GetID() int64 { @@ -8640,7 +9059,7 @@ type GetTeamAnswersRsp struct { func (x *GetTeamAnswersRsp) Reset() { *x = GetTeamAnswersRsp{} - mi := &file_main_proto_msgTypes[166] + mi := &file_main_proto_msgTypes[174] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8652,7 +9071,7 @@ func (x *GetTeamAnswersRsp) String() string { func (*GetTeamAnswersRsp) ProtoMessage() {} func (x *GetTeamAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[166] + mi := &file_main_proto_msgTypes[174] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8665,7 +9084,7 @@ func (x *GetTeamAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamAnswersRsp.ProtoReflect.Descriptor instead. func (*GetTeamAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{166} + return file_main_proto_rawDescGZIP(), []int{174} } func (x *GetTeamAnswersRsp) GetAnswers() []*Answer { @@ -8686,7 +9105,7 @@ type SubmitTeamAnswersReq struct { func (x *SubmitTeamAnswersReq) Reset() { *x = SubmitTeamAnswersReq{} - mi := &file_main_proto_msgTypes[167] + mi := &file_main_proto_msgTypes[175] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8698,7 +9117,7 @@ func (x *SubmitTeamAnswersReq) String() string { func (*SubmitTeamAnswersReq) ProtoMessage() {} func (x *SubmitTeamAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[167] + mi := &file_main_proto_msgTypes[175] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8711,7 +9130,7 @@ func (x *SubmitTeamAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTeamAnswersReq.ProtoReflect.Descriptor instead. func (*SubmitTeamAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{167} + return file_main_proto_rawDescGZIP(), []int{175} } func (x *SubmitTeamAnswersReq) GetID() int64 { @@ -8743,7 +9162,7 @@ type SubmitTeamAnswersRsp struct { func (x *SubmitTeamAnswersRsp) Reset() { *x = SubmitTeamAnswersRsp{} - mi := &file_main_proto_msgTypes[168] + mi := &file_main_proto_msgTypes[176] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8755,7 +9174,7 @@ func (x *SubmitTeamAnswersRsp) String() string { func (*SubmitTeamAnswersRsp) ProtoMessage() {} func (x *SubmitTeamAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[168] + mi := &file_main_proto_msgTypes[176] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8768,7 +9187,7 @@ func (x *SubmitTeamAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTeamAnswersRsp.ProtoReflect.Descriptor instead. func (*SubmitTeamAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{168} + return file_main_proto_rawDescGZIP(), []int{176} } type SetTeamAnswerScoreReq struct { @@ -8783,7 +9202,7 @@ type SetTeamAnswerScoreReq struct { func (x *SetTeamAnswerScoreReq) Reset() { *x = SetTeamAnswerScoreReq{} - mi := &file_main_proto_msgTypes[169] + mi := &file_main_proto_msgTypes[177] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8795,7 +9214,7 @@ func (x *SetTeamAnswerScoreReq) String() string { func (*SetTeamAnswerScoreReq) ProtoMessage() {} func (x *SetTeamAnswerScoreReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[169] + mi := &file_main_proto_msgTypes[177] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8808,7 +9227,7 @@ func (x *SetTeamAnswerScoreReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTeamAnswerScoreReq.ProtoReflect.Descriptor instead. func (*SetTeamAnswerScoreReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{169} + return file_main_proto_rawDescGZIP(), []int{177} } func (x *SetTeamAnswerScoreReq) GetID() int64 { @@ -8840,7 +9259,7 @@ type SetTeamAnswerScoreRsp struct { func (x *SetTeamAnswerScoreRsp) Reset() { *x = SetTeamAnswerScoreRsp{} - mi := &file_main_proto_msgTypes[170] + mi := &file_main_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8852,7 +9271,7 @@ func (x *SetTeamAnswerScoreRsp) String() string { func (*SetTeamAnswerScoreRsp) ProtoMessage() {} func (x *SetTeamAnswerScoreRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[170] + mi := &file_main_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8865,7 +9284,7 @@ func (x *SetTeamAnswerScoreRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTeamAnswerScoreRsp.ProtoReflect.Descriptor instead. func (*SetTeamAnswerScoreRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{170} + return file_main_proto_rawDescGZIP(), []int{178} } type UpdateScenarioBackgroundReq struct { @@ -8878,7 +9297,7 @@ type UpdateScenarioBackgroundReq struct { func (x *UpdateScenarioBackgroundReq) Reset() { *x = UpdateScenarioBackgroundReq{} - mi := &file_main_proto_msgTypes[171] + mi := &file_main_proto_msgTypes[179] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8890,7 +9309,7 @@ func (x *UpdateScenarioBackgroundReq) String() string { func (*UpdateScenarioBackgroundReq) ProtoMessage() {} func (x *UpdateScenarioBackgroundReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[171] + mi := &file_main_proto_msgTypes[179] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8903,7 +9322,7 @@ func (x *UpdateScenarioBackgroundReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioBackgroundReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioBackgroundReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{171} + return file_main_proto_rawDescGZIP(), []int{179} } func (x *UpdateScenarioBackgroundReq) GetID() int32 { @@ -8928,7 +9347,7 @@ type UpdateScenarioBackgroundRsp struct { func (x *UpdateScenarioBackgroundRsp) Reset() { *x = UpdateScenarioBackgroundRsp{} - mi := &file_main_proto_msgTypes[172] + mi := &file_main_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8940,7 +9359,7 @@ func (x *UpdateScenarioBackgroundRsp) String() string { func (*UpdateScenarioBackgroundRsp) ProtoMessage() {} func (x *UpdateScenarioBackgroundRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[172] + mi := &file_main_proto_msgTypes[180] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8953,7 +9372,7 @@ func (x *UpdateScenarioBackgroundRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioBackgroundRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioBackgroundRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{172} + return file_main_proto_rawDescGZIP(), []int{180} } type IssueGameTicketsReq struct { @@ -8966,7 +9385,7 @@ type IssueGameTicketsReq struct { func (x *IssueGameTicketsReq) Reset() { *x = IssueGameTicketsReq{} - mi := &file_main_proto_msgTypes[173] + mi := &file_main_proto_msgTypes[181] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8978,7 +9397,7 @@ func (x *IssueGameTicketsReq) String() string { func (*IssueGameTicketsReq) ProtoMessage() {} func (x *IssueGameTicketsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[173] + mi := &file_main_proto_msgTypes[181] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8991,7 +9410,7 @@ func (x *IssueGameTicketsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueGameTicketsReq.ProtoReflect.Descriptor instead. func (*IssueGameTicketsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{173} + return file_main_proto_rawDescGZIP(), []int{181} } func (x *IssueGameTicketsReq) GetGameID() int32 { @@ -9017,7 +9436,7 @@ type IssueGameTicketsRsp struct { func (x *IssueGameTicketsRsp) Reset() { *x = IssueGameTicketsRsp{} - mi := &file_main_proto_msgTypes[174] + mi := &file_main_proto_msgTypes[182] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9029,7 +9448,7 @@ func (x *IssueGameTicketsRsp) String() string { func (*IssueGameTicketsRsp) ProtoMessage() {} func (x *IssueGameTicketsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[174] + mi := &file_main_proto_msgTypes[182] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9042,7 +9461,7 @@ func (x *IssueGameTicketsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueGameTicketsRsp.ProtoReflect.Descriptor instead. func (*IssueGameTicketsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{174} + return file_main_proto_rawDescGZIP(), []int{182} } func (x *IssueGameTicketsRsp) GetTickets() []*Ticket { @@ -9062,7 +9481,7 @@ type Ticket struct { func (x *Ticket) Reset() { *x = Ticket{} - mi := &file_main_proto_msgTypes[175] + mi := &file_main_proto_msgTypes[183] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9074,7 +9493,7 @@ func (x *Ticket) String() string { func (*Ticket) ProtoMessage() {} func (x *Ticket) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[175] + mi := &file_main_proto_msgTypes[183] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9087,7 +9506,7 @@ func (x *Ticket) ProtoReflect() protoreflect.Message { // Deprecated: Use Ticket.ProtoReflect.Descriptor instead. func (*Ticket) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{175} + return file_main_proto_rawDescGZIP(), []int{183} } func (x *Ticket) GetID() int32 { @@ -9113,7 +9532,7 @@ type GetTicketReq struct { func (x *GetTicketReq) Reset() { *x = GetTicketReq{} - mi := &file_main_proto_msgTypes[176] + mi := &file_main_proto_msgTypes[184] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9125,7 +9544,7 @@ func (x *GetTicketReq) String() string { func (*GetTicketReq) ProtoMessage() {} func (x *GetTicketReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[176] + mi := &file_main_proto_msgTypes[184] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9138,7 +9557,7 @@ func (x *GetTicketReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTicketReq.ProtoReflect.Descriptor instead. func (*GetTicketReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{176} + return file_main_proto_rawDescGZIP(), []int{184} } func (x *GetTicketReq) GetToken() string { @@ -9157,7 +9576,7 @@ type GetTicketRsp struct { func (x *GetTicketRsp) Reset() { *x = GetTicketRsp{} - mi := &file_main_proto_msgTypes[177] + mi := &file_main_proto_msgTypes[185] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9169,7 +9588,7 @@ func (x *GetTicketRsp) String() string { func (*GetTicketRsp) ProtoMessage() {} func (x *GetTicketRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[177] + mi := &file_main_proto_msgTypes[185] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9182,7 +9601,7 @@ func (x *GetTicketRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTicketRsp.ProtoReflect.Descriptor instead. func (*GetTicketRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{177} + return file_main_proto_rawDescGZIP(), []int{185} } func (x *GetTicketRsp) GetTicket() *TicketPage { @@ -9201,7 +9620,7 @@ type AcceptTicketReq struct { func (x *AcceptTicketReq) Reset() { *x = AcceptTicketReq{} - mi := &file_main_proto_msgTypes[178] + mi := &file_main_proto_msgTypes[186] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9213,7 +9632,7 @@ func (x *AcceptTicketReq) String() string { func (*AcceptTicketReq) ProtoMessage() {} func (x *AcceptTicketReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[178] + mi := &file_main_proto_msgTypes[186] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9226,7 +9645,7 @@ func (x *AcceptTicketReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptTicketReq.ProtoReflect.Descriptor instead. func (*AcceptTicketReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{178} + return file_main_proto_rawDescGZIP(), []int{186} } func (x *AcceptTicketReq) GetToken() string { @@ -9245,7 +9664,7 @@ type AcceptTicketRsp struct { func (x *AcceptTicketRsp) Reset() { *x = AcceptTicketRsp{} - mi := &file_main_proto_msgTypes[179] + mi := &file_main_proto_msgTypes[187] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9257,7 +9676,7 @@ func (x *AcceptTicketRsp) String() string { func (*AcceptTicketRsp) ProtoMessage() {} func (x *AcceptTicketRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[179] + mi := &file_main_proto_msgTypes[187] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9270,7 +9689,7 @@ func (x *AcceptTicketRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptTicketRsp.ProtoReflect.Descriptor instead. func (*AcceptTicketRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{179} + return file_main_proto_rawDescGZIP(), []int{187} } func (x *AcceptTicketRsp) GetTicket() *TicketPage { @@ -9296,7 +9715,7 @@ type TicketPage struct { func (x *TicketPage) Reset() { *x = TicketPage{} - mi := &file_main_proto_msgTypes[180] + mi := &file_main_proto_msgTypes[188] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9308,7 +9727,7 @@ func (x *TicketPage) String() string { func (*TicketPage) ProtoMessage() {} func (x *TicketPage) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[180] + mi := &file_main_proto_msgTypes[188] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9321,7 +9740,7 @@ func (x *TicketPage) ProtoReflect() protoreflect.Message { // Deprecated: Use TicketPage.ProtoReflect.Descriptor instead. func (*TicketPage) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{180} + return file_main_proto_rawDescGZIP(), []int{188} } func (x *TicketPage) GetID() int32 { @@ -9639,7 +10058,7 @@ const file_main_proto_rawDesc = "" + " \x01(\tR\x06format\x12\x1a\n" + "\blocation\x18\v \x01(\tR\blocationB\r\n" + "\v_started_atB\v\n" + - "\t_ended_at\"\x96\x06\n" + + "\t_ended_at\"\xaa\x06\n" + "\vScreenState\x12\x0e\n" + "\x02ID\x18\x01 \x01(\tR\x02ID\x12\x16\n" + "\x06status\x18\x02 \x01(\tR\x06status\x12\x1b\n" + @@ -9665,7 +10084,8 @@ const file_main_proto_rawDesc = "" + "\x16timer_duration_seconds\x18\x11 \x01(\x03R\x14timerDurationSeconds\x126\n" + "\x17timer_remaining_seconds\x18\x12 \x01(\x03R\x15timerRemainingSeconds\x12Q\n" + "\vtimer_state\x18\x13 \x01(\x0e20.crabs.evening_detective_server.ScreenTimerStateR\n" + - "timerStateB\t\n" + + "timerState\x12\x12\n" + + "\x04text\x18\x14 \x01(\tR\x04textB\t\n" + "\a_gameID\"\x18\n" + "\x16CreateScreenSessionReq\"W\n" + "\x16CreateScreenSessionRsp\x12\x1a\n" + @@ -9729,7 +10149,32 @@ const file_main_proto_rawDesc = "" + "\vposition_ms\x18\x03 \x01(\x03R\n" + "positionMs\x12\x16\n" + "\x06volume\x18\x04 \x01(\x05R\x06volume\"\x16\n" + - "\x14SendScreenCommandRsp\"S\n" + + "\x14SendScreenCommandRsp\"\xbb\x01\n" + + "\x0eScreenPlanStep\x12>\n" + + "\x04mode\x18\x01 \x01(\x0e2*.crabs.evening_detective_server.ScreenModeR\x04mode\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x12\x1f\n" + + "\vtimer_label\x18\x03 \x01(\tR\n" + + "timerLabel\x124\n" + + "\x16timer_duration_seconds\x18\x04 \x01(\x03R\x14timerDurationSeconds\"u\n" + + "\n" + + "ScreenPlan\x12D\n" + + "\x05steps\x18\x01 \x03(\v2..crabs.evening_detective_server.ScreenPlanStepR\x05steps\x12!\n" + + "\fcurrent_step\x18\x02 \x01(\x05R\vcurrentStep\"*\n" + + "\x10GetScreenPlanReq\x12\x16\n" + + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"R\n" + + "\x10GetScreenPlanRsp\x12>\n" + + "\x04plan\x18\x01 \x01(\v2*.crabs.evening_detective_server.ScreenPlanR\x04plan\"\x94\x01\n" + + "\x11SaveScreenPlanReq\x12\x16\n" + + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12D\n" + + "\x05steps\x18\x02 \x03(\v2..crabs.evening_detective_server.ScreenPlanStepR\x05steps\x12!\n" + + "\fcurrent_step\x18\x03 \x01(\x05R\vcurrentStep\"S\n" + + "\x11SaveScreenPlanRsp\x12>\n" + + "\x04plan\x18\x01 \x01(\v2*.crabs.evening_detective_server.ScreenPlanR\x04plan\"Q\n" + + "\x14SetScreenPlanStepReq\x12\x16\n" + + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12!\n" + + "\fcurrent_step\x18\x02 \x01(\x05R\vcurrentStep\"V\n" + + "\x14SetScreenPlanStepRsp\x12>\n" + + "\x04plan\x18\x01 \x01(\v2*.crabs.evening_detective_server.ScreenPlanR\x04plan\"S\n" + "\x13GetScreenResultsReq\x12\x1a\n" + "\bscreenID\x18\x01 \x01(\tR\bscreenID\x12 \n" + "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\"\xa6\x01\n" + @@ -9951,7 +10396,7 @@ const file_main_proto_rawDesc = "" + "\aused_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampH\x00R\x06usedAt\x88\x01\x01\x12\x17\n" + "\aused_by\x18\b \x01(\tR\x06usedByB\n" + "\n" + - "\b_used_at*\xe0\x01\n" + + "\b_used_at*\xf6\x01\n" + "\n" + "ScreenMode\x12\x1b\n" + "\x17SCREEN_MODE_UNSPECIFIED\x10\x00\x12\x15\n" + @@ -9961,7 +10406,8 @@ const file_main_proto_rawDesc = "" + "\x16SCREEN_MODE_CONCLUSION\x10\x04\x12\x1f\n" + "\x1bSCREEN_MODE_CONCLUSION_DONE\x10\x05\x12\x17\n" + "\x13SCREEN_MODE_RESULTS\x10\x06\x12\x15\n" + - "\x11SCREEN_MODE_TIMER\x10\a*\xb6\x01\n" + + "\x11SCREEN_MODE_TIMER\x10\a\x12\x14\n" + + "\x10SCREEN_MODE_TEXT\x10\b*\xb6\x01\n" + "\x10ScreenTimerState\x12\"\n" + "\x1eSCREEN_TIMER_STATE_UNSPECIFIED\x10\x00\x12\x1e\n" + "\x1aSCREEN_TIMER_STATE_STOPPED\x10\x01\x12\x1e\n" + @@ -9981,7 +10427,7 @@ const file_main_proto_rawDesc = "" + "\x1aSCREEN_COMMAND_TIMER_PAUSE\x10\t\x12\x1f\n" + "\x1bSCREEN_COMMAND_TIMER_RESUME\x10\n" + "\x12\x1e\n" + - "\x1aSCREEN_COMMAND_TIMER_RESET\x10\v2\x97\xa6\x01\n" + + "\x1aSCREEN_COMMAND_TIMER_RESET\x10\v2ͫ\x01\n" + "\x16EveningDetectiveServer\x12\xd3\x05\n" + "\x10GetParticipation\x123.crabs.evening_detective_server.GetParticipationReq\x1a0.crabs.evening_detective_server.ParticipationRsp\"\xd7\x04\x92A\xb2\x04\n" + ")Подтверждение участия\x122Получить состояние участия\x1a\xce\x03Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются стандартным gRPC status error.b\x00\x82\xd3\xe4\x93\x02\x1b:\x01*\"\x16/api/participation/get\x12\xf9\b\n" + @@ -10127,7 +10573,13 @@ const file_main_proto_rawDesc = "" + "\x0eSetScreenTimer\x121.crabs.evening_detective_server.SetScreenTimerReq\x1a1.crabs.evening_detective_server.SetScreenTimerRsp\"m\x92A>\n" + "\fЭкраны\x12.Настроить таймер экранов\x82\xd3\xe4\x93\x02&:\x01*\"!/api/games/{gameID}/screens/timer\x12\xf2\x01\n" + "\x11SendScreenCommand\x124.crabs.evening_detective_server.SendScreenCommandReq\x1a4.crabs.evening_detective_server.SendScreenCommandRsp\"q\x92A@\n" + - "\fЭкраны\x120Отправить команду экранам\x82\xd3\xe4\x93\x02(:\x01*\"#/api/games/{gameID}/screens/command\x12\xe9\x01\n" + + "\fЭкраны\x120Отправить команду экранам\x82\xd3\xe4\x93\x02(:\x01*\"#/api/games/{gameID}/screens/command\x12\xd7\x01\n" + + "\rGetScreenPlan\x120.crabs.evening_detective_server.GetScreenPlanReq\x1a0.crabs.evening_detective_server.GetScreenPlanRsp\"b\x92A8\n" + + "\fЭкраны\x12(Получить план экранов\x82\xd3\xe4\x93\x02!\x12\x1f/api/games/{gameID}/screen-plan\x12\xdf\x01\n" + + "\x0eSaveScreenPlan\x121.crabs.evening_detective_server.SaveScreenPlanReq\x1a1.crabs.evening_detective_server.SaveScreenPlanRsp\"g\x92A:\n" + + "\fЭкраны\x12*Сохранить план экранов\x82\xd3\xe4\x93\x02$:\x01*\x1a\x1f/api/games/{gameID}/screen-plan\x12\xf7\x01\n" + + "\x11SetScreenPlanStep\x124.crabs.evening_detective_server.SetScreenPlanStepReq\x1a4.crabs.evening_detective_server.SetScreenPlanStepRsp\"v\x92AD\n" + + "\fЭкраны\x124Перейти на шаг плана экранов\x82\xd3\xe4\x93\x02):\x01*\"$/api/games/{gameID}/screen-plan/step\x12\xe9\x01\n" + "\x10GetScreenResults\x123.crabs.evening_detective_server.GetScreenResultsReq\x1a3.crabs.evening_detective_server.GetScreenResultsRsp\"k\x92AI\n" + "\fЭкраны\x129Получить результаты для экрана\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/screens/results\x12\xcb\x01\n" + "\x0eDownloadTeamQR\x12*.crabs.evening_detective_server.GetGameReq\x1a\x14.google.api.HttpBody\"w\x92AP\n" + @@ -10223,7 +10675,7 @@ func file_main_proto_rawDescGZIP() []byte { } var file_main_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 181) +var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 189) var file_main_proto_goTypes = []any{ (ScreenMode)(0), // 0: crabs.evening_detective_server.ScreenMode (ScreenTimerState)(0), // 1: crabs.evening_detective_server.ScreenTimerState @@ -10341,80 +10793,88 @@ var file_main_proto_goTypes = []any{ (*SetScreenTimerRsp)(nil), // 113: crabs.evening_detective_server.SetScreenTimerRsp (*SendScreenCommandReq)(nil), // 114: crabs.evening_detective_server.SendScreenCommandReq (*SendScreenCommandRsp)(nil), // 115: crabs.evening_detective_server.SendScreenCommandRsp - (*GetScreenResultsReq)(nil), // 116: crabs.evening_detective_server.GetScreenResultsReq - (*GetScreenResultsRsp)(nil), // 117: crabs.evening_detective_server.GetScreenResultsRsp - (*GetParticipationReq)(nil), // 118: crabs.evening_detective_server.GetParticipationReq - (*AnswerParticipationReq)(nil), // 119: crabs.evening_detective_server.AnswerParticipationReq - (*ParticipationRsp)(nil), // 120: crabs.evening_detective_server.ParticipationRsp - (*Team)(nil), // 121: crabs.evening_detective_server.Team - (*GetGameReq)(nil), // 122: crabs.evening_detective_server.GetGameReq - (*GetGameRsp)(nil), // 123: crabs.evening_detective_server.GetGameRsp - (*GetGameAnswersReq)(nil), // 124: crabs.evening_detective_server.GetGameAnswersReq - (*GetGameAnswersRsp)(nil), // 125: crabs.evening_detective_server.GetGameAnswersRsp - (*GetGameResultsReq)(nil), // 126: crabs.evening_detective_server.GetGameResultsReq - (*ResultsQuestion)(nil), // 127: crabs.evening_detective_server.ResultsQuestion - (*TeamResult)(nil), // 128: crabs.evening_detective_server.TeamResult - (*GetGameResultsRsp)(nil), // 129: crabs.evening_detective_server.GetGameResultsRsp - (*GameReview)(nil), // 130: crabs.evening_detective_server.GameReview - (*CreateGameReviewReq)(nil), // 131: crabs.evening_detective_server.CreateGameReviewReq - (*CreateGameReviewRsp)(nil), // 132: crabs.evening_detective_server.CreateGameReviewRsp - (*GetGameReviewsReq)(nil), // 133: crabs.evening_detective_server.GetGameReviewsReq - (*GetScenarioReviewsReq)(nil), // 134: crabs.evening_detective_server.GetScenarioReviewsReq - (*GetReviewsForModerationReq)(nil), // 135: crabs.evening_detective_server.GetReviewsForModerationReq - (*GetGameReviewsRsp)(nil), // 136: crabs.evening_detective_server.GetGameReviewsRsp - (*ModerateGameReviewReq)(nil), // 137: crabs.evening_detective_server.ModerateGameReviewReq - (*ModerateGameReviewRsp)(nil), // 138: crabs.evening_detective_server.ModerateGameReviewRsp - (*UpdateGameReq)(nil), // 139: crabs.evening_detective_server.UpdateGameReq - (*UpdateGameRsp)(nil), // 140: crabs.evening_detective_server.UpdateGameRsp - (*StartGameReq)(nil), // 141: crabs.evening_detective_server.StartGameReq - (*StartGameRsp)(nil), // 142: crabs.evening_detective_server.StartGameRsp - (*PauseGameReq)(nil), // 143: crabs.evening_detective_server.PauseGameReq - (*PauseGameRsp)(nil), // 144: crabs.evening_detective_server.PauseGameRsp - (*PlayGameReq)(nil), // 145: crabs.evening_detective_server.PlayGameReq - (*PlayGameRsp)(nil), // 146: crabs.evening_detective_server.PlayGameRsp - (*FinishGameReq)(nil), // 147: crabs.evening_detective_server.FinishGameReq - (*FinishGameRsp)(nil), // 148: crabs.evening_detective_server.FinishGameRsp - (*ResetGameReq)(nil), // 149: crabs.evening_detective_server.ResetGameReq - (*ResetGameRsp)(nil), // 150: crabs.evening_detective_server.ResetGameRsp - (*DeleteGameReq)(nil), // 151: crabs.evening_detective_server.DeleteGameReq - (*DeleteGameRsp)(nil), // 152: crabs.evening_detective_server.DeleteGameRsp - (*AddTeamReq)(nil), // 153: crabs.evening_detective_server.AddTeamReq - (*AddTeamRsp)(nil), // 154: crabs.evening_detective_server.AddTeamRsp - (*UpdateTeamReq)(nil), // 155: crabs.evening_detective_server.UpdateTeamReq - (*UpdateTeamRsp)(nil), // 156: crabs.evening_detective_server.UpdateTeamRsp - (*DeleteTeamReq)(nil), // 157: crabs.evening_detective_server.DeleteTeamReq - (*DeleteTeamRsp)(nil), // 158: crabs.evening_detective_server.DeleteTeamRsp - (*GiveTeamApplicationsReq)(nil), // 159: crabs.evening_detective_server.GiveTeamApplicationsReq - (*GiveTeamApplicationsRsp)(nil), // 160: crabs.evening_detective_server.GiveTeamApplicationsRsp - (*GetTeamStoryReq)(nil), // 161: crabs.evening_detective_server.GetTeamStoryReq - (*GetTeamStoryRsp)(nil), // 162: crabs.evening_detective_server.GetTeamStoryRsp - (*TeamAction)(nil), // 163: crabs.evening_detective_server.TeamAction - (*AddTeamActionReq)(nil), // 164: crabs.evening_detective_server.AddTeamActionReq - (*AddTeamActionRsp)(nil), // 165: crabs.evening_detective_server.AddTeamActionRsp - (*DeleteLastTeamActionReq)(nil), // 166: crabs.evening_detective_server.DeleteLastTeamActionReq - (*DeleteLastTeamActionRsp)(nil), // 167: crabs.evening_detective_server.DeleteLastTeamActionRsp - (*GetTeamAnswersReq)(nil), // 168: crabs.evening_detective_server.GetTeamAnswersReq - (*GetTeamAnswersRsp)(nil), // 169: crabs.evening_detective_server.GetTeamAnswersRsp - (*SubmitTeamAnswersReq)(nil), // 170: crabs.evening_detective_server.SubmitTeamAnswersReq - (*SubmitTeamAnswersRsp)(nil), // 171: crabs.evening_detective_server.SubmitTeamAnswersRsp - (*SetTeamAnswerScoreReq)(nil), // 172: crabs.evening_detective_server.SetTeamAnswerScoreReq - (*SetTeamAnswerScoreRsp)(nil), // 173: crabs.evening_detective_server.SetTeamAnswerScoreRsp - (*UpdateScenarioBackgroundReq)(nil), // 174: crabs.evening_detective_server.UpdateScenarioBackgroundReq - (*UpdateScenarioBackgroundRsp)(nil), // 175: crabs.evening_detective_server.UpdateScenarioBackgroundRsp - (*IssueGameTicketsReq)(nil), // 176: crabs.evening_detective_server.IssueGameTicketsReq - (*IssueGameTicketsRsp)(nil), // 177: crabs.evening_detective_server.IssueGameTicketsRsp - (*Ticket)(nil), // 178: crabs.evening_detective_server.Ticket - (*GetTicketReq)(nil), // 179: crabs.evening_detective_server.GetTicketReq - (*GetTicketRsp)(nil), // 180: crabs.evening_detective_server.GetTicketRsp - (*AcceptTicketReq)(nil), // 181: crabs.evening_detective_server.AcceptTicketReq - (*AcceptTicketRsp)(nil), // 182: crabs.evening_detective_server.AcceptTicketRsp - (*TicketPage)(nil), // 183: crabs.evening_detective_server.TicketPage - (*timestamppb.Timestamp)(nil), // 184: google.protobuf.Timestamp - (*httpbody.HttpBody)(nil), // 185: google.api.HttpBody + (*ScreenPlanStep)(nil), // 116: crabs.evening_detective_server.ScreenPlanStep + (*ScreenPlan)(nil), // 117: crabs.evening_detective_server.ScreenPlan + (*GetScreenPlanReq)(nil), // 118: crabs.evening_detective_server.GetScreenPlanReq + (*GetScreenPlanRsp)(nil), // 119: crabs.evening_detective_server.GetScreenPlanRsp + (*SaveScreenPlanReq)(nil), // 120: crabs.evening_detective_server.SaveScreenPlanReq + (*SaveScreenPlanRsp)(nil), // 121: crabs.evening_detective_server.SaveScreenPlanRsp + (*SetScreenPlanStepReq)(nil), // 122: crabs.evening_detective_server.SetScreenPlanStepReq + (*SetScreenPlanStepRsp)(nil), // 123: crabs.evening_detective_server.SetScreenPlanStepRsp + (*GetScreenResultsReq)(nil), // 124: crabs.evening_detective_server.GetScreenResultsReq + (*GetScreenResultsRsp)(nil), // 125: crabs.evening_detective_server.GetScreenResultsRsp + (*GetParticipationReq)(nil), // 126: crabs.evening_detective_server.GetParticipationReq + (*AnswerParticipationReq)(nil), // 127: crabs.evening_detective_server.AnswerParticipationReq + (*ParticipationRsp)(nil), // 128: crabs.evening_detective_server.ParticipationRsp + (*Team)(nil), // 129: crabs.evening_detective_server.Team + (*GetGameReq)(nil), // 130: crabs.evening_detective_server.GetGameReq + (*GetGameRsp)(nil), // 131: crabs.evening_detective_server.GetGameRsp + (*GetGameAnswersReq)(nil), // 132: crabs.evening_detective_server.GetGameAnswersReq + (*GetGameAnswersRsp)(nil), // 133: crabs.evening_detective_server.GetGameAnswersRsp + (*GetGameResultsReq)(nil), // 134: crabs.evening_detective_server.GetGameResultsReq + (*ResultsQuestion)(nil), // 135: crabs.evening_detective_server.ResultsQuestion + (*TeamResult)(nil), // 136: crabs.evening_detective_server.TeamResult + (*GetGameResultsRsp)(nil), // 137: crabs.evening_detective_server.GetGameResultsRsp + (*GameReview)(nil), // 138: crabs.evening_detective_server.GameReview + (*CreateGameReviewReq)(nil), // 139: crabs.evening_detective_server.CreateGameReviewReq + (*CreateGameReviewRsp)(nil), // 140: crabs.evening_detective_server.CreateGameReviewRsp + (*GetGameReviewsReq)(nil), // 141: crabs.evening_detective_server.GetGameReviewsReq + (*GetScenarioReviewsReq)(nil), // 142: crabs.evening_detective_server.GetScenarioReviewsReq + (*GetReviewsForModerationReq)(nil), // 143: crabs.evening_detective_server.GetReviewsForModerationReq + (*GetGameReviewsRsp)(nil), // 144: crabs.evening_detective_server.GetGameReviewsRsp + (*ModerateGameReviewReq)(nil), // 145: crabs.evening_detective_server.ModerateGameReviewReq + (*ModerateGameReviewRsp)(nil), // 146: crabs.evening_detective_server.ModerateGameReviewRsp + (*UpdateGameReq)(nil), // 147: crabs.evening_detective_server.UpdateGameReq + (*UpdateGameRsp)(nil), // 148: crabs.evening_detective_server.UpdateGameRsp + (*StartGameReq)(nil), // 149: crabs.evening_detective_server.StartGameReq + (*StartGameRsp)(nil), // 150: crabs.evening_detective_server.StartGameRsp + (*PauseGameReq)(nil), // 151: crabs.evening_detective_server.PauseGameReq + (*PauseGameRsp)(nil), // 152: crabs.evening_detective_server.PauseGameRsp + (*PlayGameReq)(nil), // 153: crabs.evening_detective_server.PlayGameReq + (*PlayGameRsp)(nil), // 154: crabs.evening_detective_server.PlayGameRsp + (*FinishGameReq)(nil), // 155: crabs.evening_detective_server.FinishGameReq + (*FinishGameRsp)(nil), // 156: crabs.evening_detective_server.FinishGameRsp + (*ResetGameReq)(nil), // 157: crabs.evening_detective_server.ResetGameReq + (*ResetGameRsp)(nil), // 158: crabs.evening_detective_server.ResetGameRsp + (*DeleteGameReq)(nil), // 159: crabs.evening_detective_server.DeleteGameReq + (*DeleteGameRsp)(nil), // 160: crabs.evening_detective_server.DeleteGameRsp + (*AddTeamReq)(nil), // 161: crabs.evening_detective_server.AddTeamReq + (*AddTeamRsp)(nil), // 162: crabs.evening_detective_server.AddTeamRsp + (*UpdateTeamReq)(nil), // 163: crabs.evening_detective_server.UpdateTeamReq + (*UpdateTeamRsp)(nil), // 164: crabs.evening_detective_server.UpdateTeamRsp + (*DeleteTeamReq)(nil), // 165: crabs.evening_detective_server.DeleteTeamReq + (*DeleteTeamRsp)(nil), // 166: crabs.evening_detective_server.DeleteTeamRsp + (*GiveTeamApplicationsReq)(nil), // 167: crabs.evening_detective_server.GiveTeamApplicationsReq + (*GiveTeamApplicationsRsp)(nil), // 168: crabs.evening_detective_server.GiveTeamApplicationsRsp + (*GetTeamStoryReq)(nil), // 169: crabs.evening_detective_server.GetTeamStoryReq + (*GetTeamStoryRsp)(nil), // 170: crabs.evening_detective_server.GetTeamStoryRsp + (*TeamAction)(nil), // 171: crabs.evening_detective_server.TeamAction + (*AddTeamActionReq)(nil), // 172: crabs.evening_detective_server.AddTeamActionReq + (*AddTeamActionRsp)(nil), // 173: crabs.evening_detective_server.AddTeamActionRsp + (*DeleteLastTeamActionReq)(nil), // 174: crabs.evening_detective_server.DeleteLastTeamActionReq + (*DeleteLastTeamActionRsp)(nil), // 175: crabs.evening_detective_server.DeleteLastTeamActionRsp + (*GetTeamAnswersReq)(nil), // 176: crabs.evening_detective_server.GetTeamAnswersReq + (*GetTeamAnswersRsp)(nil), // 177: crabs.evening_detective_server.GetTeamAnswersRsp + (*SubmitTeamAnswersReq)(nil), // 178: crabs.evening_detective_server.SubmitTeamAnswersReq + (*SubmitTeamAnswersRsp)(nil), // 179: crabs.evening_detective_server.SubmitTeamAnswersRsp + (*SetTeamAnswerScoreReq)(nil), // 180: crabs.evening_detective_server.SetTeamAnswerScoreReq + (*SetTeamAnswerScoreRsp)(nil), // 181: crabs.evening_detective_server.SetTeamAnswerScoreRsp + (*UpdateScenarioBackgroundReq)(nil), // 182: crabs.evening_detective_server.UpdateScenarioBackgroundReq + (*UpdateScenarioBackgroundRsp)(nil), // 183: crabs.evening_detective_server.UpdateScenarioBackgroundRsp + (*IssueGameTicketsReq)(nil), // 184: crabs.evening_detective_server.IssueGameTicketsReq + (*IssueGameTicketsRsp)(nil), // 185: crabs.evening_detective_server.IssueGameTicketsRsp + (*Ticket)(nil), // 186: crabs.evening_detective_server.Ticket + (*GetTicketReq)(nil), // 187: crabs.evening_detective_server.GetTicketReq + (*GetTicketRsp)(nil), // 188: crabs.evening_detective_server.GetTicketRsp + (*AcceptTicketReq)(nil), // 189: crabs.evening_detective_server.AcceptTicketReq + (*AcceptTicketRsp)(nil), // 190: crabs.evening_detective_server.AcceptTicketRsp + (*TicketPage)(nil), // 191: crabs.evening_detective_server.TicketPage + (*timestamppb.Timestamp)(nil), // 192: google.protobuf.Timestamp + (*httpbody.HttpBody)(nil), // 193: google.api.HttpBody } var file_main_proto_depIdxs = []int32{ 25, // 0: crabs.evening_detective_server.GetUsersRsp.users:type_name -> crabs.evening_detective_server.User - 184, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp + 192, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp 25, // 2: crabs.evening_detective_server.GetUserByIDRsp.user:type_name -> crabs.evening_detective_server.User 25, // 3: crabs.evening_detective_server.GetMeRsp.user:type_name -> crabs.evening_detective_server.User 49, // 4: crabs.evening_detective_server.GetMyScenariosRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario @@ -10422,9 +10882,9 @@ var file_main_proto_depIdxs = []int32{ 49, // 6: crabs.evening_detective_server.GetScenarioRsp.scenario:type_name -> crabs.evening_detective_server.Scenario 50, // 7: crabs.evening_detective_server.Scenario.story:type_name -> crabs.evening_detective_server.Story 25, // 8: crabs.evening_detective_server.Scenario.author:type_name -> crabs.evening_detective_server.User - 184, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp - 184, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp - 184, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp + 192, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp + 192, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp + 192, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp 53, // 12: crabs.evening_detective_server.Story.places:type_name -> crabs.evening_detective_server.Place 52, // 13: crabs.evening_detective_server.Story.introduction:type_name -> crabs.evening_detective_server.Introduction 57, // 14: crabs.evening_detective_server.Story.questions:type_name -> crabs.evening_detective_server.Question @@ -10433,7 +10893,7 @@ var file_main_proto_depIdxs = []int32{ 55, // 17: crabs.evening_detective_server.Place.doors:type_name -> crabs.evening_detective_server.Door 56, // 18: crabs.evening_detective_server.Place.keys:type_name -> crabs.evening_detective_server.Key 56, // 19: crabs.evening_detective_server.Door.keys:type_name -> crabs.evening_detective_server.Key - 121, // 20: crabs.evening_detective_server.TeamAnswers.team:type_name -> crabs.evening_detective_server.Team + 129, // 20: crabs.evening_detective_server.TeamAnswers.team:type_name -> crabs.evening_detective_server.Team 59, // 21: crabs.evening_detective_server.TeamAnswers.answers:type_name -> crabs.evening_detective_server.AnswerScore 53, // 22: crabs.evening_detective_server.AddScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place 53, // 23: crabs.evening_detective_server.UpdateScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place @@ -10441,13 +10901,13 @@ var file_main_proto_depIdxs = []int32{ 52, // 25: crabs.evening_detective_server.UpdateScenarioIntroReq.introduction:type_name -> crabs.evening_detective_server.Introduction 57, // 26: crabs.evening_detective_server.AddScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question 57, // 27: crabs.evening_detective_server.UpdateScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question - 184, // 28: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp + 192, // 28: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp 91, // 29: crabs.evening_detective_server.GetGamesRsp.games:type_name -> crabs.evening_detective_server.Game - 184, // 30: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp + 192, // 30: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp 49, // 31: crabs.evening_detective_server.Game.scenario:type_name -> crabs.evening_detective_server.Scenario - 121, // 32: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team - 184, // 33: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp - 184, // 34: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp + 129, // 32: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team + 192, // 33: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp + 192, // 34: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp 0, // 35: crabs.evening_detective_server.ScreenState.mode:type_name -> crabs.evening_detective_server.ScreenMode 2, // 36: crabs.evening_detective_server.ScreenState.command:type_name -> crabs.evening_detective_server.ScreenCommand 1, // 37: crabs.evening_detective_server.ScreenState.timer_state:type_name -> crabs.evening_detective_server.ScreenTimerState @@ -10457,207 +10917,219 @@ var file_main_proto_depIdxs = []int32{ 105, // 41: crabs.evening_detective_server.GetGameMapRsp.items:type_name -> crabs.evening_detective_server.MapItem 0, // 42: crabs.evening_detective_server.SetScreenModeReq.mode:type_name -> crabs.evening_detective_server.ScreenMode 2, // 43: crabs.evening_detective_server.SendScreenCommandReq.command:type_name -> crabs.evening_detective_server.ScreenCommand - 127, // 44: crabs.evening_detective_server.GetScreenResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion - 128, // 45: crabs.evening_detective_server.GetScreenResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult - 184, // 46: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp - 54, // 47: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application - 91, // 48: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game - 57, // 49: crabs.evening_detective_server.GetGameAnswersRsp.questions:type_name -> crabs.evening_detective_server.Question - 60, // 50: crabs.evening_detective_server.GetGameAnswersRsp.teams:type_name -> crabs.evening_detective_server.TeamAnswers - 121, // 51: crabs.evening_detective_server.TeamResult.team:type_name -> crabs.evening_detective_server.Team - 59, // 52: crabs.evening_detective_server.TeamResult.answers:type_name -> crabs.evening_detective_server.AnswerScore - 127, // 53: crabs.evening_detective_server.GetGameResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion - 128, // 54: crabs.evening_detective_server.GetGameResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult - 184, // 55: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp - 130, // 56: crabs.evening_detective_server.CreateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview - 130, // 57: crabs.evening_detective_server.GetGameReviewsRsp.reviews:type_name -> crabs.evening_detective_server.GameReview - 130, // 58: crabs.evening_detective_server.ModerateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview - 184, // 59: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp - 50, // 60: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story - 91, // 61: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game - 163, // 62: crabs.evening_detective_server.GetTeamStoryRsp.actions:type_name -> crabs.evening_detective_server.TeamAction - 58, // 63: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer - 58, // 64: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer - 178, // 65: crabs.evening_detective_server.IssueGameTicketsRsp.tickets:type_name -> crabs.evening_detective_server.Ticket - 183, // 66: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage - 183, // 67: crabs.evening_detective_server.AcceptTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage - 184, // 68: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp - 184, // 69: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp - 118, // 70: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq - 119, // 71: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq - 3, // 72: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq - 5, // 73: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq - 7, // 74: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq - 9, // 75: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq - 11, // 76: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq - 13, // 77: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq - 15, // 78: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq - 17, // 79: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq - 19, // 80: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq - 21, // 81: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq - 23, // 82: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq - 26, // 83: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:input_type -> crabs.evening_detective_server.GetUserByIDReq - 28, // 84: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq - 30, // 85: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq - 32, // 86: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq - 34, // 87: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq - 36, // 88: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq - 38, // 89: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq - 40, // 90: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq - 41, // 91: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq - 43, // 92: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq - 45, // 93: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq - 47, // 94: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 47, // 95: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 61, // 96: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq - 63, // 97: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq - 65, // 98: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq - 67, // 99: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq - 69, // 100: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq - 71, // 101: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq - 73, // 102: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq - 79, // 103: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq - 81, // 104: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq - 83, // 105: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq - 174, // 106: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq - 77, // 107: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq - 75, // 108: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq - 85, // 109: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq - 185, // 110: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody - 87, // 111: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq - 89, // 112: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq - 122, // 113: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq - 176, // 114: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq - 179, // 115: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq - 181, // 116: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:input_type -> crabs.evening_detective_server.AcceptTicketReq - 93, // 117: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq - 95, // 118: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq - 97, // 119: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq - 99, // 120: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq - 101, // 121: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq - 103, // 122: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq - 106, // 123: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq - 108, // 124: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq - 110, // 125: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq - 112, // 126: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:input_type -> crabs.evening_detective_server.SetScreenTimerReq - 114, // 127: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq - 116, // 128: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq - 122, // 129: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq - 124, // 130: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq - 126, // 131: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq - 131, // 132: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq - 133, // 133: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq - 134, // 134: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq - 133, // 135: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq - 135, // 136: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq - 137, // 137: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq - 139, // 138: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq - 141, // 139: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq - 143, // 140: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq - 145, // 141: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq - 147, // 142: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq - 149, // 143: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq - 151, // 144: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq - 153, // 145: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq - 155, // 146: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq - 157, // 147: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq - 159, // 148: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq - 161, // 149: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq - 164, // 150: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq - 166, // 151: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq - 168, // 152: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq - 170, // 153: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq - 172, // 154: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq - 120, // 155: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp - 120, // 156: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp - 4, // 157: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp - 6, // 158: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp - 8, // 159: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp - 10, // 160: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp - 12, // 161: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp - 14, // 162: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp - 16, // 163: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp - 18, // 164: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp - 20, // 165: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp - 22, // 166: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp - 24, // 167: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp - 27, // 168: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:output_type -> crabs.evening_detective_server.GetUserByIDRsp - 29, // 169: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp - 31, // 170: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp - 33, // 171: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp - 35, // 172: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp - 37, // 173: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp - 39, // 174: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp - 185, // 175: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody - 42, // 176: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp - 44, // 177: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp - 46, // 178: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp - 48, // 179: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 48, // 180: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 62, // 181: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp - 64, // 182: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp - 66, // 183: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp - 68, // 184: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp - 70, // 185: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp - 72, // 186: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp - 74, // 187: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp - 80, // 188: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp - 82, // 189: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp - 84, // 190: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp - 175, // 191: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp - 78, // 192: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp - 76, // 193: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp - 185, // 194: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody - 86, // 195: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp - 88, // 196: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp - 90, // 197: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp - 123, // 198: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp - 177, // 199: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp - 180, // 200: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp - 182, // 201: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:output_type -> crabs.evening_detective_server.AcceptTicketRsp - 94, // 202: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp - 96, // 203: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp - 98, // 204: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp - 100, // 205: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp - 102, // 206: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp - 104, // 207: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp - 107, // 208: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp - 109, // 209: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp - 111, // 210: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp - 113, // 211: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:output_type -> crabs.evening_detective_server.SetScreenTimerRsp - 115, // 212: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp - 117, // 213: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp - 185, // 214: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody - 125, // 215: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp - 129, // 216: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp - 132, // 217: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp - 136, // 218: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 136, // 219: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 136, // 220: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 136, // 221: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 138, // 222: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp - 140, // 223: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp - 142, // 224: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp - 144, // 225: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp - 146, // 226: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp - 148, // 227: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp - 150, // 228: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp - 152, // 229: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp - 154, // 230: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp - 156, // 231: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp - 158, // 232: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp - 160, // 233: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp - 162, // 234: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp - 165, // 235: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp - 167, // 236: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp - 169, // 237: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp - 171, // 238: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp - 173, // 239: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp - 155, // [155:240] is the sub-list for method output_type - 70, // [70:155] is the sub-list for method input_type - 70, // [70:70] is the sub-list for extension type_name - 70, // [70:70] is the sub-list for extension extendee - 0, // [0:70] is the sub-list for field type_name + 0, // 44: crabs.evening_detective_server.ScreenPlanStep.mode:type_name -> crabs.evening_detective_server.ScreenMode + 116, // 45: crabs.evening_detective_server.ScreenPlan.steps:type_name -> crabs.evening_detective_server.ScreenPlanStep + 117, // 46: crabs.evening_detective_server.GetScreenPlanRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan + 116, // 47: crabs.evening_detective_server.SaveScreenPlanReq.steps:type_name -> crabs.evening_detective_server.ScreenPlanStep + 117, // 48: crabs.evening_detective_server.SaveScreenPlanRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan + 117, // 49: crabs.evening_detective_server.SetScreenPlanStepRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan + 135, // 50: crabs.evening_detective_server.GetScreenResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion + 136, // 51: crabs.evening_detective_server.GetScreenResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult + 192, // 52: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp + 54, // 53: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application + 91, // 54: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game + 57, // 55: crabs.evening_detective_server.GetGameAnswersRsp.questions:type_name -> crabs.evening_detective_server.Question + 60, // 56: crabs.evening_detective_server.GetGameAnswersRsp.teams:type_name -> crabs.evening_detective_server.TeamAnswers + 129, // 57: crabs.evening_detective_server.TeamResult.team:type_name -> crabs.evening_detective_server.Team + 59, // 58: crabs.evening_detective_server.TeamResult.answers:type_name -> crabs.evening_detective_server.AnswerScore + 135, // 59: crabs.evening_detective_server.GetGameResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion + 136, // 60: crabs.evening_detective_server.GetGameResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult + 192, // 61: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp + 138, // 62: crabs.evening_detective_server.CreateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview + 138, // 63: crabs.evening_detective_server.GetGameReviewsRsp.reviews:type_name -> crabs.evening_detective_server.GameReview + 138, // 64: crabs.evening_detective_server.ModerateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview + 192, // 65: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp + 50, // 66: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story + 91, // 67: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game + 171, // 68: crabs.evening_detective_server.GetTeamStoryRsp.actions:type_name -> crabs.evening_detective_server.TeamAction + 58, // 69: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer + 58, // 70: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer + 186, // 71: crabs.evening_detective_server.IssueGameTicketsRsp.tickets:type_name -> crabs.evening_detective_server.Ticket + 191, // 72: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage + 191, // 73: crabs.evening_detective_server.AcceptTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage + 192, // 74: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp + 192, // 75: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp + 126, // 76: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq + 127, // 77: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq + 3, // 78: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq + 5, // 79: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq + 7, // 80: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq + 9, // 81: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq + 11, // 82: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq + 13, // 83: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq + 15, // 84: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq + 17, // 85: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq + 19, // 86: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq + 21, // 87: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq + 23, // 88: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq + 26, // 89: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:input_type -> crabs.evening_detective_server.GetUserByIDReq + 28, // 90: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq + 30, // 91: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq + 32, // 92: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq + 34, // 93: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq + 36, // 94: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq + 38, // 95: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq + 40, // 96: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq + 41, // 97: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq + 43, // 98: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq + 45, // 99: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq + 47, // 100: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 47, // 101: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 61, // 102: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq + 63, // 103: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq + 65, // 104: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq + 67, // 105: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq + 69, // 106: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq + 71, // 107: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq + 73, // 108: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq + 79, // 109: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq + 81, // 110: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq + 83, // 111: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq + 182, // 112: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq + 77, // 113: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq + 75, // 114: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq + 85, // 115: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq + 193, // 116: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody + 87, // 117: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq + 89, // 118: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq + 130, // 119: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq + 184, // 120: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq + 187, // 121: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq + 189, // 122: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:input_type -> crabs.evening_detective_server.AcceptTicketReq + 93, // 123: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq + 95, // 124: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq + 97, // 125: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq + 99, // 126: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq + 101, // 127: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq + 103, // 128: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq + 106, // 129: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq + 108, // 130: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq + 110, // 131: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq + 112, // 132: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:input_type -> crabs.evening_detective_server.SetScreenTimerReq + 114, // 133: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq + 118, // 134: crabs.evening_detective_server.EveningDetectiveServer.GetScreenPlan:input_type -> crabs.evening_detective_server.GetScreenPlanReq + 120, // 135: crabs.evening_detective_server.EveningDetectiveServer.SaveScreenPlan:input_type -> crabs.evening_detective_server.SaveScreenPlanReq + 122, // 136: crabs.evening_detective_server.EveningDetectiveServer.SetScreenPlanStep:input_type -> crabs.evening_detective_server.SetScreenPlanStepReq + 124, // 137: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq + 130, // 138: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq + 132, // 139: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq + 134, // 140: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq + 139, // 141: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq + 141, // 142: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq + 142, // 143: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq + 141, // 144: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq + 143, // 145: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq + 145, // 146: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq + 147, // 147: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq + 149, // 148: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq + 151, // 149: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq + 153, // 150: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq + 155, // 151: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq + 157, // 152: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq + 159, // 153: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq + 161, // 154: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq + 163, // 155: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq + 165, // 156: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq + 167, // 157: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq + 169, // 158: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq + 172, // 159: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq + 174, // 160: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq + 176, // 161: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq + 178, // 162: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq + 180, // 163: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq + 128, // 164: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp + 128, // 165: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp + 4, // 166: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp + 6, // 167: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp + 8, // 168: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp + 10, // 169: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp + 12, // 170: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp + 14, // 171: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp + 16, // 172: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp + 18, // 173: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp + 20, // 174: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp + 22, // 175: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp + 24, // 176: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp + 27, // 177: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:output_type -> crabs.evening_detective_server.GetUserByIDRsp + 29, // 178: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp + 31, // 179: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp + 33, // 180: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp + 35, // 181: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp + 37, // 182: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp + 39, // 183: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp + 193, // 184: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody + 42, // 185: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp + 44, // 186: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp + 46, // 187: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp + 48, // 188: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 48, // 189: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 62, // 190: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp + 64, // 191: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp + 66, // 192: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp + 68, // 193: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp + 70, // 194: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp + 72, // 195: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp + 74, // 196: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp + 80, // 197: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp + 82, // 198: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp + 84, // 199: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp + 183, // 200: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp + 78, // 201: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp + 76, // 202: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp + 193, // 203: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody + 86, // 204: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp + 88, // 205: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp + 90, // 206: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp + 131, // 207: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp + 185, // 208: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp + 188, // 209: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp + 190, // 210: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:output_type -> crabs.evening_detective_server.AcceptTicketRsp + 94, // 211: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp + 96, // 212: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp + 98, // 213: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp + 100, // 214: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp + 102, // 215: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp + 104, // 216: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp + 107, // 217: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp + 109, // 218: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp + 111, // 219: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp + 113, // 220: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:output_type -> crabs.evening_detective_server.SetScreenTimerRsp + 115, // 221: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp + 119, // 222: crabs.evening_detective_server.EveningDetectiveServer.GetScreenPlan:output_type -> crabs.evening_detective_server.GetScreenPlanRsp + 121, // 223: crabs.evening_detective_server.EveningDetectiveServer.SaveScreenPlan:output_type -> crabs.evening_detective_server.SaveScreenPlanRsp + 123, // 224: crabs.evening_detective_server.EveningDetectiveServer.SetScreenPlanStep:output_type -> crabs.evening_detective_server.SetScreenPlanStepRsp + 125, // 225: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp + 193, // 226: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody + 133, // 227: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp + 137, // 228: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp + 140, // 229: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp + 144, // 230: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 144, // 231: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 144, // 232: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 144, // 233: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 146, // 234: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp + 148, // 235: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp + 150, // 236: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp + 152, // 237: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp + 154, // 238: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp + 156, // 239: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp + 158, // 240: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp + 160, // 241: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp + 162, // 242: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp + 164, // 243: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp + 166, // 244: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp + 168, // 245: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp + 170, // 246: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp + 173, // 247: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp + 175, // 248: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp + 177, // 249: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp + 179, // 250: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp + 181, // 251: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp + 164, // [164:252] is the sub-list for method output_type + 76, // [76:164] is the sub-list for method input_type + 76, // [76:76] is the sub-list for extension type_name + 76, // [76:76] is the sub-list for extension extendee + 0, // [0:76] is the sub-list for field type_name } func init() { file_main_proto_init() } @@ -10669,15 +11141,15 @@ func file_main_proto_init() { file_main_proto_msgTypes[56].OneofWrappers = []any{} file_main_proto_msgTypes[88].OneofWrappers = []any{} file_main_proto_msgTypes[89].OneofWrappers = []any{} - file_main_proto_msgTypes[169].OneofWrappers = []any{} - file_main_proto_msgTypes[180].OneofWrappers = []any{} + file_main_proto_msgTypes[177].OneofWrappers = []any{} + file_main_proto_msgTypes[188].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_main_proto_rawDesc), len(file_main_proto_rawDesc)), NumEnums: 3, - NumMessages: 181, + NumMessages: 189, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/main.pb.gw.go b/proto/main.pb.gw.go index cb88ccf..b974657 100644 --- a/proto/main.pb.gw.go +++ b/proto/main.pb.gw.go @@ -2180,6 +2180,135 @@ func local_request_EveningDetectiveServer_SendScreenCommand_0(ctx context.Contex return msg, metadata, err } +func request_EveningDetectiveServer_GetScreenPlan_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetScreenPlanReq + metadata runtime.ServerMetadata + err error + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["gameID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameID") + } + protoReq.GameID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameID", err) + } + msg, err := client.GetScreenPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_GetScreenPlan_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetScreenPlanReq + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["gameID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameID") + } + protoReq.GameID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameID", err) + } + msg, err := server.GetScreenPlan(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_SaveScreenPlan_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SaveScreenPlanReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["gameID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameID") + } + protoReq.GameID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameID", err) + } + msg, err := client.SaveScreenPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_SaveScreenPlan_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SaveScreenPlanReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["gameID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameID") + } + protoReq.GameID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameID", err) + } + msg, err := server.SaveScreenPlan(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_SetScreenPlanStep_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SetScreenPlanStepReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["gameID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameID") + } + protoReq.GameID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameID", err) + } + msg, err := client.SetScreenPlanStep(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_SetScreenPlanStep_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SetScreenPlanStepReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["gameID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameID") + } + protoReq.GameID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameID", err) + } + msg, err := server.SetScreenPlanStep(ctx, &protoReq) + return msg, metadata, err +} + func request_EveningDetectiveServer_GetScreenResults_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( protoReq GetScreenResultsReq @@ -4479,6 +4608,66 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti } forward_EveningDetectiveServer_SendScreenCommand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetScreenPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/GetScreenPlan", runtime.WithHTTPPathPattern("/api/games/{gameID}/screen-plan")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_GetScreenPlan_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_GetScreenPlan_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_SaveScreenPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SaveScreenPlan", runtime.WithHTTPPathPattern("/api/games/{gameID}/screen-plan")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_SaveScreenPlan_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SaveScreenPlan_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_SetScreenPlanStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SetScreenPlanStep", runtime.WithHTTPPathPattern("/api/games/{gameID}/screen-plan/step")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_SetScreenPlanStep_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SetScreenPlanStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_GetScreenResults_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6045,6 +6234,57 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti } forward_EveningDetectiveServer_SendScreenCommand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetScreenPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/GetScreenPlan", runtime.WithHTTPPathPattern("/api/games/{gameID}/screen-plan")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_GetScreenPlan_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_GetScreenPlan_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_SaveScreenPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SaveScreenPlan", runtime.WithHTTPPathPattern("/api/games/{gameID}/screen-plan")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_SaveScreenPlan_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SaveScreenPlan_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_SetScreenPlanStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SetScreenPlanStep", runtime.WithHTTPPathPattern("/api/games/{gameID}/screen-plan/step")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_SetScreenPlanStep_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SetScreenPlanStep_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_GetScreenResults_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6566,6 +6806,9 @@ var ( pattern_EveningDetectiveServer_SetScreenMode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"api", "games", "gameID", "screens", "mode"}, "")) pattern_EveningDetectiveServer_SetScreenTimer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"api", "games", "gameID", "screens", "timer"}, "")) pattern_EveningDetectiveServer_SendScreenCommand_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"api", "games", "gameID", "screens", "command"}, "")) + pattern_EveningDetectiveServer_GetScreenPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameID", "screen-plan"}, "")) + pattern_EveningDetectiveServer_SaveScreenPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameID", "screen-plan"}, "")) + pattern_EveningDetectiveServer_SetScreenPlanStep_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"api", "games", "gameID", "screen-plan", "step"}, "")) pattern_EveningDetectiveServer_GetScreenResults_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "screens", "results"}, "")) pattern_EveningDetectiveServer_DownloadTeamQR_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"api", "games", "ID", "teams", "qr.pdf"}, "")) pattern_EveningDetectiveServer_GetGameAnswers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameID", "answers"}, "")) @@ -6654,6 +6897,9 @@ var ( forward_EveningDetectiveServer_SetScreenMode_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_SetScreenTimer_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_SendScreenCommand_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_GetScreenPlan_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_SaveScreenPlan_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_SetScreenPlanStep_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetScreenResults_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_DownloadTeamQR_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetGameAnswers_0 = runtime.ForwardResponseMessage diff --git a/proto/main_grpc.pb.go b/proto/main_grpc.pb.go index d85cc39..577895a 100644 --- a/proto/main_grpc.pb.go +++ b/proto/main_grpc.pb.go @@ -84,6 +84,9 @@ const ( EveningDetectiveServer_SetScreenMode_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SetScreenMode" EveningDetectiveServer_SetScreenTimer_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SetScreenTimer" EveningDetectiveServer_SendScreenCommand_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SendScreenCommand" + EveningDetectiveServer_GetScreenPlan_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetScreenPlan" + EveningDetectiveServer_SaveScreenPlan_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SaveScreenPlan" + EveningDetectiveServer_SetScreenPlanStep_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SetScreenPlanStep" EveningDetectiveServer_GetScreenResults_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetScreenResults" EveningDetectiveServer_DownloadTeamQR_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/DownloadTeamQR" EveningDetectiveServer_GetGameAnswers_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGameAnswers" @@ -185,6 +188,9 @@ type EveningDetectiveServerClient interface { SetScreenTimer(ctx context.Context, in *SetScreenTimerReq, opts ...grpc.CallOption) (*SetScreenTimerRsp, error) // Отправить общую команду экранам игры. SendScreenCommand(ctx context.Context, in *SendScreenCommandReq, opts ...grpc.CallOption) (*SendScreenCommandRsp, error) + GetScreenPlan(ctx context.Context, in *GetScreenPlanReq, opts ...grpc.CallOption) (*GetScreenPlanRsp, error) + SaveScreenPlan(ctx context.Context, in *SaveScreenPlanReq, opts ...grpc.CallOption) (*SaveScreenPlanRsp, error) + SetScreenPlanStep(ctx context.Context, in *SetScreenPlanStepReq, opts ...grpc.CallOption) (*SetScreenPlanStepRsp, error) GetScreenResults(ctx context.Context, in *GetScreenResultsReq, opts ...grpc.CallOption) (*GetScreenResultsRsp, error) DownloadTeamQR(ctx context.Context, in *GetGameReq, opts ...grpc.CallOption) (*httpbody.HttpBody, error) GetGameAnswers(ctx context.Context, in *GetGameAnswersReq, opts ...grpc.CallOption) (*GetGameAnswersRsp, error) @@ -802,6 +808,36 @@ func (c *eveningDetectiveServerClient) SendScreenCommand(ctx context.Context, in return out, nil } +func (c *eveningDetectiveServerClient) GetScreenPlan(ctx context.Context, in *GetScreenPlanReq, opts ...grpc.CallOption) (*GetScreenPlanRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetScreenPlanRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_GetScreenPlan_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) SaveScreenPlan(ctx context.Context, in *SaveScreenPlanReq, opts ...grpc.CallOption) (*SaveScreenPlanRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SaveScreenPlanRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_SaveScreenPlan_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) SetScreenPlanStep(ctx context.Context, in *SetScreenPlanStepReq, opts ...grpc.CallOption) (*SetScreenPlanStepRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SetScreenPlanStepRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_SetScreenPlanStep_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *eveningDetectiveServerClient) GetScreenResults(ctx context.Context, in *GetScreenResultsReq, opts ...grpc.CallOption) (*GetScreenResultsRsp, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetScreenResultsRsp) @@ -1144,6 +1180,9 @@ type EveningDetectiveServerServer interface { SetScreenTimer(context.Context, *SetScreenTimerReq) (*SetScreenTimerRsp, error) // Отправить общую команду экранам игры. SendScreenCommand(context.Context, *SendScreenCommandReq) (*SendScreenCommandRsp, error) + GetScreenPlan(context.Context, *GetScreenPlanReq) (*GetScreenPlanRsp, error) + SaveScreenPlan(context.Context, *SaveScreenPlanReq) (*SaveScreenPlanRsp, error) + SetScreenPlanStep(context.Context, *SetScreenPlanStepReq) (*SetScreenPlanStepRsp, error) GetScreenResults(context.Context, *GetScreenResultsReq) (*GetScreenResultsRsp, error) DownloadTeamQR(context.Context, *GetGameReq) (*httpbody.HttpBody, error) GetGameAnswers(context.Context, *GetGameAnswersReq) (*GetGameAnswersRsp, error) @@ -1355,6 +1394,15 @@ func (UnimplementedEveningDetectiveServerServer) SetScreenTimer(context.Context, func (UnimplementedEveningDetectiveServerServer) SendScreenCommand(context.Context, *SendScreenCommandReq) (*SendScreenCommandRsp, error) { return nil, status.Error(codes.Unimplemented, "method SendScreenCommand not implemented") } +func (UnimplementedEveningDetectiveServerServer) GetScreenPlan(context.Context, *GetScreenPlanReq) (*GetScreenPlanRsp, error) { + return nil, status.Error(codes.Unimplemented, "method GetScreenPlan not implemented") +} +func (UnimplementedEveningDetectiveServerServer) SaveScreenPlan(context.Context, *SaveScreenPlanReq) (*SaveScreenPlanRsp, error) { + return nil, status.Error(codes.Unimplemented, "method SaveScreenPlan not implemented") +} +func (UnimplementedEveningDetectiveServerServer) SetScreenPlanStep(context.Context, *SetScreenPlanStepReq) (*SetScreenPlanStepRsp, error) { + return nil, status.Error(codes.Unimplemented, "method SetScreenPlanStep not implemented") +} func (UnimplementedEveningDetectiveServerServer) GetScreenResults(context.Context, *GetScreenResultsReq) (*GetScreenResultsRsp, error) { return nil, status.Error(codes.Unimplemented, "method GetScreenResults not implemented") } @@ -2502,6 +2550,60 @@ func _EveningDetectiveServer_SendScreenCommand_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } +func _EveningDetectiveServer_GetScreenPlan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetScreenPlanReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).GetScreenPlan(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_GetScreenPlan_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).GetScreenPlan(ctx, req.(*GetScreenPlanReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_SaveScreenPlan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SaveScreenPlanReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).SaveScreenPlan(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_SaveScreenPlan_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).SaveScreenPlan(ctx, req.(*SaveScreenPlanReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_SetScreenPlanStep_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetScreenPlanStepReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).SetScreenPlanStep(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_SetScreenPlanStep_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).SetScreenPlanStep(ctx, req.(*SetScreenPlanStepReq)) + } + return interceptor(ctx, in, info, handler) +} + func _EveningDetectiveServer_GetScreenResults_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetScreenResultsReq) if err := dec(in); err != nil { @@ -3227,6 +3329,18 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "SendScreenCommand", Handler: _EveningDetectiveServer_SendScreenCommand_Handler, }, + { + MethodName: "GetScreenPlan", + Handler: _EveningDetectiveServer_GetScreenPlan_Handler, + }, + { + MethodName: "SaveScreenPlan", + Handler: _EveningDetectiveServer_SaveScreenPlan_Handler, + }, + { + MethodName: "SetScreenPlanStep", + Handler: _EveningDetectiveServer_SetScreenPlanStep_Handler, + }, { MethodName: "GetScreenResults", Handler: _EveningDetectiveServer_GetScreenResults_Handler,