add accept

This commit is contained in:
2026-09-18 17:46:35 +07:00
parent ca7659f732
commit f07038f43a
10 changed files with 699 additions and 207 deletions
+27 -6
View File
@@ -523,8 +523,8 @@ service EveningDetectiveServer {
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
security: { security_requirement: {} }
tags: "Билеты";
summary: "Выпустить билеты на игру";
tags : "Билеты";
summary : "Выпустить билеты на игру";
};
}
@@ -534,8 +534,19 @@ service EveningDetectiveServer {
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
security: { security_requirement: {} }
tags: "Билеты";
summary: "Получить данные билета";
tags : "Билеты";
summary : "Получить данные билета";
};
}
rpc AcceptTicket(AcceptTicketReq) returns (AcceptTicketRsp) {
option (google.api.http) = {
post: "/api/tickets/{token}/accept"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
tags : "Билеты";
summary: "Принять билет";
};
}
@@ -724,8 +735,8 @@ service EveningDetectiveServer {
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
security: { security_requirement: {} }
tags: "Отзывы"
summary: "Получить отзывы сценария"
tags : "Отзывы"
summary : "Получить отзывы сценария"
};
}
@@ -1912,6 +1923,15 @@ message GetTicketRsp {
TicketPage ticket = 2;
}
message AcceptTicketReq {
string token = 1;
}
message AcceptTicketRsp {
string error = 1;
TicketPage ticket = 2;
}
message TicketPage {
int32 id = 1;
string game_name = 2;
@@ -1920,4 +1940,5 @@ message TicketPage {
string status = 5;
string game_status = 6;
optional google.protobuf.Timestamp used_at = 7;
string used_by = 8;
}
Binary file not shown.
@@ -2741,6 +2741,45 @@
]
}
},
"/api/tickets/{token}/accept": {
"post": {
"summary": "Принять билет",
"operationId": "EveningDetectiveServer_AcceptTicket",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAcceptTicketRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "token",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerAcceptTicketBody"
}
}
],
"tags": [
"Билеты"
]
}
},
"/api/ui/permissions": {
"get": {
"summary": "Получить список доступных элементов интерфейса",
@@ -2965,6 +3004,9 @@
}
},
"definitions": {
"EveningDetectiveServerAcceptTicketBody": {
"type": "object"
},
"EveningDetectiveServerAddScenarioPlaceBody": {
"type": "object",
"properties": {
@@ -3279,6 +3321,17 @@
},
"description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged."
},
"evening_detective_serverAcceptTicketRsp": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"ticket": {
"$ref": "#/definitions/evening_detective_serverTicketPage"
}
}
},
"evening_detective_serverAddGameReq": {
"type": "object",
"properties": {
@@ -4725,6 +4778,9 @@
"usedAt": {
"type": "string",
"format": "date-time"
},
"usedBy": {
"type": "string"
}
}
},
+28
View File
@@ -31,6 +31,9 @@ func (s *server) GetTicket(ctx context.Context, req *proto.GetTicketReq) (*proto
Status: page.Status,
GameStatus: page.GameStatus,
}
if page.UsedBy != nil {
result.UsedBy = *page.UsedBy
}
if page.Location != nil {
result.Location = *page.Location
}
@@ -40,6 +43,31 @@ func (s *server) GetTicket(ctx context.Context, req *proto.GetTicketReq) (*proto
return &proto.GetTicketRsp{Ticket: result}, nil
}
func (s *server) AcceptTicket(ctx context.Context, req *proto.AcceptTicketReq) (*proto.AcceptTicketRsp, error) {
claims, ok := ctx.Value("claims").(*processor_jwt.JWTClaims)
if !ok || claims == nil || (!roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author)) {
return nil, status.Error(codes.PermissionDenied, "permission denied")
}
if req == nil {
return &proto.AcceptTicketRsp{Error: ticket_service.ErrTicketNotFound.Error()}, nil
}
page, err := s.ticketService.Accept(ctx, req.Token, claims.UserID)
if err != nil {
return &proto.AcceptTicketRsp{Error: err.Error()}, nil
}
result := &proto.TicketPage{Id: int32(page.ID), GameName: page.GameName, StartAt: timestamppb.New(page.StartAt), Status: page.Status, GameStatus: page.GameStatus}
if page.Location != nil {
result.Location = *page.Location
}
if page.UsedAt != nil {
result.UsedAt = timestamppb.New(*page.UsedAt)
}
if page.UsedBy != nil {
result.UsedBy = *page.UsedBy
}
return &proto.AcceptTicketRsp{Ticket: result}, nil
}
func (s *server) IssueGameTickets(ctx context.Context, req *proto.IssueGameTicketsReq) (*proto.IssueGameTicketsRsp, error) {
claims, ok := ctx.Value("claims").(*processor_jwt.JWTClaims)
if !ok || claims == nil {
@@ -0,0 +1,93 @@
package tickets_repo
import (
"context"
"crypto/sha256"
"errors"
"fmt"
"os"
"testing"
"time"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
)
func TestAcceptIsAtomic(t *testing.T) {
dsn := os.Getenv("TEST_DATABASE_URL")
if dsn == "" {
t.Skip("set TEST_DATABASE_URL to run PostgreSQL integration check")
}
ctx := context.Background()
admin, err := pgxpool.New(ctx, dsn)
if err != nil {
t.Fatal(err)
}
defer admin.Close()
schema := fmt.Sprintf("tickets_test_%d", time.Now().UnixNano())
quoted := pgx.Identifier{schema}.Sanitize()
if _, err := admin.Exec(ctx, "CREATE SCHEMA "+quoted); err != nil {
t.Fatal(err)
}
defer func() { _, _ = admin.Exec(ctx, "DROP SCHEMA "+quoted+" CASCADE") }()
config, err := pgxpool.ParseConfig(dsn)
if err != nil {
t.Fatal(err)
}
config.ConnConfig.RuntimeParams["search_path"] = schema
pool, err := pgxpool.NewWithConfig(ctx, config)
if err != nil {
t.Fatal(err)
}
defer pool.Close()
hash := sha256.Sum256([]byte("token"))
_, err = pool.Exec(ctx, `
CREATE TABLE users (id SERIAL PRIMARY KEY, username TEXT NOT NULL);
CREATE TABLE scenarios (id SERIAL PRIMARY KEY, name TEXT NOT NULL);
CREATE TABLE games (id SERIAL PRIMARY KEY, scenario_id INTEGER NOT NULL, status TEXT NOT NULL, start_at TIMESTAMP NOT NULL, location TEXT);
CREATE TABLE tickets (id SERIAL PRIMARY KEY, game_id INTEGER NOT NULL, token_hash BYTEA NOT NULL UNIQUE, status TEXT NOT NULL DEFAULT 'active', used_at TIMESTAMPTZ, used_by INTEGER)`)
if err != nil {
t.Fatal(err)
}
_, err = pool.Exec(ctx, `INSERT INTO users (username) VALUES ('organizer'), ('other')`)
if err != nil {
t.Fatal(err)
}
_, err = pool.Exec(ctx, `INSERT INTO scenarios (name) VALUES ('Сценарий')`)
if err != nil {
t.Fatal(err)
}
_, err = pool.Exec(ctx, `INSERT INTO games (scenario_id, status, start_at) VALUES (1, 'run', NOW())`)
if err != nil {
t.Fatal(err)
}
_, err = pool.Exec(ctx, `INSERT INTO tickets (game_id, token_hash) VALUES (1, $1)`, hash[:])
if err != nil {
t.Fatal(err)
}
repo := New(pool)
results := make(chan error, 8)
for i := 0; i < 8; i++ {
go func(userID int) {
_, err := repo.Accept(ctx, hash[:], userID)
results <- err
}(i%2 + 1)
}
successes := 0
for range 8 {
if err := <-results; err == nil {
successes++
} else if !errors.Is(err, ErrTicketUsed) {
t.Fatalf("unexpected accept error: %v", err)
}
}
if successes != 1 {
t.Fatalf("successful accepts = %d, want 1", successes)
}
var status string
if err := pool.QueryRow(ctx, "SELECT status FROM tickets WHERE id=1").Scan(&status); err != nil || status != "used" {
t.Fatalf("ticket status = %q, err = %v", status, err)
}
}
+42 -3
View File
@@ -9,7 +9,11 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
)
var ErrTicketNotFound = errors.New("Билет не найден")
var (
ErrTicketNotFound = errors.New("Билет не найден")
ErrTicketUsed = errors.New("Билет уже использован")
ErrGameFinished = errors.New("Игра уже завершена")
)
type Info struct {
ID int
@@ -19,6 +23,7 @@ type Info struct {
Location *string
GameStatus string
UsedAt *time.Time
UsedBy *string
}
type Repo struct {
@@ -56,14 +61,48 @@ func (r *Repo) CreateBatch(ctx context.Context, gameID int, tokenHashes [][]byte
func (r *Repo) GetByHash(ctx context.Context, tokenHash []byte) (*Info, error) {
info := &Info{}
err := r.pool.QueryRow(ctx, `
SELECT t.id, t.status, s.name, g.start_at, g.location, g.status, t.used_at
SELECT t.id, t.status, s.name, g.start_at, g.location, g.status, t.used_at, u.username
FROM tickets t
JOIN games g ON g.id = t.game_id
JOIN scenarios s ON s.id = g.scenario_id
LEFT JOIN users u ON u.id = t.used_by
WHERE t.token_hash = $1`, tokenHash).Scan(
&info.ID, &info.Status, &info.GameName, &info.StartAt, &info.Location, &info.GameStatus, &info.UsedAt)
&info.ID, &info.Status, &info.GameName, &info.StartAt, &info.Location, &info.GameStatus, &info.UsedAt, &info.UsedBy)
if errors.Is(err, pgx.ErrNoRows) {
return nil, ErrTicketNotFound
}
return info, err
}
func (r *Repo) Accept(ctx context.Context, tokenHash []byte, userID int) (*Info, error) {
var status, gameStatus string
if err := r.pool.QueryRow(ctx, `
SELECT t.status, g.status
FROM tickets t JOIN games g ON g.id = t.game_id
WHERE t.token_hash = $1`, tokenHash).Scan(&status, &gameStatus); errors.Is(err, pgx.ErrNoRows) {
return nil, ErrTicketNotFound
} else if err != nil {
return nil, err
}
if status == "used" {
return nil, ErrTicketUsed
}
if gameStatus == "finish" {
return nil, ErrGameFinished
}
tag, err := r.pool.Exec(ctx, `
UPDATE tickets t SET status = 'used', used_at = NOW(), used_by = $2
FROM games g
WHERE t.game_id = g.id AND t.token_hash = $1 AND t.status = 'active' AND g.status <> 'finish'`, tokenHash, userID)
if err != nil {
return nil, err
}
if tag.RowsAffected() == 0 {
if status == "used" {
return nil, ErrTicketUsed
}
return nil, ErrGameFinished
}
return r.GetByHash(ctx, tokenHash)
}
@@ -20,6 +20,8 @@ var (
ErrInvalidTicketCount = errors.New("количество билетов должно быть от 1 до 100")
ErrInvalidBaseURL = errors.New("необходимо настроить APP_BASE_URL — публичный адрес приложения")
ErrTicketNotFound = tickets_repo.ErrTicketNotFound
ErrTicketUsed = tickets_repo.ErrTicketUsed
ErrGameFinished = tickets_repo.ErrGameFinished
)
type Ticket struct {
@@ -35,6 +37,7 @@ type Page struct {
Location *string
GameStatus string
UsedAt *time.Time
UsedBy *string
}
type Service struct {
@@ -100,9 +103,22 @@ func (s *Service) Get(ctx context.Context, token string) (*Page, error) {
Location: info.Location,
GameStatus: info.GameStatus,
UsedAt: info.UsedAt,
UsedBy: info.UsedBy,
}, nil
}
func (s *Service) Accept(ctx context.Context, token string, userID int) (*Page, error) {
hash, err := tokenHash(token)
if err != nil {
return nil, ErrTicketNotFound
}
info, err := s.repo.Accept(ctx, hash, userID)
if err != nil {
return nil, err
}
return &Page{ID: info.ID, Status: info.Status, GameName: info.GameName, StartAt: info.StartAt, Location: info.Location, GameStatus: info.GameStatus, UsedAt: info.UsedAt, UsedBy: info.UsedBy}, nil
}
func newToken() (string, error) {
data := make([]byte, 32)
if _, err := rand.Read(data); err != nil {
+315 -198
View File
@@ -9533,6 +9533,102 @@ func (x *GetTicketRsp) GetTicket() *TicketPage {
return nil
}
type AcceptTicketReq struct {
state protoimpl.MessageState `protogen:"open.v1"`
Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AcceptTicketReq) Reset() {
*x = AcceptTicketReq{}
mi := &file_main_proto_msgTypes[176]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AcceptTicketReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AcceptTicketReq) ProtoMessage() {}
func (x *AcceptTicketReq) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[176]
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 AcceptTicketReq.ProtoReflect.Descriptor instead.
func (*AcceptTicketReq) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{176}
}
func (x *AcceptTicketReq) GetToken() string {
if x != nil {
return x.Token
}
return ""
}
type AcceptTicketRsp struct {
state protoimpl.MessageState `protogen:"open.v1"`
Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
Ticket *TicketPage `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AcceptTicketRsp) Reset() {
*x = AcceptTicketRsp{}
mi := &file_main_proto_msgTypes[177]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AcceptTicketRsp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AcceptTicketRsp) ProtoMessage() {}
func (x *AcceptTicketRsp) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[177]
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 AcceptTicketRsp.ProtoReflect.Descriptor instead.
func (*AcceptTicketRsp) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{177}
}
func (x *AcceptTicketRsp) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *AcceptTicketRsp) GetTicket() *TicketPage {
if x != nil {
return x.Ticket
}
return nil
}
type TicketPage struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
@@ -9542,13 +9638,14 @@ type TicketPage struct {
Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
GameStatus string `protobuf:"bytes,6,opt,name=game_status,json=gameStatus,proto3" json:"game_status,omitempty"`
UsedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=used_at,json=usedAt,proto3,oneof" json:"used_at,omitempty"`
UsedBy string `protobuf:"bytes,8,opt,name=used_by,json=usedBy,proto3" json:"used_by,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *TicketPage) Reset() {
*x = TicketPage{}
mi := &file_main_proto_msgTypes[176]
mi := &file_main_proto_msgTypes[178]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -9560,7 +9657,7 @@ func (x *TicketPage) String() string {
func (*TicketPage) ProtoMessage() {}
func (x *TicketPage) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[176]
mi := &file_main_proto_msgTypes[178]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -9573,7 +9670,7 @@ func (x *TicketPage) ProtoReflect() protoreflect.Message {
// Deprecated: Use TicketPage.ProtoReflect.Descriptor instead.
func (*TicketPage) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{176}
return file_main_proto_rawDescGZIP(), []int{178}
}
func (x *TicketPage) GetId() int32 {
@@ -9625,6 +9722,13 @@ func (x *TicketPage) GetUsedAt() *timestamppb.Timestamp {
return nil
}
func (x *TicketPage) GetUsedBy() string {
if x != nil {
return x.UsedBy
}
return ""
}
var File_main_proto protoreflect.FileDescriptor
const file_main_proto_rawDesc = "" +
@@ -10228,7 +10332,12 @@ const file_main_proto_rawDesc = "" +
"\x05token\x18\x01 \x01(\tR\x05token\"h\n" +
"\fGetTicketRsp\x12\x14\n" +
"\x05error\x18\x01 \x01(\tR\x05error\x12B\n" +
"\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"\x8b\x02\n" +
"\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"'\n" +
"\x0fAcceptTicketReq\x12\x14\n" +
"\x05token\x18\x01 \x01(\tR\x05token\"k\n" +
"\x0fAcceptTicketRsp\x12\x14\n" +
"\x05error\x18\x01 \x01(\tR\x05error\x12B\n" +
"\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"\xa4\x02\n" +
"\n" +
"TicketPage\x12\x0e\n" +
"\x02id\x18\x01 \x01(\x05R\x02id\x12\x1b\n" +
@@ -10238,7 +10347,8 @@ const file_main_proto_rawDesc = "" +
"\x06status\x18\x05 \x01(\tR\x06status\x12\x1f\n" +
"\vgame_status\x18\x06 \x01(\tR\n" +
"gameStatus\x128\n" +
"\aused_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampH\x00R\x06usedAt\x88\x01\x01B\n" +
"\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*\xc9\x01\n" +
"\n" +
@@ -10258,7 +10368,7 @@ const file_main_proto_rawDesc = "" +
"\x13SCREEN_COMMAND_STOP\x10\x04\x12\x19\n" +
"\x15SCREEN_COMMAND_REPLAY\x10\x05\x12\x17\n" +
"\x13SCREEN_COMMAND_SEEK\x10\x06\x12\x19\n" +
"\x15SCREEN_COMMAND_VOLUME\x10\a2ڢ\x01\n" +
"\x15SCREEN_COMMAND_VOLUME\x10\a2\xa1\xa4\x01\n" +
"\x16EveningDetectiveServer\x12\xcc\x05\n" +
"\x10GetParticipation\x123.crabs.evening_detective_server.GetParticipationReq\x1a0.crabs.evening_detective_server.ParticipationRsp\"\xd0\x04\x92A\xab\x04\n" +
")Подтверждение участия\x122Получить состояние участия\x1a\xc7\x03Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются в поле error при HTTP 200.b\x00\x82\xd3\xe4\x93\x02\x1b:\x01*\"\x16/api/participation/get\x12\xf2\b\n" +
@@ -10374,7 +10484,9 @@ const file_main_proto_rawDesc = "" +
"\tGetTicket\x12,.crabs.evening_detective_server.GetTicketReq\x1a,.crabs.evening_detective_server.GetTicketRsp\"a\x92AB\n" +
"\fБилеты\x12*Получить данные билетаb\x06\n" +
"\x04\n" +
"\x00\x12\x00\x82\xd3\xe4\x93\x02\x16\x12\x14/api/tickets/{token}\x12\xe1\x01\n" +
"\x00\x12\x00\x82\xd3\xe4\x93\x02\x16\x12\x14/api/tickets/{token}\x12\xc4\x01\n" +
"\fAcceptTicket\x12/.crabs.evening_detective_server.AcceptTicketReq\x1a/.crabs.evening_detective_server.AcceptTicketRsp\"R\x92A)\n" +
"\fБилеты\x12\x19Принять билет\x82\xd3\xe4\x93\x02 :\x01*\"\x1b/api/tickets/{token}/accept\x12\xe1\x01\n" +
"\x13CreateScreenSession\x126.crabs.evening_detective_server.CreateScreenSessionReq\x1a6.crabs.evening_detective_server.CreateScreenSessionRsp\"Z\x92A@\n" +
"\fЭкраны\x12(Создать сессию экранаb\x06\n" +
"\x04\n" +
@@ -10496,7 +10608,7 @@ func file_main_proto_rawDescGZIP() []byte {
}
var file_main_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 177)
var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 179)
var file_main_proto_goTypes = []any{
(ScreenMode)(0), // 0: crabs.evening_detective_server.ScreenMode
(ScreenCommand)(0), // 1: crabs.evening_detective_server.ScreenCommand
@@ -10676,13 +10788,15 @@ var file_main_proto_goTypes = []any{
(*Ticket)(nil), // 175: crabs.evening_detective_server.Ticket
(*GetTicketReq)(nil), // 176: crabs.evening_detective_server.GetTicketReq
(*GetTicketRsp)(nil), // 177: crabs.evening_detective_server.GetTicketRsp
(*TicketPage)(nil), // 178: crabs.evening_detective_server.TicketPage
(*timestamppb.Timestamp)(nil), // 179: google.protobuf.Timestamp
(*httpbody.HttpBody)(nil), // 180: google.api.HttpBody
(*AcceptTicketReq)(nil), // 178: crabs.evening_detective_server.AcceptTicketReq
(*AcceptTicketRsp)(nil), // 179: crabs.evening_detective_server.AcceptTicketRsp
(*TicketPage)(nil), // 180: crabs.evening_detective_server.TicketPage
(*timestamppb.Timestamp)(nil), // 181: google.protobuf.Timestamp
(*httpbody.HttpBody)(nil), // 182: google.api.HttpBody
}
var file_main_proto_depIdxs = []int32{
24, // 0: crabs.evening_detective_server.GetUsersRsp.users:type_name -> crabs.evening_detective_server.User
179, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp
181, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp
24, // 2: crabs.evening_detective_server.GetUserByIdRsp.user:type_name -> crabs.evening_detective_server.User
24, // 3: crabs.evening_detective_server.GetMeRsp.user:type_name -> crabs.evening_detective_server.User
48, // 4: crabs.evening_detective_server.GetMyScenariosRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario
@@ -10690,9 +10804,9 @@ var file_main_proto_depIdxs = []int32{
48, // 6: crabs.evening_detective_server.GetScenarioRsp.scenario:type_name -> crabs.evening_detective_server.Scenario
49, // 7: crabs.evening_detective_server.Scenario.story:type_name -> crabs.evening_detective_server.Story
24, // 8: crabs.evening_detective_server.Scenario.author:type_name -> crabs.evening_detective_server.User
179, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp
179, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp
179, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp
181, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp
181, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp
181, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp
50, // 12: crabs.evening_detective_server.Story.conclusion:type_name -> crabs.evening_detective_server.Conclusion
51, // 13: crabs.evening_detective_server.Story.introduction:type_name -> crabs.evening_detective_server.Introduction
52, // 14: crabs.evening_detective_server.Story.places:type_name -> crabs.evening_detective_server.Place
@@ -10709,13 +10823,13 @@ var file_main_proto_depIdxs = []int32{
51, // 25: crabs.evening_detective_server.UpdateScenarioIntroReq.introduction:type_name -> crabs.evening_detective_server.Introduction
56, // 26: crabs.evening_detective_server.AddScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question
56, // 27: crabs.evening_detective_server.UpdateScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question
179, // 28: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp
181, // 28: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp
90, // 29: crabs.evening_detective_server.GetGamesRsp.games:type_name -> crabs.evening_detective_server.Game
179, // 30: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp
181, // 30: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp
48, // 31: crabs.evening_detective_server.Game.scenario:type_name -> crabs.evening_detective_server.Scenario
118, // 32: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team
179, // 33: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp
179, // 34: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp
181, // 33: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp
181, // 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
1, // 36: crabs.evening_detective_server.ScreenState.command:type_name -> crabs.evening_detective_server.ScreenCommand
91, // 37: crabs.evening_detective_server.GetScreenStateRsp.state:type_name -> crabs.evening_detective_server.ScreenState
@@ -10726,7 +10840,7 @@ var file_main_proto_depIdxs = []int32{
1, // 42: crabs.evening_detective_server.SendScreenCommandReq.command:type_name -> crabs.evening_detective_server.ScreenCommand
124, // 43: crabs.evening_detective_server.GetScreenResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion
125, // 44: crabs.evening_detective_server.GetScreenResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult
179, // 45: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp
181, // 45: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp
53, // 46: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application
90, // 47: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game
56, // 48: crabs.evening_detective_server.GetGameAnswersRsp.questions:type_name -> crabs.evening_detective_server.Question
@@ -10735,191 +10849,194 @@ var file_main_proto_depIdxs = []int32{
58, // 51: crabs.evening_detective_server.TeamResult.answers:type_name -> crabs.evening_detective_server.AnswerScore
124, // 52: crabs.evening_detective_server.GetGameResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion
125, // 53: crabs.evening_detective_server.GetGameResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult
179, // 54: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp
181, // 54: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp
127, // 55: crabs.evening_detective_server.CreateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview
127, // 56: crabs.evening_detective_server.GetGameReviewsRsp.reviews:type_name -> crabs.evening_detective_server.GameReview
127, // 57: crabs.evening_detective_server.ModerateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview
179, // 58: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp
181, // 58: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp
49, // 59: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story
90, // 60: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game
160, // 61: crabs.evening_detective_server.GetTeamStoryRsp.actions:type_name -> crabs.evening_detective_server.TeamAction
57, // 62: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer
57, // 63: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer
175, // 64: crabs.evening_detective_server.IssueGameTicketsRsp.tickets:type_name -> crabs.evening_detective_server.Ticket
178, // 65: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage
179, // 66: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp
179, // 67: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp
115, // 68: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq
116, // 69: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq
2, // 70: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq
4, // 71: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq
6, // 72: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq
8, // 73: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq
10, // 74: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq
12, // 75: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq
14, // 76: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq
16, // 77: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq
18, // 78: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq
20, // 79: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq
22, // 80: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq
25, // 81: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:input_type -> crabs.evening_detective_server.GetUserByIdReq
27, // 82: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq
29, // 83: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq
31, // 84: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq
33, // 85: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq
35, // 86: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq
37, // 87: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq
39, // 88: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq
40, // 89: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq
42, // 90: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq
44, // 91: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq
46, // 92: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq
46, // 93: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq
60, // 94: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq
62, // 95: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq
64, // 96: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq
66, // 97: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq
68, // 98: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq
70, // 99: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq
72, // 100: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq
78, // 101: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq
80, // 102: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq
82, // 103: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq
171, // 104: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq
76, // 105: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq
74, // 106: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq
84, // 107: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq
180, // 108: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody
86, // 109: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq
88, // 110: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq
119, // 111: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq
173, // 112: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq
176, // 113: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq
92, // 114: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq
94, // 115: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq
96, // 116: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq
98, // 117: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq
100, // 118: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq
102, // 119: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq
105, // 120: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq
107, // 121: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq
109, // 122: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq
111, // 123: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq
113, // 124: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq
119, // 125: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq
121, // 126: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq
123, // 127: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq
128, // 128: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq
130, // 129: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq
131, // 130: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq
130, // 131: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq
132, // 132: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq
134, // 133: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq
136, // 134: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq
138, // 135: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq
140, // 136: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq
142, // 137: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq
144, // 138: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq
146, // 139: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq
148, // 140: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq
150, // 141: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq
152, // 142: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq
154, // 143: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq
156, // 144: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq
158, // 145: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq
161, // 146: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq
163, // 147: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq
165, // 148: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq
167, // 149: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq
169, // 150: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq
117, // 151: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp
117, // 152: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp
3, // 153: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp
5, // 154: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp
7, // 155: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp
9, // 156: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp
11, // 157: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp
13, // 158: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp
15, // 159: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp
17, // 160: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp
19, // 161: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp
21, // 162: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp
23, // 163: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp
26, // 164: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:output_type -> crabs.evening_detective_server.GetUserByIdRsp
28, // 165: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp
30, // 166: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp
32, // 167: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp
34, // 168: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp
36, // 169: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp
38, // 170: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp
180, // 171: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody
41, // 172: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp
43, // 173: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp
45, // 174: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp
47, // 175: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp
47, // 176: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp
61, // 177: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp
63, // 178: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp
65, // 179: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp
67, // 180: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp
69, // 181: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp
71, // 182: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp
73, // 183: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp
79, // 184: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp
81, // 185: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp
83, // 186: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp
172, // 187: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp
77, // 188: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp
75, // 189: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp
180, // 190: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody
85, // 191: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp
87, // 192: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp
89, // 193: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp
120, // 194: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp
174, // 195: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp
177, // 196: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp
93, // 197: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp
95, // 198: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp
97, // 199: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp
99, // 200: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp
101, // 201: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp
103, // 202: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp
106, // 203: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp
108, // 204: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp
110, // 205: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp
112, // 206: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp
114, // 207: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp
180, // 208: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody
122, // 209: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp
126, // 210: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp
129, // 211: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp
133, // 212: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
133, // 213: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
133, // 214: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
133, // 215: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
135, // 216: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp
137, // 217: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp
139, // 218: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp
141, // 219: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp
143, // 220: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp
145, // 221: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp
147, // 222: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp
149, // 223: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp
151, // 224: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp
153, // 225: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp
155, // 226: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp
157, // 227: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp
159, // 228: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp
162, // 229: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp
164, // 230: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp
166, // 231: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp
168, // 232: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp
170, // 233: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp
151, // [151:234] is the sub-list for method output_type
68, // [68:151] is the sub-list for method input_type
68, // [68:68] is the sub-list for extension type_name
68, // [68:68] is the sub-list for extension extendee
0, // [0:68] is the sub-list for field type_name
180, // 65: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage
180, // 66: crabs.evening_detective_server.AcceptTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage
181, // 67: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp
181, // 68: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp
115, // 69: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq
116, // 70: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq
2, // 71: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq
4, // 72: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq
6, // 73: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq
8, // 74: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq
10, // 75: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq
12, // 76: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq
14, // 77: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq
16, // 78: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq
18, // 79: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq
20, // 80: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq
22, // 81: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq
25, // 82: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:input_type -> crabs.evening_detective_server.GetUserByIdReq
27, // 83: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq
29, // 84: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq
31, // 85: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq
33, // 86: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq
35, // 87: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq
37, // 88: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq
39, // 89: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq
40, // 90: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq
42, // 91: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq
44, // 92: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq
46, // 93: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq
46, // 94: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq
60, // 95: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq
62, // 96: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq
64, // 97: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq
66, // 98: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq
68, // 99: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq
70, // 100: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq
72, // 101: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq
78, // 102: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq
80, // 103: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq
82, // 104: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq
171, // 105: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq
76, // 106: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq
74, // 107: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq
84, // 108: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq
182, // 109: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody
86, // 110: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq
88, // 111: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq
119, // 112: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq
173, // 113: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq
176, // 114: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq
178, // 115: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:input_type -> crabs.evening_detective_server.AcceptTicketReq
92, // 116: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq
94, // 117: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq
96, // 118: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq
98, // 119: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq
100, // 120: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq
102, // 121: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq
105, // 122: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq
107, // 123: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq
109, // 124: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq
111, // 125: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq
113, // 126: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq
119, // 127: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq
121, // 128: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq
123, // 129: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq
128, // 130: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq
130, // 131: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq
131, // 132: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq
130, // 133: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq
132, // 134: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq
134, // 135: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq
136, // 136: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq
138, // 137: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq
140, // 138: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq
142, // 139: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq
144, // 140: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq
146, // 141: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq
148, // 142: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq
150, // 143: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq
152, // 144: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq
154, // 145: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq
156, // 146: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq
158, // 147: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq
161, // 148: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq
163, // 149: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq
165, // 150: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq
167, // 151: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq
169, // 152: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq
117, // 153: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp
117, // 154: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp
3, // 155: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp
5, // 156: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp
7, // 157: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp
9, // 158: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp
11, // 159: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp
13, // 160: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp
15, // 161: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp
17, // 162: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp
19, // 163: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp
21, // 164: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp
23, // 165: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp
26, // 166: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:output_type -> crabs.evening_detective_server.GetUserByIdRsp
28, // 167: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp
30, // 168: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp
32, // 169: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp
34, // 170: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp
36, // 171: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp
38, // 172: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp
182, // 173: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody
41, // 174: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp
43, // 175: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp
45, // 176: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp
47, // 177: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp
47, // 178: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp
61, // 179: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp
63, // 180: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp
65, // 181: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp
67, // 182: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp
69, // 183: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp
71, // 184: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp
73, // 185: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp
79, // 186: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp
81, // 187: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp
83, // 188: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp
172, // 189: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp
77, // 190: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp
75, // 191: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp
182, // 192: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody
85, // 193: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp
87, // 194: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp
89, // 195: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp
120, // 196: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp
174, // 197: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp
177, // 198: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp
179, // 199: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:output_type -> crabs.evening_detective_server.AcceptTicketRsp
93, // 200: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp
95, // 201: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp
97, // 202: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp
99, // 203: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp
101, // 204: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp
103, // 205: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp
106, // 206: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp
108, // 207: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp
110, // 208: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp
112, // 209: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp
114, // 210: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp
182, // 211: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody
122, // 212: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp
126, // 213: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp
129, // 214: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp
133, // 215: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
133, // 216: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
133, // 217: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
133, // 218: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp
135, // 219: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp
137, // 220: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp
139, // 221: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp
141, // 222: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp
143, // 223: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp
145, // 224: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp
147, // 225: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp
149, // 226: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp
151, // 227: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp
153, // 228: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp
155, // 229: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp
157, // 230: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp
159, // 231: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp
162, // 232: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp
164, // 233: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp
166, // 234: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp
168, // 235: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp
170, // 236: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp
153, // [153:237] is the sub-list for method output_type
69, // [69:153] is the sub-list for method input_type
69, // [69:69] is the sub-list for extension type_name
69, // [69:69] is the sub-list for extension extendee
0, // [0:69] is the sub-list for field type_name
}
func init() { file_main_proto_init() }
@@ -10932,14 +11049,14 @@ func file_main_proto_init() {
file_main_proto_msgTypes[88].OneofWrappers = []any{}
file_main_proto_msgTypes[89].OneofWrappers = []any{}
file_main_proto_msgTypes[167].OneofWrappers = []any{}
file_main_proto_msgTypes[176].OneofWrappers = []any{}
file_main_proto_msgTypes[178].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: 2,
NumMessages: 177,
NumMessages: 179,
NumExtensions: 0,
NumServices: 1,
},
+84
View File
@@ -1656,6 +1656,51 @@ func local_request_EveningDetectiveServer_GetTicket_0(ctx context.Context, marsh
return msg, metadata, err
}
func request_EveningDetectiveServer_AcceptTicket_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq AcceptTicketReq
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["token"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "token")
}
protoReq.Token, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "token", err)
}
msg, err := client.AcceptTicket(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_EveningDetectiveServer_AcceptTicket_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq AcceptTicketReq
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["token"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "token")
}
protoReq.Token, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "token", err)
}
msg, err := server.AcceptTicket(ctx, &protoReq)
return msg, metadata, err
}
func request_EveningDetectiveServer_CreateScreenSession_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq CreateScreenSessionReq
@@ -4149,6 +4194,26 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti
}
forward_EveningDetectiveServer_GetTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_AcceptTicket_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/AcceptTicket", runtime.WithHTTPPathPattern("/api/tickets/{token}/accept"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_EveningDetectiveServer_AcceptTicket_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_AcceptTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_CreateScreenSession_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -5711,6 +5776,23 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti
}
forward_EveningDetectiveServer_GetTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_AcceptTicket_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/AcceptTicket", runtime.WithHTTPPathPattern("/api/tickets/{token}/accept"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_EveningDetectiveServer_AcceptTicket_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_AcceptTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_CreateScreenSession_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -6390,6 +6472,7 @@ var (
pattern_EveningDetectiveServer_GetGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "games", "id"}, ""))
pattern_EveningDetectiveServer_IssueGameTickets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameId", "tickets"}, ""))
pattern_EveningDetectiveServer_GetTicket_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "tickets", "token"}, ""))
pattern_EveningDetectiveServer_AcceptTicket_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "tickets", "token", "accept"}, ""))
pattern_EveningDetectiveServer_CreateScreenSession_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"api", "screens"}, ""))
pattern_EveningDetectiveServer_GetScreenState_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "screens", "state"}, ""))
pattern_EveningDetectiveServer_GetGameScreens_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameId", "screens"}, ""))
@@ -6476,6 +6559,7 @@ var (
forward_EveningDetectiveServer_GetGame_0 = runtime.ForwardResponseMessage
forward_EveningDetectiveServer_IssueGameTickets_0 = runtime.ForwardResponseMessage
forward_EveningDetectiveServer_GetTicket_0 = runtime.ForwardResponseMessage
forward_EveningDetectiveServer_AcceptTicket_0 = runtime.ForwardResponseMessage
forward_EveningDetectiveServer_CreateScreenSession_0 = runtime.ForwardResponseMessage
forward_EveningDetectiveServer_GetScreenState_0 = runtime.ForwardResponseMessage
forward_EveningDetectiveServer_GetGameScreens_0 = runtime.ForwardResponseMessage
+38
View File
@@ -66,6 +66,7 @@ const (
EveningDetectiveServer_GetGame_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGame"
EveningDetectiveServer_IssueGameTickets_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/IssueGameTickets"
EveningDetectiveServer_GetTicket_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetTicket"
EveningDetectiveServer_AcceptTicket_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/AcceptTicket"
EveningDetectiveServer_CreateScreenSession_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/CreateScreenSession"
EveningDetectiveServer_GetScreenState_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetScreenState"
EveningDetectiveServer_GetGameScreens_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGameScreens"
@@ -159,6 +160,7 @@ type EveningDetectiveServerClient interface {
GetGame(ctx context.Context, in *GetGameReq, opts ...grpc.CallOption) (*GetGameRsp, error)
IssueGameTickets(ctx context.Context, in *IssueGameTicketsReq, opts ...grpc.CallOption) (*IssueGameTicketsRsp, error)
GetTicket(ctx context.Context, in *GetTicketReq, opts ...grpc.CallOption) (*GetTicketRsp, error)
AcceptTicket(ctx context.Context, in *AcceptTicketReq, opts ...grpc.CallOption) (*AcceptTicketRsp, error)
// Создать сессию экрана. Экран получает токен и показывает QR для привязки.
CreateScreenSession(ctx context.Context, in *CreateScreenSessionReq, opts ...grpc.CallOption) (*CreateScreenSessionRsp, error)
// Получить состояние экрана по его токену. Вызывается самим экраном.
@@ -672,6 +674,16 @@ func (c *eveningDetectiveServerClient) GetTicket(ctx context.Context, in *GetTic
return out, nil
}
func (c *eveningDetectiveServerClient) AcceptTicket(ctx context.Context, in *AcceptTicketReq, opts ...grpc.CallOption) (*AcceptTicketRsp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(AcceptTicketRsp)
err := c.cc.Invoke(ctx, EveningDetectiveServer_AcceptTicket_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *eveningDetectiveServerClient) CreateScreenSession(ctx context.Context, in *CreateScreenSessionReq, opts ...grpc.CallOption) (*CreateScreenSessionRsp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(CreateScreenSessionRsp)
@@ -1096,6 +1108,7 @@ type EveningDetectiveServerServer interface {
GetGame(context.Context, *GetGameReq) (*GetGameRsp, error)
IssueGameTickets(context.Context, *IssueGameTicketsReq) (*IssueGameTicketsRsp, error)
GetTicket(context.Context, *GetTicketReq) (*GetTicketRsp, error)
AcceptTicket(context.Context, *AcceptTicketReq) (*AcceptTicketRsp, error)
// Создать сессию экрана. Экран получает токен и показывает QR для привязки.
CreateScreenSession(context.Context, *CreateScreenSessionReq) (*CreateScreenSessionRsp, error)
// Получить состояние экрана по его токену. Вызывается самим экраном.
@@ -1287,6 +1300,9 @@ func (UnimplementedEveningDetectiveServerServer) IssueGameTickets(context.Contex
func (UnimplementedEveningDetectiveServerServer) GetTicket(context.Context, *GetTicketReq) (*GetTicketRsp, error) {
return nil, status.Error(codes.Unimplemented, "method GetTicket not implemented")
}
func (UnimplementedEveningDetectiveServerServer) AcceptTicket(context.Context, *AcceptTicketReq) (*AcceptTicketRsp, error) {
return nil, status.Error(codes.Unimplemented, "method AcceptTicket not implemented")
}
func (UnimplementedEveningDetectiveServerServer) CreateScreenSession(context.Context, *CreateScreenSessionReq) (*CreateScreenSessionRsp, error) {
return nil, status.Error(codes.Unimplemented, "method CreateScreenSession not implemented")
}
@@ -2248,6 +2264,24 @@ func _EveningDetectiveServer_GetTicket_Handler(srv interface{}, ctx context.Cont
return interceptor(ctx, in, info, handler)
}
func _EveningDetectiveServer_AcceptTicket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(AcceptTicketReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(EveningDetectiveServerServer).AcceptTicket(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: EveningDetectiveServer_AcceptTicket_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(EveningDetectiveServerServer).AcceptTicket(ctx, req.(*AcceptTicketReq))
}
return interceptor(ctx, in, info, handler)
}
func _EveningDetectiveServer_CreateScreenSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateScreenSessionReq)
if err := dec(in); err != nil {
@@ -3105,6 +3139,10 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetTicket",
Handler: _EveningDetectiveServer_GetTicket_Handler,
},
{
MethodName: "AcceptTicket",
Handler: _EveningDetectiveServer_AcceptTicket_Handler,
},
{
MethodName: "CreateScreenSession",
Handler: _EveningDetectiveServer_CreateScreenSession_Handler,