This commit is contained in:
zhx 2026-07-21 12:41:24 +08:00
parent 55a5a23f67
commit ec0fb81eac
15 changed files with 719 additions and 208 deletions

View File

@ -13022,6 +13022,144 @@ func (x *GetRoomRocketResponse) GetServerTimeMs() int64 {
return 0 return 0
} }
// ApplyRoomRPSGiftRequest 只承载 room-rps 最终结算后真实发生的一份败者礼物。
// game-service 的预扣、平局退款和赢家本金退款都不能调用该接口。
type ApplyRoomRPSGiftRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
SenderUserId int64 `protobuf:"varint,3,opt,name=sender_user_id,json=senderUserId,proto3" json:"sender_user_id,omitempty"`
TargetUserId int64 `protobuf:"varint,4,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"`
GiftId string `protobuf:"bytes,5,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"`
HeatValue int64 `protobuf:"varint,6,opt,name=heat_value,json=heatValue,proto3" json:"heat_value,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ApplyRoomRPSGiftRequest) Reset() {
*x = ApplyRoomRPSGiftRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[161]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ApplyRoomRPSGiftRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ApplyRoomRPSGiftRequest) ProtoMessage() {}
func (x *ApplyRoomRPSGiftRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[161]
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 ApplyRoomRPSGiftRequest.ProtoReflect.Descriptor instead.
func (*ApplyRoomRPSGiftRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{161}
}
func (x *ApplyRoomRPSGiftRequest) GetMeta() *RequestMeta {
if x != nil {
return x.Meta
}
return nil
}
func (x *ApplyRoomRPSGiftRequest) GetRoomId() string {
if x != nil {
return x.RoomId
}
return ""
}
func (x *ApplyRoomRPSGiftRequest) GetSenderUserId() int64 {
if x != nil {
return x.SenderUserId
}
return 0
}
func (x *ApplyRoomRPSGiftRequest) GetTargetUserId() int64 {
if x != nil {
return x.TargetUserId
}
return 0
}
func (x *ApplyRoomRPSGiftRequest) GetGiftId() string {
if x != nil {
return x.GiftId
}
return ""
}
func (x *ApplyRoomRPSGiftRequest) GetHeatValue() int64 {
if x != nil {
return x.HeatValue
}
return 0
}
type ApplyRoomRPSGiftResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Result *CommandResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"`
Rocket *RoomRocketState `protobuf:"bytes,2,opt,name=rocket,proto3" json:"rocket,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ApplyRoomRPSGiftResponse) Reset() {
*x = ApplyRoomRPSGiftResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[162]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ApplyRoomRPSGiftResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ApplyRoomRPSGiftResponse) ProtoMessage() {}
func (x *ApplyRoomRPSGiftResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[162]
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 ApplyRoomRPSGiftResponse.ProtoReflect.Descriptor instead.
func (*ApplyRoomRPSGiftResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{162}
}
func (x *ApplyRoomRPSGiftResponse) GetResult() *CommandResult {
if x != nil {
return x.Result
}
return nil
}
func (x *ApplyRoomRPSGiftResponse) GetRocket() *RoomRocketState {
if x != nil {
return x.Rocket
}
return nil
}
// ListRoomOnlineUsersRequest 分页查询房间在线用户,不让客户端拉完整 RoomSnapshot 做列表分页。 // ListRoomOnlineUsersRequest 分页查询房间在线用户,不让客户端拉完整 RoomSnapshot 做列表分页。
type ListRoomOnlineUsersRequest struct { type ListRoomOnlineUsersRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
@ -13037,7 +13175,7 @@ type ListRoomOnlineUsersRequest struct {
func (x *ListRoomOnlineUsersRequest) Reset() { func (x *ListRoomOnlineUsersRequest) Reset() {
*x = ListRoomOnlineUsersRequest{} *x = ListRoomOnlineUsersRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[161] mi := &file_proto_room_v1_room_proto_msgTypes[163]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13049,7 +13187,7 @@ func (x *ListRoomOnlineUsersRequest) String() string {
func (*ListRoomOnlineUsersRequest) ProtoMessage() {} func (*ListRoomOnlineUsersRequest) ProtoMessage() {}
func (x *ListRoomOnlineUsersRequest) ProtoReflect() protoreflect.Message { func (x *ListRoomOnlineUsersRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[161] mi := &file_proto_room_v1_room_proto_msgTypes[163]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13062,7 +13200,7 @@ func (x *ListRoomOnlineUsersRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListRoomOnlineUsersRequest.ProtoReflect.Descriptor instead. // Deprecated: Use ListRoomOnlineUsersRequest.ProtoReflect.Descriptor instead.
func (*ListRoomOnlineUsersRequest) Descriptor() ([]byte, []int) { func (*ListRoomOnlineUsersRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{161} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{163}
} }
func (x *ListRoomOnlineUsersRequest) GetMeta() *RequestMeta { func (x *ListRoomOnlineUsersRequest) GetMeta() *RequestMeta {
@ -13121,7 +13259,7 @@ type ListRoomOnlineUsersResponse struct {
func (x *ListRoomOnlineUsersResponse) Reset() { func (x *ListRoomOnlineUsersResponse) Reset() {
*x = ListRoomOnlineUsersResponse{} *x = ListRoomOnlineUsersResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[162] mi := &file_proto_room_v1_room_proto_msgTypes[164]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13133,7 +13271,7 @@ func (x *ListRoomOnlineUsersResponse) String() string {
func (*ListRoomOnlineUsersResponse) ProtoMessage() {} func (*ListRoomOnlineUsersResponse) ProtoMessage() {}
func (x *ListRoomOnlineUsersResponse) ProtoReflect() protoreflect.Message { func (x *ListRoomOnlineUsersResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[162] mi := &file_proto_room_v1_room_proto_msgTypes[164]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13146,7 +13284,7 @@ func (x *ListRoomOnlineUsersResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListRoomOnlineUsersResponse.ProtoReflect.Descriptor instead. // Deprecated: Use ListRoomOnlineUsersResponse.ProtoReflect.Descriptor instead.
func (*ListRoomOnlineUsersResponse) Descriptor() ([]byte, []int) { func (*ListRoomOnlineUsersResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{162} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{164}
} }
func (x *ListRoomOnlineUsersResponse) GetUsers() []*RoomUser { func (x *ListRoomOnlineUsersResponse) GetUsers() []*RoomUser {
@ -13207,7 +13345,7 @@ type RoomBannedUser struct {
func (x *RoomBannedUser) Reset() { func (x *RoomBannedUser) Reset() {
*x = RoomBannedUser{} *x = RoomBannedUser{}
mi := &file_proto_room_v1_room_proto_msgTypes[163] mi := &file_proto_room_v1_room_proto_msgTypes[165]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13219,7 +13357,7 @@ func (x *RoomBannedUser) String() string {
func (*RoomBannedUser) ProtoMessage() {} func (*RoomBannedUser) ProtoMessage() {}
func (x *RoomBannedUser) ProtoReflect() protoreflect.Message { func (x *RoomBannedUser) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[163] mi := &file_proto_room_v1_room_proto_msgTypes[165]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13232,7 +13370,7 @@ func (x *RoomBannedUser) ProtoReflect() protoreflect.Message {
// Deprecated: Use RoomBannedUser.ProtoReflect.Descriptor instead. // Deprecated: Use RoomBannedUser.ProtoReflect.Descriptor instead.
func (*RoomBannedUser) Descriptor() ([]byte, []int) { func (*RoomBannedUser) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{163} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{165}
} }
func (x *RoomBannedUser) GetUserId() int64 { func (x *RoomBannedUser) GetUserId() int64 {
@ -13291,7 +13429,7 @@ type ListRoomBannedUsersRequest struct {
func (x *ListRoomBannedUsersRequest) Reset() { func (x *ListRoomBannedUsersRequest) Reset() {
*x = ListRoomBannedUsersRequest{} *x = ListRoomBannedUsersRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[164] mi := &file_proto_room_v1_room_proto_msgTypes[166]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13303,7 +13441,7 @@ func (x *ListRoomBannedUsersRequest) String() string {
func (*ListRoomBannedUsersRequest) ProtoMessage() {} func (*ListRoomBannedUsersRequest) ProtoMessage() {}
func (x *ListRoomBannedUsersRequest) ProtoReflect() protoreflect.Message { func (x *ListRoomBannedUsersRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[164] mi := &file_proto_room_v1_room_proto_msgTypes[166]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13316,7 +13454,7 @@ func (x *ListRoomBannedUsersRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListRoomBannedUsersRequest.ProtoReflect.Descriptor instead. // Deprecated: Use ListRoomBannedUsersRequest.ProtoReflect.Descriptor instead.
func (*ListRoomBannedUsersRequest) Descriptor() ([]byte, []int) { func (*ListRoomBannedUsersRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{164} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{166}
} }
func (x *ListRoomBannedUsersRequest) GetMeta() *RequestMeta { func (x *ListRoomBannedUsersRequest) GetMeta() *RequestMeta {
@ -13367,7 +13505,7 @@ type ListRoomBannedUsersResponse struct {
func (x *ListRoomBannedUsersResponse) Reset() { func (x *ListRoomBannedUsersResponse) Reset() {
*x = ListRoomBannedUsersResponse{} *x = ListRoomBannedUsersResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[165] mi := &file_proto_room_v1_room_proto_msgTypes[167]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13379,7 +13517,7 @@ func (x *ListRoomBannedUsersResponse) String() string {
func (*ListRoomBannedUsersResponse) ProtoMessage() {} func (*ListRoomBannedUsersResponse) ProtoMessage() {}
func (x *ListRoomBannedUsersResponse) ProtoReflect() protoreflect.Message { func (x *ListRoomBannedUsersResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[165] mi := &file_proto_room_v1_room_proto_msgTypes[167]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13392,7 +13530,7 @@ func (x *ListRoomBannedUsersResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListRoomBannedUsersResponse.ProtoReflect.Descriptor instead. // Deprecated: Use ListRoomBannedUsersResponse.ProtoReflect.Descriptor instead.
func (*ListRoomBannedUsersResponse) Descriptor() ([]byte, []int) { func (*ListRoomBannedUsersResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{165} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{167}
} }
func (x *ListRoomBannedUsersResponse) GetItems() []*RoomBannedUser { func (x *ListRoomBannedUsersResponse) GetItems() []*RoomBannedUser {
@ -13443,7 +13581,7 @@ type FollowRoomRequest struct {
func (x *FollowRoomRequest) Reset() { func (x *FollowRoomRequest) Reset() {
*x = FollowRoomRequest{} *x = FollowRoomRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[166] mi := &file_proto_room_v1_room_proto_msgTypes[168]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13455,7 +13593,7 @@ func (x *FollowRoomRequest) String() string {
func (*FollowRoomRequest) ProtoMessage() {} func (*FollowRoomRequest) ProtoMessage() {}
func (x *FollowRoomRequest) ProtoReflect() protoreflect.Message { func (x *FollowRoomRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[166] mi := &file_proto_room_v1_room_proto_msgTypes[168]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13468,7 +13606,7 @@ func (x *FollowRoomRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FollowRoomRequest.ProtoReflect.Descriptor instead. // Deprecated: Use FollowRoomRequest.ProtoReflect.Descriptor instead.
func (*FollowRoomRequest) Descriptor() ([]byte, []int) { func (*FollowRoomRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{166} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{168}
} }
func (x *FollowRoomRequest) GetMeta() *RequestMeta { func (x *FollowRoomRequest) GetMeta() *RequestMeta {
@ -13504,7 +13642,7 @@ type FollowRoomResponse struct {
func (x *FollowRoomResponse) Reset() { func (x *FollowRoomResponse) Reset() {
*x = FollowRoomResponse{} *x = FollowRoomResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[167] mi := &file_proto_room_v1_room_proto_msgTypes[169]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13516,7 +13654,7 @@ func (x *FollowRoomResponse) String() string {
func (*FollowRoomResponse) ProtoMessage() {} func (*FollowRoomResponse) ProtoMessage() {}
func (x *FollowRoomResponse) ProtoReflect() protoreflect.Message { func (x *FollowRoomResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[167] mi := &file_proto_room_v1_room_proto_msgTypes[169]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13529,7 +13667,7 @@ func (x *FollowRoomResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use FollowRoomResponse.ProtoReflect.Descriptor instead. // Deprecated: Use FollowRoomResponse.ProtoReflect.Descriptor instead.
func (*FollowRoomResponse) Descriptor() ([]byte, []int) { func (*FollowRoomResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{167} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{169}
} }
func (x *FollowRoomResponse) GetRoomId() string { func (x *FollowRoomResponse) GetRoomId() string {
@ -13572,7 +13710,7 @@ type UnfollowRoomRequest struct {
func (x *UnfollowRoomRequest) Reset() { func (x *UnfollowRoomRequest) Reset() {
*x = UnfollowRoomRequest{} *x = UnfollowRoomRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[168] mi := &file_proto_room_v1_room_proto_msgTypes[170]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13584,7 +13722,7 @@ func (x *UnfollowRoomRequest) String() string {
func (*UnfollowRoomRequest) ProtoMessage() {} func (*UnfollowRoomRequest) ProtoMessage() {}
func (x *UnfollowRoomRequest) ProtoReflect() protoreflect.Message { func (x *UnfollowRoomRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[168] mi := &file_proto_room_v1_room_proto_msgTypes[170]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13597,7 +13735,7 @@ func (x *UnfollowRoomRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UnfollowRoomRequest.ProtoReflect.Descriptor instead. // Deprecated: Use UnfollowRoomRequest.ProtoReflect.Descriptor instead.
func (*UnfollowRoomRequest) Descriptor() ([]byte, []int) { func (*UnfollowRoomRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{168} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{170}
} }
func (x *UnfollowRoomRequest) GetMeta() *RequestMeta { func (x *UnfollowRoomRequest) GetMeta() *RequestMeta {
@ -13632,7 +13770,7 @@ type UnfollowRoomResponse struct {
func (x *UnfollowRoomResponse) Reset() { func (x *UnfollowRoomResponse) Reset() {
*x = UnfollowRoomResponse{} *x = UnfollowRoomResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[169] mi := &file_proto_room_v1_room_proto_msgTypes[171]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13644,7 +13782,7 @@ func (x *UnfollowRoomResponse) String() string {
func (*UnfollowRoomResponse) ProtoMessage() {} func (*UnfollowRoomResponse) ProtoMessage() {}
func (x *UnfollowRoomResponse) ProtoReflect() protoreflect.Message { func (x *UnfollowRoomResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[169] mi := &file_proto_room_v1_room_proto_msgTypes[171]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13657,7 +13795,7 @@ func (x *UnfollowRoomResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UnfollowRoomResponse.ProtoReflect.Descriptor instead. // Deprecated: Use UnfollowRoomResponse.ProtoReflect.Descriptor instead.
func (*UnfollowRoomResponse) Descriptor() ([]byte, []int) { func (*UnfollowRoomResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{169} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{171}
} }
func (x *UnfollowRoomResponse) GetRoomId() string { func (x *UnfollowRoomResponse) GetRoomId() string {
@ -13697,7 +13835,7 @@ type SendGiftLuckyHit struct {
func (x *SendGiftLuckyHit) Reset() { func (x *SendGiftLuckyHit) Reset() {
*x = SendGiftLuckyHit{} *x = SendGiftLuckyHit{}
mi := &file_proto_room_v1_room_proto_msgTypes[170] mi := &file_proto_room_v1_room_proto_msgTypes[172]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13709,7 +13847,7 @@ func (x *SendGiftLuckyHit) String() string {
func (*SendGiftLuckyHit) ProtoMessage() {} func (*SendGiftLuckyHit) ProtoMessage() {}
func (x *SendGiftLuckyHit) ProtoReflect() protoreflect.Message { func (x *SendGiftLuckyHit) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[170] mi := &file_proto_room_v1_room_proto_msgTypes[172]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13722,7 +13860,7 @@ func (x *SendGiftLuckyHit) ProtoReflect() protoreflect.Message {
// Deprecated: Use SendGiftLuckyHit.ProtoReflect.Descriptor instead. // Deprecated: Use SendGiftLuckyHit.ProtoReflect.Descriptor instead.
func (*SendGiftLuckyHit) Descriptor() ([]byte, []int) { func (*SendGiftLuckyHit) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{170} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{172}
} }
func (x *SendGiftLuckyHit) GetGiftIndex() int32 { func (x *SendGiftLuckyHit) GetGiftIndex() int32 {
@ -13799,7 +13937,7 @@ type SendGiftResultV2 struct {
func (x *SendGiftResultV2) Reset() { func (x *SendGiftResultV2) Reset() {
*x = SendGiftResultV2{} *x = SendGiftResultV2{}
mi := &file_proto_room_v1_room_proto_msgTypes[171] mi := &file_proto_room_v1_room_proto_msgTypes[173]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -13811,7 +13949,7 @@ func (x *SendGiftResultV2) String() string {
func (*SendGiftResultV2) ProtoMessage() {} func (*SendGiftResultV2) ProtoMessage() {}
func (x *SendGiftResultV2) ProtoReflect() protoreflect.Message { func (x *SendGiftResultV2) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[171] mi := &file_proto_room_v1_room_proto_msgTypes[173]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -13824,7 +13962,7 @@ func (x *SendGiftResultV2) ProtoReflect() protoreflect.Message {
// Deprecated: Use SendGiftResultV2.ProtoReflect.Descriptor instead. // Deprecated: Use SendGiftResultV2.ProtoReflect.Descriptor instead.
func (*SendGiftResultV2) Descriptor() ([]byte, []int) { func (*SendGiftResultV2) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{171} return file_proto_room_v1_room_proto_rawDescGZIP(), []int{173}
} }
func (x *SendGiftResultV2) GetApiVersion() int32 { func (x *SendGiftResultV2) GetApiVersion() int32 {
@ -15119,7 +15257,18 @@ const file_proto_room_v1_room_proto_rawDesc = "" +
"\x0eviewer_user_id\x18\x03 \x01(\x03R\fviewerUserId\"t\n" + "\x0eviewer_user_id\x18\x03 \x01(\x03R\fviewerUserId\"t\n" +
"\x15GetRoomRocketResponse\x125\n" + "\x15GetRoomRocketResponse\x125\n" +
"\x06rocket\x18\x01 \x01(\v2\x1d.hyapp.room.v1.RoomRocketInfoR\x06rocket\x12$\n" + "\x06rocket\x18\x01 \x01(\v2\x1d.hyapp.room.v1.RoomRocketInfoR\x06rocket\x12$\n" +
"\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xd0\x01\n" + "\x0eserver_time_ms\x18\x02 \x01(\x03R\fserverTimeMs\"\xe6\x01\n" +
"\x17ApplyRoomRPSGiftRequest\x12.\n" +
"\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" +
"\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" +
"\x0esender_user_id\x18\x03 \x01(\x03R\fsenderUserId\x12$\n" +
"\x0etarget_user_id\x18\x04 \x01(\x03R\ftargetUserId\x12\x17\n" +
"\agift_id\x18\x05 \x01(\tR\x06giftId\x12\x1d\n" +
"\n" +
"heat_value\x18\x06 \x01(\x03R\theatValue\"\x88\x01\n" +
"\x18ApplyRoomRPSGiftResponse\x124\n" +
"\x06result\x18\x01 \x01(\v2\x1c.hyapp.room.v1.CommandResultR\x06result\x126\n" +
"\x06rocket\x18\x02 \x01(\v2\x1e.hyapp.room.v1.RoomRocketStateR\x06rocket\"\xd0\x01\n" +
"\x1aListRoomOnlineUsersRequest\x12.\n" + "\x1aListRoomOnlineUsersRequest\x12.\n" +
"\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" + "\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x17\n" +
"\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" + "\aroom_id\x18\x02 \x01(\tR\x06roomId\x12$\n" +
@ -15203,7 +15352,7 @@ const file_proto_room_v1_room_proto_rawDesc = "" +
"\rbatch_display\x18\x10 \x01(\v2#.hyapp.room.v1.SendGiftBatchDisplayR\fbatchDisplay\x12\x1b\n" + "\rbatch_display\x18\x10 \x01(\v2#.hyapp.room.v1.SendGiftBatchDisplayR\fbatchDisplay\x12\x1b\n" +
"\troom_heat\x18\x11 \x01(\x03R\broomHeat\x124\n" + "\troom_heat\x18\x11 \x01(\x03R\broomHeat\x124\n" +
"\tgift_rank\x18\x12 \x03(\v2\x17.hyapp.room.v1.RankItemR\bgiftRank\x12)\n" + "\tgift_rank\x18\x12 \x03(\v2\x17.hyapp.room.v1.RankItemR\bgiftRank\x12)\n" +
"\x10operation_status\x18\x13 \x01(\tR\x0foperationStatus2\xfc\x1c\n" + "\x10operation_status\x18\x13 \x01(\tR\x0foperationStatus2\xe1\x1d\n" +
"\x12RoomCommandService\x12Q\n" + "\x12RoomCommandService\x12Q\n" +
"\n" + "\n" +
"CreateRoom\x12 .hyapp.room.v1.CreateRoomRequest\x1a!.hyapp.room.v1.CreateRoomResponse\x12f\n" + "CreateRoom\x12 .hyapp.room.v1.CreateRoomRequest\x1a!.hyapp.room.v1.CreateRoomResponse\x12f\n" +
@ -15242,7 +15391,8 @@ const file_proto_room_v1_room_proto_rawDesc = "" +
"\bKickUser\x12\x1e.hyapp.room.v1.KickUserRequest\x1a\x1f.hyapp.room.v1.KickUserResponse\x12N\n" + "\bKickUser\x12\x1e.hyapp.room.v1.KickUserRequest\x1a\x1f.hyapp.room.v1.KickUserResponse\x12N\n" +
"\tUnbanUser\x12\x1f.hyapp.room.v1.UnbanUserRequest\x1a .hyapp.room.v1.UnbanUserResponse\x12`\n" + "\tUnbanUser\x12\x1f.hyapp.room.v1.UnbanUserRequest\x1a .hyapp.room.v1.UnbanUserResponse\x12`\n" +
"\x0fSystemEvictUser\x12%.hyapp.room.v1.SystemEvictUserRequest\x1a&.hyapp.room.v1.SystemEvictUserResponse\x12K\n" + "\x0fSystemEvictUser\x12%.hyapp.room.v1.SystemEvictUserRequest\x1a&.hyapp.room.v1.SystemEvictUserResponse\x12K\n" +
"\bSendGift\x12\x1e.hyapp.room.v1.SendGiftRequest\x1a\x1f.hyapp.room.v1.SendGiftResponse\x12Q\n" + "\bSendGift\x12\x1e.hyapp.room.v1.SendGiftRequest\x1a\x1f.hyapp.room.v1.SendGiftResponse\x12c\n" +
"\x10ApplyRoomRPSGift\x12&.hyapp.room.v1.ApplyRoomRPSGiftRequest\x1a'.hyapp.room.v1.ApplyRoomRPSGiftResponse\x12Q\n" +
"\n" + "\n" +
"FollowRoom\x12 .hyapp.room.v1.FollowRoomRequest\x1a!.hyapp.room.v1.FollowRoomResponse\x12W\n" + "FollowRoom\x12 .hyapp.room.v1.FollowRoomRequest\x1a!.hyapp.room.v1.FollowRoomResponse\x12W\n" +
"\fUnfollowRoom\x12\".hyapp.room.v1.UnfollowRoomRequest\x1a#.hyapp.room.v1.UnfollowRoomResponse2\xd0\x04\n" + "\fUnfollowRoom\x12\".hyapp.room.v1.UnfollowRoomRequest\x1a#.hyapp.room.v1.UnfollowRoomResponse2\xd0\x04\n" +
@ -15287,7 +15437,7 @@ func file_proto_room_v1_room_proto_rawDescGZIP() []byte {
return file_proto_room_v1_room_proto_rawDescData return file_proto_room_v1_room_proto_rawDescData
} }
var file_proto_room_v1_room_proto_msgTypes = make([]protoimpl.MessageInfo, 173) var file_proto_room_v1_room_proto_msgTypes = make([]protoimpl.MessageInfo, 175)
var file_proto_room_v1_room_proto_goTypes = []any{ var file_proto_room_v1_room_proto_goTypes = []any{
(*RequestMeta)(nil), // 0: hyapp.room.v1.RequestMeta (*RequestMeta)(nil), // 0: hyapp.room.v1.RequestMeta
(*CommandResult)(nil), // 1: hyapp.room.v1.CommandResult (*CommandResult)(nil), // 1: hyapp.room.v1.CommandResult
@ -15450,21 +15600,23 @@ var file_proto_room_v1_room_proto_goTypes = []any{
(*GetRoomSnapshotResponse)(nil), // 158: hyapp.room.v1.GetRoomSnapshotResponse (*GetRoomSnapshotResponse)(nil), // 158: hyapp.room.v1.GetRoomSnapshotResponse
(*GetRoomRocketRequest)(nil), // 159: hyapp.room.v1.GetRoomRocketRequest (*GetRoomRocketRequest)(nil), // 159: hyapp.room.v1.GetRoomRocketRequest
(*GetRoomRocketResponse)(nil), // 160: hyapp.room.v1.GetRoomRocketResponse (*GetRoomRocketResponse)(nil), // 160: hyapp.room.v1.GetRoomRocketResponse
(*ListRoomOnlineUsersRequest)(nil), // 161: hyapp.room.v1.ListRoomOnlineUsersRequest (*ApplyRoomRPSGiftRequest)(nil), // 161: hyapp.room.v1.ApplyRoomRPSGiftRequest
(*ListRoomOnlineUsersResponse)(nil), // 162: hyapp.room.v1.ListRoomOnlineUsersResponse (*ApplyRoomRPSGiftResponse)(nil), // 162: hyapp.room.v1.ApplyRoomRPSGiftResponse
(*RoomBannedUser)(nil), // 163: hyapp.room.v1.RoomBannedUser (*ListRoomOnlineUsersRequest)(nil), // 163: hyapp.room.v1.ListRoomOnlineUsersRequest
(*ListRoomBannedUsersRequest)(nil), // 164: hyapp.room.v1.ListRoomBannedUsersRequest (*ListRoomOnlineUsersResponse)(nil), // 164: hyapp.room.v1.ListRoomOnlineUsersResponse
(*ListRoomBannedUsersResponse)(nil), // 165: hyapp.room.v1.ListRoomBannedUsersResponse (*RoomBannedUser)(nil), // 165: hyapp.room.v1.RoomBannedUser
(*FollowRoomRequest)(nil), // 166: hyapp.room.v1.FollowRoomRequest (*ListRoomBannedUsersRequest)(nil), // 166: hyapp.room.v1.ListRoomBannedUsersRequest
(*FollowRoomResponse)(nil), // 167: hyapp.room.v1.FollowRoomResponse (*ListRoomBannedUsersResponse)(nil), // 167: hyapp.room.v1.ListRoomBannedUsersResponse
(*UnfollowRoomRequest)(nil), // 168: hyapp.room.v1.UnfollowRoomRequest (*FollowRoomRequest)(nil), // 168: hyapp.room.v1.FollowRoomRequest
(*UnfollowRoomResponse)(nil), // 169: hyapp.room.v1.UnfollowRoomResponse (*FollowRoomResponse)(nil), // 169: hyapp.room.v1.FollowRoomResponse
(*SendGiftLuckyHit)(nil), // 170: hyapp.room.v1.SendGiftLuckyHit (*UnfollowRoomRequest)(nil), // 170: hyapp.room.v1.UnfollowRoomRequest
(*SendGiftResultV2)(nil), // 171: hyapp.room.v1.SendGiftResultV2 (*UnfollowRoomResponse)(nil), // 171: hyapp.room.v1.UnfollowRoomResponse
nil, // 172: hyapp.room.v1.RoomSnapshot.RoomExtEntry (*SendGiftLuckyHit)(nil), // 172: hyapp.room.v1.SendGiftLuckyHit
(*SendGiftResultV2)(nil), // 173: hyapp.room.v1.SendGiftResultV2
nil, // 174: hyapp.room.v1.RoomSnapshot.RoomExtEntry
} }
var file_proto_room_v1_room_proto_depIdxs = []int32{ var file_proto_room_v1_room_proto_depIdxs = []int32{
170, // 0: hyapp.room.v1.LuckyGiftDrawResult.hits:type_name -> hyapp.room.v1.SendGiftLuckyHit 172, // 0: hyapp.room.v1.LuckyGiftDrawResult.hits:type_name -> hyapp.room.v1.SendGiftLuckyHit
8, // 1: hyapp.room.v1.RoomRocketLevel.in_room_rewards:type_name -> hyapp.room.v1.RoomRocketRewardItem 8, // 1: hyapp.room.v1.RoomRocketLevel.in_room_rewards:type_name -> hyapp.room.v1.RoomRocketRewardItem
8, // 2: hyapp.room.v1.RoomRocketLevel.top1_rewards:type_name -> hyapp.room.v1.RoomRocketRewardItem 8, // 2: hyapp.room.v1.RoomRocketLevel.top1_rewards:type_name -> hyapp.room.v1.RoomRocketRewardItem
8, // 3: hyapp.room.v1.RoomRocketLevel.igniter_rewards:type_name -> hyapp.room.v1.RoomRocketRewardItem 8, // 3: hyapp.room.v1.RoomRocketLevel.igniter_rewards:type_name -> hyapp.room.v1.RoomRocketRewardItem
@ -15511,7 +15663,7 @@ var file_proto_room_v1_room_proto_depIdxs = []int32{
4, // 44: hyapp.room.v1.RoomSnapshot.mic_seats:type_name -> hyapp.room.v1.SeatState 4, // 44: hyapp.room.v1.RoomSnapshot.mic_seats:type_name -> hyapp.room.v1.SeatState
2, // 45: hyapp.room.v1.RoomSnapshot.online_users:type_name -> hyapp.room.v1.RoomUser 2, // 45: hyapp.room.v1.RoomSnapshot.online_users:type_name -> hyapp.room.v1.RoomUser
5, // 46: hyapp.room.v1.RoomSnapshot.gift_rank:type_name -> hyapp.room.v1.RankItem 5, // 46: hyapp.room.v1.RoomSnapshot.gift_rank:type_name -> hyapp.room.v1.RankItem
172, // 47: hyapp.room.v1.RoomSnapshot.room_ext:type_name -> hyapp.room.v1.RoomSnapshot.RoomExtEntry 174, // 47: hyapp.room.v1.RoomSnapshot.room_ext:type_name -> hyapp.room.v1.RoomSnapshot.RoomExtEntry
13, // 48: hyapp.room.v1.RoomSnapshot.rocket:type_name -> hyapp.room.v1.RoomRocketState 13, // 48: hyapp.room.v1.RoomSnapshot.rocket:type_name -> hyapp.room.v1.RoomRocketState
53, // 49: hyapp.room.v1.RoomSnapshot.ban_states:type_name -> hyapp.room.v1.RoomBanState 53, // 49: hyapp.room.v1.RoomSnapshot.ban_states:type_name -> hyapp.room.v1.RoomBanState
63, // 50: hyapp.room.v1.RoomSnapshot.room_border:type_name -> hyapp.room.v1.RoomDecorationResource 63, // 50: hyapp.room.v1.RoomSnapshot.room_border:type_name -> hyapp.room.v1.RoomDecorationResource
@ -15637,7 +15789,7 @@ var file_proto_room_v1_room_proto_depIdxs = []int32{
7, // 170: hyapp.room.v1.SendGiftResponse.lucky_gift:type_name -> hyapp.room.v1.LuckyGiftDrawResult 7, // 170: hyapp.room.v1.SendGiftResponse.lucky_gift:type_name -> hyapp.room.v1.LuckyGiftDrawResult
7, // 171: hyapp.room.v1.SendGiftResponse.lucky_gifts:type_name -> hyapp.room.v1.LuckyGiftDrawResult 7, // 171: hyapp.room.v1.SendGiftResponse.lucky_gifts:type_name -> hyapp.room.v1.LuckyGiftDrawResult
129, // 172: hyapp.room.v1.SendGiftResponse.batch_display:type_name -> hyapp.room.v1.SendGiftBatchDisplay 129, // 172: hyapp.room.v1.SendGiftResponse.batch_display:type_name -> hyapp.room.v1.SendGiftBatchDisplay
171, // 173: hyapp.room.v1.SendGiftResponse.v2:type_name -> hyapp.room.v1.SendGiftResultV2 173, // 173: hyapp.room.v1.SendGiftResponse.v2:type_name -> hyapp.room.v1.SendGiftResultV2
0, // 174: hyapp.room.v1.ListRoomsRequest.meta:type_name -> hyapp.room.v1.RequestMeta 0, // 174: hyapp.room.v1.ListRoomsRequest.meta:type_name -> hyapp.room.v1.RequestMeta
0, // 175: hyapp.room.v1.ListRoomsByOwnersRequest.meta:type_name -> hyapp.room.v1.RequestMeta 0, // 175: hyapp.room.v1.ListRoomsByOwnersRequest.meta:type_name -> hyapp.room.v1.RequestMeta
0, // 176: hyapp.room.v1.ListRoomFeedsRequest.meta:type_name -> hyapp.room.v1.RequestMeta 0, // 176: hyapp.room.v1.ListRoomFeedsRequest.meta:type_name -> hyapp.room.v1.RequestMeta
@ -15660,151 +15812,156 @@ var file_proto_room_v1_room_proto_depIdxs = []int32{
54, // 193: hyapp.room.v1.GetRoomSnapshotResponse.room:type_name -> hyapp.room.v1.RoomSnapshot 54, // 193: hyapp.room.v1.GetRoomSnapshotResponse.room:type_name -> hyapp.room.v1.RoomSnapshot
0, // 194: hyapp.room.v1.GetRoomRocketRequest.meta:type_name -> hyapp.room.v1.RequestMeta 0, // 194: hyapp.room.v1.GetRoomRocketRequest.meta:type_name -> hyapp.room.v1.RequestMeta
14, // 195: hyapp.room.v1.GetRoomRocketResponse.rocket:type_name -> hyapp.room.v1.RoomRocketInfo 14, // 195: hyapp.room.v1.GetRoomRocketResponse.rocket:type_name -> hyapp.room.v1.RoomRocketInfo
0, // 196: hyapp.room.v1.ListRoomOnlineUsersRequest.meta:type_name -> hyapp.room.v1.RequestMeta 0, // 196: hyapp.room.v1.ApplyRoomRPSGiftRequest.meta:type_name -> hyapp.room.v1.RequestMeta
2, // 197: hyapp.room.v1.ListRoomOnlineUsersResponse.users:type_name -> hyapp.room.v1.RoomUser 1, // 197: hyapp.room.v1.ApplyRoomRPSGiftResponse.result:type_name -> hyapp.room.v1.CommandResult
3, // 198: hyapp.room.v1.ListRoomOnlineUsersResponse.items:type_name -> hyapp.room.v1.RoomOnlineUser 13, // 198: hyapp.room.v1.ApplyRoomRPSGiftResponse.rocket:type_name -> hyapp.room.v1.RoomRocketState
0, // 199: hyapp.room.v1.ListRoomBannedUsersRequest.meta:type_name -> hyapp.room.v1.RequestMeta 0, // 199: hyapp.room.v1.ListRoomOnlineUsersRequest.meta:type_name -> hyapp.room.v1.RequestMeta
163, // 200: hyapp.room.v1.ListRoomBannedUsersResponse.items:type_name -> hyapp.room.v1.RoomBannedUser 2, // 200: hyapp.room.v1.ListRoomOnlineUsersResponse.users:type_name -> hyapp.room.v1.RoomUser
0, // 201: hyapp.room.v1.FollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta 3, // 201: hyapp.room.v1.ListRoomOnlineUsersResponse.items:type_name -> hyapp.room.v1.RoomOnlineUser
0, // 202: hyapp.room.v1.UnfollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta 0, // 202: hyapp.room.v1.ListRoomBannedUsersRequest.meta:type_name -> hyapp.room.v1.RequestMeta
7, // 203: hyapp.room.v1.SendGiftResultV2.lucky_gift:type_name -> hyapp.room.v1.LuckyGiftDrawResult 165, // 203: hyapp.room.v1.ListRoomBannedUsersResponse.items:type_name -> hyapp.room.v1.RoomBannedUser
7, // 204: hyapp.room.v1.SendGiftResultV2.lucky_gifts:type_name -> hyapp.room.v1.LuckyGiftDrawResult 0, // 204: hyapp.room.v1.FollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
170, // 205: hyapp.room.v1.SendGiftResultV2.lucky_hits:type_name -> hyapp.room.v1.SendGiftLuckyHit 0, // 205: hyapp.room.v1.UnfollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
129, // 206: hyapp.room.v1.SendGiftResultV2.batch_display:type_name -> hyapp.room.v1.SendGiftBatchDisplay 7, // 206: hyapp.room.v1.SendGiftResultV2.lucky_gift:type_name -> hyapp.room.v1.LuckyGiftDrawResult
5, // 207: hyapp.room.v1.SendGiftResultV2.gift_rank:type_name -> hyapp.room.v1.RankItem 7, // 207: hyapp.room.v1.SendGiftResultV2.lucky_gifts:type_name -> hyapp.room.v1.LuckyGiftDrawResult
72, // 208: hyapp.room.v1.RoomCommandService.CreateRoom:input_type -> hyapp.room.v1.CreateRoomRequest 172, // 208: hyapp.room.v1.SendGiftResultV2.lucky_hits:type_name -> hyapp.room.v1.SendGiftLuckyHit
74, // 209: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:input_type -> hyapp.room.v1.UpdateRoomProfileRequest 129, // 209: hyapp.room.v1.SendGiftResultV2.batch_display:type_name -> hyapp.room.v1.SendGiftBatchDisplay
57, // 210: hyapp.room.v1.RoomCommandService.SaveRoomBackground:input_type -> hyapp.room.v1.SaveRoomBackgroundRequest 5, // 210: hyapp.room.v1.SendGiftResultV2.gift_rank:type_name -> hyapp.room.v1.RankItem
61, // 211: hyapp.room.v1.RoomCommandService.SetRoomBackground:input_type -> hyapp.room.v1.SetRoomBackgroundRequest 72, // 211: hyapp.room.v1.RoomCommandService.CreateRoom:input_type -> hyapp.room.v1.CreateRoomRequest
64, // 212: hyapp.room.v1.RoomCommandService.ApplyRoomDecoration:input_type -> hyapp.room.v1.ApplyRoomDecorationRequest 74, // 212: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:input_type -> hyapp.room.v1.UpdateRoomProfileRequest
70, // 213: hyapp.room.v1.RoomCommandService.SendRoomImage:input_type -> hyapp.room.v1.SendRoomImageRequest 57, // 213: hyapp.room.v1.RoomCommandService.SaveRoomBackground:input_type -> hyapp.room.v1.SaveRoomBackgroundRequest
78, // 214: hyapp.room.v1.RoomCommandService.JoinRoom:input_type -> hyapp.room.v1.JoinRoomRequest 61, // 214: hyapp.room.v1.RoomCommandService.SetRoomBackground:input_type -> hyapp.room.v1.SetRoomBackgroundRequest
81, // 215: hyapp.room.v1.RoomCommandService.RoomHeartbeat:input_type -> hyapp.room.v1.RoomHeartbeatRequest 64, // 215: hyapp.room.v1.RoomCommandService.ApplyRoomDecoration:input_type -> hyapp.room.v1.ApplyRoomDecorationRequest
83, // 216: hyapp.room.v1.RoomCommandService.LeaveRoom:input_type -> hyapp.room.v1.LeaveRoomRequest 70, // 216: hyapp.room.v1.RoomCommandService.SendRoomImage:input_type -> hyapp.room.v1.SendRoomImageRequest
85, // 217: hyapp.room.v1.RoomCommandService.CloseRoom:input_type -> hyapp.room.v1.CloseRoomRequest 78, // 217: hyapp.room.v1.RoomCommandService.JoinRoom:input_type -> hyapp.room.v1.JoinRoomRequest
92, // 218: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:input_type -> hyapp.room.v1.AdminUpdateRoomRequest 81, // 218: hyapp.room.v1.RoomCommandService.RoomHeartbeat:input_type -> hyapp.room.v1.RoomHeartbeatRequest
94, // 219: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:input_type -> hyapp.room.v1.AdminDeleteRoomRequest 83, // 219: hyapp.room.v1.RoomCommandService.LeaveRoom:input_type -> hyapp.room.v1.LeaveRoomRequest
19, // 220: hyapp.room.v1.RoomCommandService.AdminUpdateRoomRocketConfig:input_type -> hyapp.room.v1.AdminUpdateRoomRocketConfigRequest 85, // 220: hyapp.room.v1.RoomCommandService.CloseRoom:input_type -> hyapp.room.v1.CloseRoomRequest
24, // 221: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:input_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigRequest 92, // 221: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:input_type -> hyapp.room.v1.AdminUpdateRoomRequest
31, // 222: hyapp.room.v1.RoomCommandService.AdminUpdateHumanRoomRobotConfig:input_type -> hyapp.room.v1.AdminUpdateHumanRoomRobotConfigRequest 94, // 222: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:input_type -> hyapp.room.v1.AdminDeleteRoomRequest
37, // 223: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:input_type -> hyapp.room.v1.AdminCreateRoomPinRequest 19, // 223: hyapp.room.v1.RoomCommandService.AdminUpdateRoomRocketConfig:input_type -> hyapp.room.v1.AdminUpdateRoomRocketConfigRequest
39, // 224: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:input_type -> hyapp.room.v1.AdminCancelRoomPinRequest 24, // 224: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:input_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigRequest
45, // 225: hyapp.room.v1.RoomCommandService.AdminCreateRobotRoom:input_type -> hyapp.room.v1.AdminCreateRobotRoomRequest 31, // 225: hyapp.room.v1.RoomCommandService.AdminUpdateHumanRoomRobotConfig:input_type -> hyapp.room.v1.AdminUpdateHumanRoomRobotConfigRequest
47, // 226: hyapp.room.v1.RoomCommandService.AdminSetRobotRoomStatus:input_type -> hyapp.room.v1.AdminSetRobotRoomStatusRequest 37, // 226: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:input_type -> hyapp.room.v1.AdminCreateRoomPinRequest
49, // 227: hyapp.room.v1.RoomCommandService.AdminRenameOwnerCountryCode:input_type -> hyapp.room.v1.AdminRenameOwnerCountryCodeRequest 39, // 227: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:input_type -> hyapp.room.v1.AdminCancelRoomPinRequest
96, // 228: hyapp.room.v1.RoomCommandService.MicUp:input_type -> hyapp.room.v1.MicUpRequest 45, // 228: hyapp.room.v1.RoomCommandService.AdminCreateRobotRoom:input_type -> hyapp.room.v1.AdminCreateRobotRoomRequest
98, // 229: hyapp.room.v1.RoomCommandService.MicDown:input_type -> hyapp.room.v1.MicDownRequest 47, // 229: hyapp.room.v1.RoomCommandService.AdminSetRobotRoomStatus:input_type -> hyapp.room.v1.AdminSetRobotRoomStatusRequest
100, // 230: hyapp.room.v1.RoomCommandService.ChangeMicSeat:input_type -> hyapp.room.v1.ChangeMicSeatRequest 49, // 230: hyapp.room.v1.RoomCommandService.AdminRenameOwnerCountryCode:input_type -> hyapp.room.v1.AdminRenameOwnerCountryCodeRequest
102, // 231: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:input_type -> hyapp.room.v1.ConfirmMicPublishingRequest 96, // 231: hyapp.room.v1.RoomCommandService.MicUp:input_type -> hyapp.room.v1.MicUpRequest
104, // 232: hyapp.room.v1.RoomCommandService.MicHeartbeat:input_type -> hyapp.room.v1.MicHeartbeatRequest 98, // 232: hyapp.room.v1.RoomCommandService.MicDown:input_type -> hyapp.room.v1.MicDownRequest
106, // 233: hyapp.room.v1.RoomCommandService.SetMicMute:input_type -> hyapp.room.v1.SetMicMuteRequest 100, // 233: hyapp.room.v1.RoomCommandService.ChangeMicSeat:input_type -> hyapp.room.v1.ChangeMicSeatRequest
108, // 234: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:input_type -> hyapp.room.v1.ApplyRTCEventRequest 102, // 234: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:input_type -> hyapp.room.v1.ConfirmMicPublishingRequest
110, // 235: hyapp.room.v1.RoomCommandService.SetMicSeatLock:input_type -> hyapp.room.v1.SetMicSeatLockRequest 104, // 235: hyapp.room.v1.RoomCommandService.MicHeartbeat:input_type -> hyapp.room.v1.MicHeartbeatRequest
112, // 236: hyapp.room.v1.RoomCommandService.SetChatEnabled:input_type -> hyapp.room.v1.SetChatEnabledRequest 106, // 236: hyapp.room.v1.RoomCommandService.SetMicMute:input_type -> hyapp.room.v1.SetMicMuteRequest
114, // 237: hyapp.room.v1.RoomCommandService.SetRoomPassword:input_type -> hyapp.room.v1.SetRoomPasswordRequest 108, // 237: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:input_type -> hyapp.room.v1.ApplyRTCEventRequest
116, // 238: hyapp.room.v1.RoomCommandService.SetRoomAdmin:input_type -> hyapp.room.v1.SetRoomAdminRequest 110, // 238: hyapp.room.v1.RoomCommandService.SetMicSeatLock:input_type -> hyapp.room.v1.SetMicSeatLockRequest
118, // 239: hyapp.room.v1.RoomCommandService.MuteUser:input_type -> hyapp.room.v1.MuteUserRequest 112, // 239: hyapp.room.v1.RoomCommandService.SetChatEnabled:input_type -> hyapp.room.v1.SetChatEnabledRequest
120, // 240: hyapp.room.v1.RoomCommandService.KickUser:input_type -> hyapp.room.v1.KickUserRequest 114, // 240: hyapp.room.v1.RoomCommandService.SetRoomPassword:input_type -> hyapp.room.v1.SetRoomPasswordRequest
122, // 241: hyapp.room.v1.RoomCommandService.UnbanUser:input_type -> hyapp.room.v1.UnbanUserRequest 116, // 241: hyapp.room.v1.RoomCommandService.SetRoomAdmin:input_type -> hyapp.room.v1.SetRoomAdminRequest
124, // 242: hyapp.room.v1.RoomCommandService.SystemEvictUser:input_type -> hyapp.room.v1.SystemEvictUserRequest 118, // 242: hyapp.room.v1.RoomCommandService.MuteUser:input_type -> hyapp.room.v1.MuteUserRequest
130, // 243: hyapp.room.v1.RoomCommandService.SendGift:input_type -> hyapp.room.v1.SendGiftRequest 120, // 243: hyapp.room.v1.RoomCommandService.KickUser:input_type -> hyapp.room.v1.KickUserRequest
166, // 244: hyapp.room.v1.RoomCommandService.FollowRoom:input_type -> hyapp.room.v1.FollowRoomRequest 122, // 244: hyapp.room.v1.RoomCommandService.UnbanUser:input_type -> hyapp.room.v1.UnbanUserRequest
168, // 245: hyapp.room.v1.RoomCommandService.UnfollowRoom:input_type -> hyapp.room.v1.UnfollowRoomRequest 124, // 245: hyapp.room.v1.RoomCommandService.SystemEvictUser:input_type -> hyapp.room.v1.SystemEvictUserRequest
132, // 246: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:input_type -> hyapp.room.v1.CheckSpeakPermissionRequest 130, // 246: hyapp.room.v1.RoomCommandService.SendGift:input_type -> hyapp.room.v1.SendGiftRequest
134, // 247: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:input_type -> hyapp.room.v1.VerifyRoomPresenceRequest 161, // 247: hyapp.room.v1.RoomCommandService.ApplyRoomRPSGift:input_type -> hyapp.room.v1.ApplyRoomRPSGiftRequest
136, // 248: hyapp.room.v1.RoomGuardService.ResolveRoomAppCode:input_type -> hyapp.room.v1.ResolveRoomAppCodeRequest 168, // 248: hyapp.room.v1.RoomCommandService.FollowRoom:input_type -> hyapp.room.v1.FollowRoomRequest
66, // 249: hyapp.room.v1.RoomGuardService.AuthorizeRoomMediaUpload:input_type -> hyapp.room.v1.AuthorizeRoomMediaUploadRequest 170, // 249: hyapp.room.v1.RoomCommandService.UnfollowRoom:input_type -> hyapp.room.v1.UnfollowRoomRequest
68, // 250: hyapp.room.v1.RoomGuardService.CompleteRoomMediaUpload:input_type -> hyapp.room.v1.CompleteRoomMediaUploadRequest 132, // 250: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:input_type -> hyapp.room.v1.CheckSpeakPermissionRequest
88, // 251: hyapp.room.v1.RoomQueryService.AdminListRooms:input_type -> hyapp.room.v1.AdminListRoomsRequest 134, // 251: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:input_type -> hyapp.room.v1.VerifyRoomPresenceRequest
90, // 252: hyapp.room.v1.RoomQueryService.AdminGetRoom:input_type -> hyapp.room.v1.AdminGetRoomRequest 136, // 252: hyapp.room.v1.RoomGuardService.ResolveRoomAppCode:input_type -> hyapp.room.v1.ResolveRoomAppCodeRequest
17, // 253: hyapp.room.v1.RoomQueryService.AdminGetRoomRocketConfig:input_type -> hyapp.room.v1.AdminGetRoomRocketConfigRequest 66, // 253: hyapp.room.v1.RoomGuardService.AuthorizeRoomMediaUpload:input_type -> hyapp.room.v1.AuthorizeRoomMediaUploadRequest
22, // 254: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:input_type -> hyapp.room.v1.AdminGetRoomSeatConfigRequest 68, // 254: hyapp.room.v1.RoomGuardService.CompleteRoomMediaUpload:input_type -> hyapp.room.v1.CompleteRoomMediaUploadRequest
29, // 255: hyapp.room.v1.RoomQueryService.AdminGetHumanRoomRobotConfig:input_type -> hyapp.room.v1.AdminGetHumanRoomRobotConfigRequest 88, // 255: hyapp.room.v1.RoomQueryService.AdminListRooms:input_type -> hyapp.room.v1.AdminListRoomsRequest
35, // 256: hyapp.room.v1.RoomQueryService.AdminListRoomPins:input_type -> hyapp.room.v1.AdminListRoomPinsRequest 90, // 256: hyapp.room.v1.RoomQueryService.AdminGetRoom:input_type -> hyapp.room.v1.AdminGetRoomRequest
43, // 257: hyapp.room.v1.RoomQueryService.AdminListRobotRooms:input_type -> hyapp.room.v1.AdminListRobotRoomsRequest 17, // 257: hyapp.room.v1.RoomQueryService.AdminGetRoomRocketConfig:input_type -> hyapp.room.v1.AdminGetRoomRocketConfigRequest
51, // 258: hyapp.room.v1.RoomQueryService.AdminFilterAvailableRoomRobots:input_type -> hyapp.room.v1.AdminFilterAvailableRoomRobotsRequest 22, // 258: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:input_type -> hyapp.room.v1.AdminGetRoomSeatConfigRequest
138, // 259: hyapp.room.v1.RoomQueryService.ListRooms:input_type -> hyapp.room.v1.ListRoomsRequest 29, // 259: hyapp.room.v1.RoomQueryService.AdminGetHumanRoomRobotConfig:input_type -> hyapp.room.v1.AdminGetHumanRoomRobotConfigRequest
139, // 260: hyapp.room.v1.RoomQueryService.ListRoomsByOwners:input_type -> hyapp.room.v1.ListRoomsByOwnersRequest 35, // 260: hyapp.room.v1.RoomQueryService.AdminListRoomPins:input_type -> hyapp.room.v1.AdminListRoomPinsRequest
140, // 261: hyapp.room.v1.RoomQueryService.ListRoomFeeds:input_type -> hyapp.room.v1.ListRoomFeedsRequest 43, // 261: hyapp.room.v1.RoomQueryService.AdminListRobotRooms:input_type -> hyapp.room.v1.AdminListRobotRoomsRequest
141, // 262: hyapp.room.v1.RoomQueryService.ListRoomGiftLeaderboard:input_type -> hyapp.room.v1.ListRoomGiftLeaderboardRequest 51, // 262: hyapp.room.v1.RoomQueryService.AdminFilterAvailableRoomRobots:input_type -> hyapp.room.v1.AdminFilterAvailableRoomRobotsRequest
147, // 263: hyapp.room.v1.RoomQueryService.ListRoomContributionRank:input_type -> hyapp.room.v1.ListRoomContributionRankRequest 138, // 263: hyapp.room.v1.RoomQueryService.ListRooms:input_type -> hyapp.room.v1.ListRoomsRequest
149, // 264: hyapp.room.v1.RoomQueryService.GetMyRoom:input_type -> hyapp.room.v1.GetMyRoomRequest 139, // 264: hyapp.room.v1.RoomQueryService.ListRoomsByOwners:input_type -> hyapp.room.v1.ListRoomsByOwnersRequest
151, // 265: hyapp.room.v1.RoomQueryService.GetCurrentRoom:input_type -> hyapp.room.v1.GetCurrentRoomRequest 140, // 265: hyapp.room.v1.RoomQueryService.ListRoomFeeds:input_type -> hyapp.room.v1.ListRoomFeedsRequest
153, // 266: hyapp.room.v1.RoomQueryService.BatchGetUserVoiceRoomPresences:input_type -> hyapp.room.v1.BatchGetUserVoiceRoomPresencesRequest 141, // 266: hyapp.room.v1.RoomQueryService.ListRoomGiftLeaderboard:input_type -> hyapp.room.v1.ListRoomGiftLeaderboardRequest
157, // 267: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:input_type -> hyapp.room.v1.GetRoomSnapshotRequest 147, // 267: hyapp.room.v1.RoomQueryService.ListRoomContributionRank:input_type -> hyapp.room.v1.ListRoomContributionRankRequest
59, // 268: hyapp.room.v1.RoomQueryService.ListRoomBackgrounds:input_type -> hyapp.room.v1.ListRoomBackgroundsRequest 149, // 268: hyapp.room.v1.RoomQueryService.GetMyRoom:input_type -> hyapp.room.v1.GetMyRoomRequest
159, // 269: hyapp.room.v1.RoomQueryService.GetRoomRocket:input_type -> hyapp.room.v1.GetRoomRocketRequest 151, // 269: hyapp.room.v1.RoomQueryService.GetCurrentRoom:input_type -> hyapp.room.v1.GetCurrentRoomRequest
161, // 270: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:input_type -> hyapp.room.v1.ListRoomOnlineUsersRequest 153, // 270: hyapp.room.v1.RoomQueryService.BatchGetUserVoiceRoomPresences:input_type -> hyapp.room.v1.BatchGetUserVoiceRoomPresencesRequest
164, // 271: hyapp.room.v1.RoomQueryService.ListRoomBannedUsers:input_type -> hyapp.room.v1.ListRoomBannedUsersRequest 157, // 271: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:input_type -> hyapp.room.v1.GetRoomSnapshotRequest
73, // 272: hyapp.room.v1.RoomCommandService.CreateRoom:output_type -> hyapp.room.v1.CreateRoomResponse 59, // 272: hyapp.room.v1.RoomQueryService.ListRoomBackgrounds:input_type -> hyapp.room.v1.ListRoomBackgroundsRequest
75, // 273: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:output_type -> hyapp.room.v1.UpdateRoomProfileResponse 159, // 273: hyapp.room.v1.RoomQueryService.GetRoomRocket:input_type -> hyapp.room.v1.GetRoomRocketRequest
58, // 274: hyapp.room.v1.RoomCommandService.SaveRoomBackground:output_type -> hyapp.room.v1.SaveRoomBackgroundResponse 163, // 274: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:input_type -> hyapp.room.v1.ListRoomOnlineUsersRequest
62, // 275: hyapp.room.v1.RoomCommandService.SetRoomBackground:output_type -> hyapp.room.v1.SetRoomBackgroundResponse 166, // 275: hyapp.room.v1.RoomQueryService.ListRoomBannedUsers:input_type -> hyapp.room.v1.ListRoomBannedUsersRequest
65, // 276: hyapp.room.v1.RoomCommandService.ApplyRoomDecoration:output_type -> hyapp.room.v1.ApplyRoomDecorationResponse 73, // 276: hyapp.room.v1.RoomCommandService.CreateRoom:output_type -> hyapp.room.v1.CreateRoomResponse
71, // 277: hyapp.room.v1.RoomCommandService.SendRoomImage:output_type -> hyapp.room.v1.SendRoomImageResponse 75, // 277: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:output_type -> hyapp.room.v1.UpdateRoomProfileResponse
80, // 278: hyapp.room.v1.RoomCommandService.JoinRoom:output_type -> hyapp.room.v1.JoinRoomResponse 58, // 278: hyapp.room.v1.RoomCommandService.SaveRoomBackground:output_type -> hyapp.room.v1.SaveRoomBackgroundResponse
82, // 279: hyapp.room.v1.RoomCommandService.RoomHeartbeat:output_type -> hyapp.room.v1.RoomHeartbeatResponse 62, // 279: hyapp.room.v1.RoomCommandService.SetRoomBackground:output_type -> hyapp.room.v1.SetRoomBackgroundResponse
84, // 280: hyapp.room.v1.RoomCommandService.LeaveRoom:output_type -> hyapp.room.v1.LeaveRoomResponse 65, // 280: hyapp.room.v1.RoomCommandService.ApplyRoomDecoration:output_type -> hyapp.room.v1.ApplyRoomDecorationResponse
86, // 281: hyapp.room.v1.RoomCommandService.CloseRoom:output_type -> hyapp.room.v1.CloseRoomResponse 71, // 281: hyapp.room.v1.RoomCommandService.SendRoomImage:output_type -> hyapp.room.v1.SendRoomImageResponse
93, // 282: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:output_type -> hyapp.room.v1.AdminUpdateRoomResponse 80, // 282: hyapp.room.v1.RoomCommandService.JoinRoom:output_type -> hyapp.room.v1.JoinRoomResponse
95, // 283: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:output_type -> hyapp.room.v1.AdminDeleteRoomResponse 82, // 283: hyapp.room.v1.RoomCommandService.RoomHeartbeat:output_type -> hyapp.room.v1.RoomHeartbeatResponse
20, // 284: hyapp.room.v1.RoomCommandService.AdminUpdateRoomRocketConfig:output_type -> hyapp.room.v1.AdminUpdateRoomRocketConfigResponse 84, // 284: hyapp.room.v1.RoomCommandService.LeaveRoom:output_type -> hyapp.room.v1.LeaveRoomResponse
25, // 285: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:output_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigResponse 86, // 285: hyapp.room.v1.RoomCommandService.CloseRoom:output_type -> hyapp.room.v1.CloseRoomResponse
32, // 286: hyapp.room.v1.RoomCommandService.AdminUpdateHumanRoomRobotConfig:output_type -> hyapp.room.v1.AdminUpdateHumanRoomRobotConfigResponse 93, // 286: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:output_type -> hyapp.room.v1.AdminUpdateRoomResponse
38, // 287: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:output_type -> hyapp.room.v1.AdminCreateRoomPinResponse 95, // 287: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:output_type -> hyapp.room.v1.AdminDeleteRoomResponse
40, // 288: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:output_type -> hyapp.room.v1.AdminCancelRoomPinResponse 20, // 288: hyapp.room.v1.RoomCommandService.AdminUpdateRoomRocketConfig:output_type -> hyapp.room.v1.AdminUpdateRoomRocketConfigResponse
46, // 289: hyapp.room.v1.RoomCommandService.AdminCreateRobotRoom:output_type -> hyapp.room.v1.AdminCreateRobotRoomResponse 25, // 289: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:output_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigResponse
48, // 290: hyapp.room.v1.RoomCommandService.AdminSetRobotRoomStatus:output_type -> hyapp.room.v1.AdminSetRobotRoomStatusResponse 32, // 290: hyapp.room.v1.RoomCommandService.AdminUpdateHumanRoomRobotConfig:output_type -> hyapp.room.v1.AdminUpdateHumanRoomRobotConfigResponse
50, // 291: hyapp.room.v1.RoomCommandService.AdminRenameOwnerCountryCode:output_type -> hyapp.room.v1.AdminRenameOwnerCountryCodeResponse 38, // 291: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:output_type -> hyapp.room.v1.AdminCreateRoomPinResponse
97, // 292: hyapp.room.v1.RoomCommandService.MicUp:output_type -> hyapp.room.v1.MicUpResponse 40, // 292: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:output_type -> hyapp.room.v1.AdminCancelRoomPinResponse
99, // 293: hyapp.room.v1.RoomCommandService.MicDown:output_type -> hyapp.room.v1.MicDownResponse 46, // 293: hyapp.room.v1.RoomCommandService.AdminCreateRobotRoom:output_type -> hyapp.room.v1.AdminCreateRobotRoomResponse
101, // 294: hyapp.room.v1.RoomCommandService.ChangeMicSeat:output_type -> hyapp.room.v1.ChangeMicSeatResponse 48, // 294: hyapp.room.v1.RoomCommandService.AdminSetRobotRoomStatus:output_type -> hyapp.room.v1.AdminSetRobotRoomStatusResponse
103, // 295: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:output_type -> hyapp.room.v1.ConfirmMicPublishingResponse 50, // 295: hyapp.room.v1.RoomCommandService.AdminRenameOwnerCountryCode:output_type -> hyapp.room.v1.AdminRenameOwnerCountryCodeResponse
105, // 296: hyapp.room.v1.RoomCommandService.MicHeartbeat:output_type -> hyapp.room.v1.MicHeartbeatResponse 97, // 296: hyapp.room.v1.RoomCommandService.MicUp:output_type -> hyapp.room.v1.MicUpResponse
107, // 297: hyapp.room.v1.RoomCommandService.SetMicMute:output_type -> hyapp.room.v1.SetMicMuteResponse 99, // 297: hyapp.room.v1.RoomCommandService.MicDown:output_type -> hyapp.room.v1.MicDownResponse
109, // 298: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:output_type -> hyapp.room.v1.ApplyRTCEventResponse 101, // 298: hyapp.room.v1.RoomCommandService.ChangeMicSeat:output_type -> hyapp.room.v1.ChangeMicSeatResponse
111, // 299: hyapp.room.v1.RoomCommandService.SetMicSeatLock:output_type -> hyapp.room.v1.SetMicSeatLockResponse 103, // 299: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:output_type -> hyapp.room.v1.ConfirmMicPublishingResponse
113, // 300: hyapp.room.v1.RoomCommandService.SetChatEnabled:output_type -> hyapp.room.v1.SetChatEnabledResponse 105, // 300: hyapp.room.v1.RoomCommandService.MicHeartbeat:output_type -> hyapp.room.v1.MicHeartbeatResponse
115, // 301: hyapp.room.v1.RoomCommandService.SetRoomPassword:output_type -> hyapp.room.v1.SetRoomPasswordResponse 107, // 301: hyapp.room.v1.RoomCommandService.SetMicMute:output_type -> hyapp.room.v1.SetMicMuteResponse
117, // 302: hyapp.room.v1.RoomCommandService.SetRoomAdmin:output_type -> hyapp.room.v1.SetRoomAdminResponse 109, // 302: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:output_type -> hyapp.room.v1.ApplyRTCEventResponse
119, // 303: hyapp.room.v1.RoomCommandService.MuteUser:output_type -> hyapp.room.v1.MuteUserResponse 111, // 303: hyapp.room.v1.RoomCommandService.SetMicSeatLock:output_type -> hyapp.room.v1.SetMicSeatLockResponse
121, // 304: hyapp.room.v1.RoomCommandService.KickUser:output_type -> hyapp.room.v1.KickUserResponse 113, // 304: hyapp.room.v1.RoomCommandService.SetChatEnabled:output_type -> hyapp.room.v1.SetChatEnabledResponse
123, // 305: hyapp.room.v1.RoomCommandService.UnbanUser:output_type -> hyapp.room.v1.UnbanUserResponse 115, // 305: hyapp.room.v1.RoomCommandService.SetRoomPassword:output_type -> hyapp.room.v1.SetRoomPasswordResponse
125, // 306: hyapp.room.v1.RoomCommandService.SystemEvictUser:output_type -> hyapp.room.v1.SystemEvictUserResponse 117, // 306: hyapp.room.v1.RoomCommandService.SetRoomAdmin:output_type -> hyapp.room.v1.SetRoomAdminResponse
131, // 307: hyapp.room.v1.RoomCommandService.SendGift:output_type -> hyapp.room.v1.SendGiftResponse 119, // 307: hyapp.room.v1.RoomCommandService.MuteUser:output_type -> hyapp.room.v1.MuteUserResponse
167, // 308: hyapp.room.v1.RoomCommandService.FollowRoom:output_type -> hyapp.room.v1.FollowRoomResponse 121, // 308: hyapp.room.v1.RoomCommandService.KickUser:output_type -> hyapp.room.v1.KickUserResponse
169, // 309: hyapp.room.v1.RoomCommandService.UnfollowRoom:output_type -> hyapp.room.v1.UnfollowRoomResponse 123, // 309: hyapp.room.v1.RoomCommandService.UnbanUser:output_type -> hyapp.room.v1.UnbanUserResponse
133, // 310: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:output_type -> hyapp.room.v1.CheckSpeakPermissionResponse 125, // 310: hyapp.room.v1.RoomCommandService.SystemEvictUser:output_type -> hyapp.room.v1.SystemEvictUserResponse
135, // 311: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:output_type -> hyapp.room.v1.VerifyRoomPresenceResponse 131, // 311: hyapp.room.v1.RoomCommandService.SendGift:output_type -> hyapp.room.v1.SendGiftResponse
137, // 312: hyapp.room.v1.RoomGuardService.ResolveRoomAppCode:output_type -> hyapp.room.v1.ResolveRoomAppCodeResponse 162, // 312: hyapp.room.v1.RoomCommandService.ApplyRoomRPSGift:output_type -> hyapp.room.v1.ApplyRoomRPSGiftResponse
67, // 313: hyapp.room.v1.RoomGuardService.AuthorizeRoomMediaUpload:output_type -> hyapp.room.v1.AuthorizeRoomMediaUploadResponse 169, // 313: hyapp.room.v1.RoomCommandService.FollowRoom:output_type -> hyapp.room.v1.FollowRoomResponse
69, // 314: hyapp.room.v1.RoomGuardService.CompleteRoomMediaUpload:output_type -> hyapp.room.v1.CompleteRoomMediaUploadResponse 171, // 314: hyapp.room.v1.RoomCommandService.UnfollowRoom:output_type -> hyapp.room.v1.UnfollowRoomResponse
89, // 315: hyapp.room.v1.RoomQueryService.AdminListRooms:output_type -> hyapp.room.v1.AdminListRoomsResponse 133, // 315: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:output_type -> hyapp.room.v1.CheckSpeakPermissionResponse
91, // 316: hyapp.room.v1.RoomQueryService.AdminGetRoom:output_type -> hyapp.room.v1.AdminGetRoomResponse 135, // 316: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:output_type -> hyapp.room.v1.VerifyRoomPresenceResponse
18, // 317: hyapp.room.v1.RoomQueryService.AdminGetRoomRocketConfig:output_type -> hyapp.room.v1.AdminGetRoomRocketConfigResponse 137, // 317: hyapp.room.v1.RoomGuardService.ResolveRoomAppCode:output_type -> hyapp.room.v1.ResolveRoomAppCodeResponse
23, // 318: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:output_type -> hyapp.room.v1.AdminGetRoomSeatConfigResponse 67, // 318: hyapp.room.v1.RoomGuardService.AuthorizeRoomMediaUpload:output_type -> hyapp.room.v1.AuthorizeRoomMediaUploadResponse
30, // 319: hyapp.room.v1.RoomQueryService.AdminGetHumanRoomRobotConfig:output_type -> hyapp.room.v1.AdminGetHumanRoomRobotConfigResponse 69, // 319: hyapp.room.v1.RoomGuardService.CompleteRoomMediaUpload:output_type -> hyapp.room.v1.CompleteRoomMediaUploadResponse
36, // 320: hyapp.room.v1.RoomQueryService.AdminListRoomPins:output_type -> hyapp.room.v1.AdminListRoomPinsResponse 89, // 320: hyapp.room.v1.RoomQueryService.AdminListRooms:output_type -> hyapp.room.v1.AdminListRoomsResponse
44, // 321: hyapp.room.v1.RoomQueryService.AdminListRobotRooms:output_type -> hyapp.room.v1.AdminListRobotRoomsResponse 91, // 321: hyapp.room.v1.RoomQueryService.AdminGetRoom:output_type -> hyapp.room.v1.AdminGetRoomResponse
52, // 322: hyapp.room.v1.RoomQueryService.AdminFilterAvailableRoomRobots:output_type -> hyapp.room.v1.AdminFilterAvailableRoomRobotsResponse 18, // 322: hyapp.room.v1.RoomQueryService.AdminGetRoomRocketConfig:output_type -> hyapp.room.v1.AdminGetRoomRocketConfigResponse
144, // 323: hyapp.room.v1.RoomQueryService.ListRooms:output_type -> hyapp.room.v1.ListRoomsResponse 23, // 323: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:output_type -> hyapp.room.v1.AdminGetRoomSeatConfigResponse
144, // 324: hyapp.room.v1.RoomQueryService.ListRoomsByOwners:output_type -> hyapp.room.v1.ListRoomsResponse 30, // 324: hyapp.room.v1.RoomQueryService.AdminGetHumanRoomRobotConfig:output_type -> hyapp.room.v1.AdminGetHumanRoomRobotConfigResponse
144, // 325: hyapp.room.v1.RoomQueryService.ListRoomFeeds:output_type -> hyapp.room.v1.ListRoomsResponse 36, // 325: hyapp.room.v1.RoomQueryService.AdminListRoomPins:output_type -> hyapp.room.v1.AdminListRoomPinsResponse
146, // 326: hyapp.room.v1.RoomQueryService.ListRoomGiftLeaderboard:output_type -> hyapp.room.v1.ListRoomGiftLeaderboardResponse 44, // 326: hyapp.room.v1.RoomQueryService.AdminListRobotRooms:output_type -> hyapp.room.v1.AdminListRobotRoomsResponse
148, // 327: hyapp.room.v1.RoomQueryService.ListRoomContributionRank:output_type -> hyapp.room.v1.ListRoomContributionRankResponse 52, // 327: hyapp.room.v1.RoomQueryService.AdminFilterAvailableRoomRobots:output_type -> hyapp.room.v1.AdminFilterAvailableRoomRobotsResponse
150, // 328: hyapp.room.v1.RoomQueryService.GetMyRoom:output_type -> hyapp.room.v1.GetMyRoomResponse 144, // 328: hyapp.room.v1.RoomQueryService.ListRooms:output_type -> hyapp.room.v1.ListRoomsResponse
152, // 329: hyapp.room.v1.RoomQueryService.GetCurrentRoom:output_type -> hyapp.room.v1.GetCurrentRoomResponse 144, // 329: hyapp.room.v1.RoomQueryService.ListRoomsByOwners:output_type -> hyapp.room.v1.ListRoomsResponse
156, // 330: hyapp.room.v1.RoomQueryService.BatchGetUserVoiceRoomPresences:output_type -> hyapp.room.v1.BatchGetUserVoiceRoomPresencesResponse 144, // 330: hyapp.room.v1.RoomQueryService.ListRoomFeeds:output_type -> hyapp.room.v1.ListRoomsResponse
158, // 331: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:output_type -> hyapp.room.v1.GetRoomSnapshotResponse 146, // 331: hyapp.room.v1.RoomQueryService.ListRoomGiftLeaderboard:output_type -> hyapp.room.v1.ListRoomGiftLeaderboardResponse
60, // 332: hyapp.room.v1.RoomQueryService.ListRoomBackgrounds:output_type -> hyapp.room.v1.ListRoomBackgroundsResponse 148, // 332: hyapp.room.v1.RoomQueryService.ListRoomContributionRank:output_type -> hyapp.room.v1.ListRoomContributionRankResponse
160, // 333: hyapp.room.v1.RoomQueryService.GetRoomRocket:output_type -> hyapp.room.v1.GetRoomRocketResponse 150, // 333: hyapp.room.v1.RoomQueryService.GetMyRoom:output_type -> hyapp.room.v1.GetMyRoomResponse
162, // 334: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:output_type -> hyapp.room.v1.ListRoomOnlineUsersResponse 152, // 334: hyapp.room.v1.RoomQueryService.GetCurrentRoom:output_type -> hyapp.room.v1.GetCurrentRoomResponse
165, // 335: hyapp.room.v1.RoomQueryService.ListRoomBannedUsers:output_type -> hyapp.room.v1.ListRoomBannedUsersResponse 156, // 335: hyapp.room.v1.RoomQueryService.BatchGetUserVoiceRoomPresences:output_type -> hyapp.room.v1.BatchGetUserVoiceRoomPresencesResponse
272, // [272:336] is the sub-list for method output_type 158, // 336: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:output_type -> hyapp.room.v1.GetRoomSnapshotResponse
208, // [208:272] is the sub-list for method input_type 60, // 337: hyapp.room.v1.RoomQueryService.ListRoomBackgrounds:output_type -> hyapp.room.v1.ListRoomBackgroundsResponse
208, // [208:208] is the sub-list for extension type_name 160, // 338: hyapp.room.v1.RoomQueryService.GetRoomRocket:output_type -> hyapp.room.v1.GetRoomRocketResponse
208, // [208:208] is the sub-list for extension extendee 164, // 339: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:output_type -> hyapp.room.v1.ListRoomOnlineUsersResponse
0, // [0:208] is the sub-list for field type_name 167, // 340: hyapp.room.v1.RoomQueryService.ListRoomBannedUsers:output_type -> hyapp.room.v1.ListRoomBannedUsersResponse
276, // [276:341] is the sub-list for method output_type
211, // [211:276] is the sub-list for method input_type
211, // [211:211] is the sub-list for extension type_name
211, // [211:211] is the sub-list for extension extendee
0, // [0:211] is the sub-list for field type_name
} }
func init() { file_proto_room_v1_room_proto_init() } func init() { file_proto_room_v1_room_proto_init() }
@ -15820,7 +15977,7 @@ func file_proto_room_v1_room_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_room_v1_room_proto_rawDesc), len(file_proto_room_v1_room_proto_rawDesc)), RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_room_v1_room_proto_rawDesc), len(file_proto_room_v1_room_proto_rawDesc)),
NumEnums: 0, NumEnums: 0,
NumMessages: 173, NumMessages: 175,
NumExtensions: 0, NumExtensions: 0,
NumServices: 3, NumServices: 3,
}, },

View File

@ -1595,6 +1595,22 @@ message GetRoomRocketResponse {
int64 server_time_ms = 2; int64 server_time_ms = 2;
} }
// ApplyRoomRPSGiftRequest room-rps
// game-service 退退
message ApplyRoomRPSGiftRequest {
RequestMeta meta = 1;
string room_id = 2;
int64 sender_user_id = 3;
int64 target_user_id = 4;
string gift_id = 5;
int64 heat_value = 6;
}
message ApplyRoomRPSGiftResponse {
CommandResult result = 1;
RoomRocketState rocket = 2;
}
// ListRoomOnlineUsersRequest 线 RoomSnapshot // ListRoomOnlineUsersRequest 线 RoomSnapshot
message ListRoomOnlineUsersRequest { message ListRoomOnlineUsersRequest {
RequestMeta meta = 1; RequestMeta meta = 1;
@ -1708,6 +1724,8 @@ service RoomCommandService {
rpc UnbanUser(UnbanUserRequest) returns (UnbanUserResponse); rpc UnbanUser(UnbanUserRequest) returns (UnbanUserResponse);
rpc SystemEvictUser(SystemEvictUserRequest) returns (SystemEvictUserResponse); rpc SystemEvictUser(SystemEvictUserRequest) returns (SystemEvictUserResponse);
rpc SendGift(SendGiftRequest) returns (SendGiftResponse); rpc SendGift(SendGiftRequest) returns (SendGiftResponse);
// ApplyRoomRPSGift game-service 退Room Cell owner
rpc ApplyRoomRPSGift(ApplyRoomRPSGiftRequest) returns (ApplyRoomRPSGiftResponse);
rpc FollowRoom(FollowRoomRequest) returns (FollowRoomResponse); rpc FollowRoom(FollowRoomRequest) returns (FollowRoomResponse);
rpc UnfollowRoom(UnfollowRoomRequest) returns (UnfollowRoomResponse); rpc UnfollowRoom(UnfollowRoomRequest) returns (UnfollowRoomResponse);
} }

View File

@ -55,6 +55,7 @@ const (
RoomCommandService_UnbanUser_FullMethodName = "/hyapp.room.v1.RoomCommandService/UnbanUser" RoomCommandService_UnbanUser_FullMethodName = "/hyapp.room.v1.RoomCommandService/UnbanUser"
RoomCommandService_SystemEvictUser_FullMethodName = "/hyapp.room.v1.RoomCommandService/SystemEvictUser" RoomCommandService_SystemEvictUser_FullMethodName = "/hyapp.room.v1.RoomCommandService/SystemEvictUser"
RoomCommandService_SendGift_FullMethodName = "/hyapp.room.v1.RoomCommandService/SendGift" RoomCommandService_SendGift_FullMethodName = "/hyapp.room.v1.RoomCommandService/SendGift"
RoomCommandService_ApplyRoomRPSGift_FullMethodName = "/hyapp.room.v1.RoomCommandService/ApplyRoomRPSGift"
RoomCommandService_FollowRoom_FullMethodName = "/hyapp.room.v1.RoomCommandService/FollowRoom" RoomCommandService_FollowRoom_FullMethodName = "/hyapp.room.v1.RoomCommandService/FollowRoom"
RoomCommandService_UnfollowRoom_FullMethodName = "/hyapp.room.v1.RoomCommandService/UnfollowRoom" RoomCommandService_UnfollowRoom_FullMethodName = "/hyapp.room.v1.RoomCommandService/UnfollowRoom"
) )
@ -101,6 +102,8 @@ type RoomCommandServiceClient interface {
UnbanUser(ctx context.Context, in *UnbanUserRequest, opts ...grpc.CallOption) (*UnbanUserResponse, error) UnbanUser(ctx context.Context, in *UnbanUserRequest, opts ...grpc.CallOption) (*UnbanUserResponse, error)
SystemEvictUser(ctx context.Context, in *SystemEvictUserRequest, opts ...grpc.CallOption) (*SystemEvictUserResponse, error) SystemEvictUser(ctx context.Context, in *SystemEvictUserRequest, opts ...grpc.CallOption) (*SystemEvictUserResponse, error)
SendGift(ctx context.Context, in *SendGiftRequest, opts ...grpc.CallOption) (*SendGiftResponse, error) SendGift(ctx context.Context, in *SendGiftRequest, opts ...grpc.CallOption) (*SendGiftResponse, error)
// ApplyRoomRPSGift 由 game-service 在赢家退款成功后调用Room Cell 仍是火箭状态唯一 owner。
ApplyRoomRPSGift(ctx context.Context, in *ApplyRoomRPSGiftRequest, opts ...grpc.CallOption) (*ApplyRoomRPSGiftResponse, error)
FollowRoom(ctx context.Context, in *FollowRoomRequest, opts ...grpc.CallOption) (*FollowRoomResponse, error) FollowRoom(ctx context.Context, in *FollowRoomRequest, opts ...grpc.CallOption) (*FollowRoomResponse, error)
UnfollowRoom(ctx context.Context, in *UnfollowRoomRequest, opts ...grpc.CallOption) (*UnfollowRoomResponse, error) UnfollowRoom(ctx context.Context, in *UnfollowRoomRequest, opts ...grpc.CallOption) (*UnfollowRoomResponse, error)
} }
@ -473,6 +476,16 @@ func (c *roomCommandServiceClient) SendGift(ctx context.Context, in *SendGiftReq
return out, nil return out, nil
} }
func (c *roomCommandServiceClient) ApplyRoomRPSGift(ctx context.Context, in *ApplyRoomRPSGiftRequest, opts ...grpc.CallOption) (*ApplyRoomRPSGiftResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ApplyRoomRPSGiftResponse)
err := c.cc.Invoke(ctx, RoomCommandService_ApplyRoomRPSGift_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *roomCommandServiceClient) FollowRoom(ctx context.Context, in *FollowRoomRequest, opts ...grpc.CallOption) (*FollowRoomResponse, error) { func (c *roomCommandServiceClient) FollowRoom(ctx context.Context, in *FollowRoomRequest, opts ...grpc.CallOption) (*FollowRoomResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(FollowRoomResponse) out := new(FollowRoomResponse)
@ -535,6 +548,8 @@ type RoomCommandServiceServer interface {
UnbanUser(context.Context, *UnbanUserRequest) (*UnbanUserResponse, error) UnbanUser(context.Context, *UnbanUserRequest) (*UnbanUserResponse, error)
SystemEvictUser(context.Context, *SystemEvictUserRequest) (*SystemEvictUserResponse, error) SystemEvictUser(context.Context, *SystemEvictUserRequest) (*SystemEvictUserResponse, error)
SendGift(context.Context, *SendGiftRequest) (*SendGiftResponse, error) SendGift(context.Context, *SendGiftRequest) (*SendGiftResponse, error)
// ApplyRoomRPSGift 由 game-service 在赢家退款成功后调用Room Cell 仍是火箭状态唯一 owner。
ApplyRoomRPSGift(context.Context, *ApplyRoomRPSGiftRequest) (*ApplyRoomRPSGiftResponse, error)
FollowRoom(context.Context, *FollowRoomRequest) (*FollowRoomResponse, error) FollowRoom(context.Context, *FollowRoomRequest) (*FollowRoomResponse, error)
UnfollowRoom(context.Context, *UnfollowRoomRequest) (*UnfollowRoomResponse, error) UnfollowRoom(context.Context, *UnfollowRoomRequest) (*UnfollowRoomResponse, error)
mustEmbedUnimplementedRoomCommandServiceServer() mustEmbedUnimplementedRoomCommandServiceServer()
@ -655,6 +670,9 @@ func (UnimplementedRoomCommandServiceServer) SystemEvictUser(context.Context, *S
func (UnimplementedRoomCommandServiceServer) SendGift(context.Context, *SendGiftRequest) (*SendGiftResponse, error) { func (UnimplementedRoomCommandServiceServer) SendGift(context.Context, *SendGiftRequest) (*SendGiftResponse, error) {
return nil, status.Error(codes.Unimplemented, "method SendGift not implemented") return nil, status.Error(codes.Unimplemented, "method SendGift not implemented")
} }
func (UnimplementedRoomCommandServiceServer) ApplyRoomRPSGift(context.Context, *ApplyRoomRPSGiftRequest) (*ApplyRoomRPSGiftResponse, error) {
return nil, status.Error(codes.Unimplemented, "method ApplyRoomRPSGift not implemented")
}
func (UnimplementedRoomCommandServiceServer) FollowRoom(context.Context, *FollowRoomRequest) (*FollowRoomResponse, error) { func (UnimplementedRoomCommandServiceServer) FollowRoom(context.Context, *FollowRoomRequest) (*FollowRoomResponse, error) {
return nil, status.Error(codes.Unimplemented, "method FollowRoom not implemented") return nil, status.Error(codes.Unimplemented, "method FollowRoom not implemented")
} }
@ -1330,6 +1348,24 @@ func _RoomCommandService_SendGift_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _RoomCommandService_ApplyRoomRPSGift_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ApplyRoomRPSGiftRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RoomCommandServiceServer).ApplyRoomRPSGift(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: RoomCommandService_ApplyRoomRPSGift_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RoomCommandServiceServer).ApplyRoomRPSGift(ctx, req.(*ApplyRoomRPSGiftRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RoomCommandService_FollowRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _RoomCommandService_FollowRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(FollowRoomRequest) in := new(FollowRoomRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -1517,6 +1553,10 @@ var RoomCommandService_ServiceDesc = grpc.ServiceDesc{
MethodName: "SendGift", MethodName: "SendGift",
Handler: _RoomCommandService_SendGift_Handler, Handler: _RoomCommandService_SendGift_Handler,
}, },
{
MethodName: "ApplyRoomRPSGift",
Handler: _RoomCommandService_ApplyRoomRPSGift_Handler,
},
{ {
MethodName: "FollowRoom", MethodName: "FollowRoom",
Handler: _RoomCommandService_FollowRoom_Handler, Handler: _RoomCommandService_FollowRoom_Handler,

View File

@ -8,6 +8,7 @@ wallet_service_addr: "wallet-service:13004"
user_service_addr: "user-service:13005" user_service_addr: "user-service:13005"
activity_service_addr: "activity-service:13006" activity_service_addr: "activity-service:13006"
robot_service_addr: "robot-service:13011" robot_service_addr: "robot-service:13011"
room_service_addr: "room-service:13001"
launch_session_ttl: "15m" launch_session_ttl: "15m"
tencent_im: tencent_im:
# Docker/testbox 联调房内猜拳 PK 房间群消息;必须和 gateway/room 使用同一个 IM 应用。 # Docker/testbox 联调房内猜拳 PK 房间群消息;必须和 gateway/room 使用同一个 IM 应用。

View File

@ -8,6 +8,7 @@ wallet_service_addr: "wallet-service:13004"
user_service_addr: "user-service:13005" user_service_addr: "user-service:13005"
activity_service_addr: "10.2.1.16:13006" activity_service_addr: "10.2.1.16:13006"
robot_service_addr: "10.2.1.16:13011" robot_service_addr: "10.2.1.16:13011"
room_service_addr: "10.2.1.16:13001"
launch_session_ttl: "15m" launch_session_ttl: "15m"
tencent_im: tencent_im:
# 房内猜拳发起、应战、揭晓和结算事件都走腾讯 IM 房间群自定义消息。 # 房内猜拳发起、应战、揭晓和结算事件都走腾讯 IM 房间群自定义消息。

View File

@ -8,6 +8,7 @@ wallet_service_addr: "127.0.0.1:13004"
user_service_addr: "127.0.0.1:13005" user_service_addr: "127.0.0.1:13005"
activity_service_addr: "127.0.0.1:13006" activity_service_addr: "127.0.0.1:13006"
robot_service_addr: "127.0.0.1:13011" robot_service_addr: "127.0.0.1:13011"
room_service_addr: "127.0.0.1:13001"
launch_session_ttl: "15m" launch_session_ttl: "15m"
tencent_im: tencent_im:
# 本地联调房内猜拳 PK 房间群消息;必须和 gateway/room 使用同一个 IM 应用。 # 本地联调房内猜拳 PK 房间群消息;必须和 gateway/room 使用同一个 IM 应用。

View File

@ -11,6 +11,7 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
gamev1 "hyapp.local/api/proto/game/v1" gamev1 "hyapp.local/api/proto/game/v1"
roomv1 "hyapp.local/api/proto/room/v1"
"hyapp/pkg/appcode" "hyapp/pkg/appcode"
"hyapp/pkg/gamemq" "hyapp/pkg/gamemq"
"hyapp/pkg/grpchealth" "hyapp/pkg/grpchealth"
@ -41,6 +42,7 @@ type App struct {
userConn *grpc.ClientConn userConn *grpc.ClientConn
activityConn *grpc.ClientConn activityConn *grpc.ClientConn
robotConn *grpc.ClientConn robotConn *grpc.ClientConn
roomConn *grpc.ClientConn
outboxProducer *rocketmqx.Producer outboxProducer *rocketmqx.Producer
// outboxPartitions 缓存真实 App 列表并让双实例从不同轮转起点公平 claim。 // outboxPartitions 缓存真实 App 列表并让双实例从不同轮转起点公平 claim。
outboxPartitions *outboxpartition.Partitions outboxPartitions *outboxpartition.Partitions
@ -85,8 +87,18 @@ func New(cfg config.Config) (*App, error) {
_ = repo.Close() _ = repo.Close()
return nil, err return nil, err
} }
roomConn, err := grpc.Dial(cfg.RoomServiceAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
_ = robotConn.Close()
_ = activityConn.Close()
_ = userConn.Close()
_ = walletConn.Close()
_ = repo.Close()
return nil, err
}
listener, err := net.Listen("tcp", cfg.GRPCAddr) listener, err := net.Listen("tcp", cfg.GRPCAddr)
if err != nil { if err != nil {
_ = roomConn.Close()
_ = robotConn.Close() _ = robotConn.Close()
_ = activityConn.Close() _ = activityConn.Close()
_ = userConn.Close() _ = userConn.Close()
@ -99,6 +111,7 @@ func New(cfg config.Config) (*App, error) {
outboxProducer, err = rocketmqx.NewProducer(rocketMQProducerConfig(cfg.RocketMQ)) outboxProducer, err = rocketmqx.NewProducer(rocketMQProducerConfig(cfg.RocketMQ))
if err != nil { if err != nil {
_ = listener.Close() _ = listener.Close()
_ = roomConn.Close()
_ = robotConn.Close() _ = robotConn.Close()
_ = activityConn.Close() _ = activityConn.Close()
_ = userConn.Close() _ = userConn.Close()
@ -120,6 +133,7 @@ func New(cfg config.Config) (*App, error) {
roomRPSPublisher, err = roomrpsservice.NewTencentIMPublisher(cfg.TencentIM.RESTConfig()) roomRPSPublisher, err = roomrpsservice.NewTencentIMPublisher(cfg.TencentIM.RESTConfig())
if err != nil { if err != nil {
_ = listener.Close() _ = listener.Close()
_ = roomConn.Close()
_ = robotConn.Close() _ = robotConn.Close()
_ = activityConn.Close() _ = activityConn.Close()
_ = userConn.Close() _ = userConn.Close()
@ -132,7 +146,7 @@ func New(cfg config.Config) (*App, error) {
logx.Warn(context.Background(), "room_rps_im_disabled", slog.String("reason", "tencent_im.enabled=false")) logx.Warn(context.Background(), "room_rps_im_disabled", slog.String("reason", "tencent_im.enabled=false"))
} }
// 房内猜拳独立于骰子和独立猜拳:配置、挑战状态机和 IM 事件全部由 room-rps service 承接transport 只做 RPC 适配。 // 房内猜拳独立于骰子和独立猜拳:配置、挑战状态机和 IM 事件全部由 room-rps service 承接transport 只做 RPC 适配。
roomRPSSvc := roomrpsservice.New(roomrpsservice.Config{}, userClient, roomRPSPublisher, walletClient, repo) roomRPSSvc := roomrpsservice.New(roomrpsservice.Config{}, userClient, roomRPSPublisher, walletClient, repo, roomv1.NewRoomCommandServiceClient(roomConn))
transport := grpcserver.NewServer(svc, diceSvc, roomRPSSvc) transport := grpcserver.NewServer(svc, diceSvc, roomRPSSvc)
gamev1.RegisterGameAppServiceServer(server, transport) gamev1.RegisterGameAppServiceServer(server, transport)
gamev1.RegisterGameCallbackServiceServer(server, transport) gamev1.RegisterGameCallbackServiceServer(server, transport)
@ -149,6 +163,7 @@ func New(cfg config.Config) (*App, error) {
}) })
if err != nil { if err != nil {
_ = listener.Close() _ = listener.Close()
_ = roomConn.Close()
_ = robotConn.Close() _ = robotConn.Close()
_ = activityConn.Close() _ = activityConn.Close()
_ = userConn.Close() _ = userConn.Close()
@ -158,7 +173,7 @@ func New(cfg config.Config) (*App, error) {
} }
outboxCtx, outboxCancel := context.WithCancel(context.Background()) outboxCtx, outboxCancel := context.WithCancel(context.Background())
return &App{server: server, listener: listener, health: health, healthHTTP: healthHTTP, repo: repo, walletConn: walletConn, userConn: userConn, activityConn: activityConn, robotConn: robotConn, outboxProducer: outboxProducer, outboxPartitions: outboxpartition.New(cfg.OutboxWorker.AppCodes, outboxpartition.DefaultDiscoveryRefreshInterval), outboxCtx: outboxCtx, outboxCancel: outboxCancel, cfg: cfg}, nil return &App{server: server, listener: listener, health: health, healthHTTP: healthHTTP, repo: repo, walletConn: walletConn, userConn: userConn, activityConn: activityConn, robotConn: robotConn, roomConn: roomConn, outboxProducer: outboxProducer, outboxPartitions: outboxpartition.New(cfg.OutboxWorker.AppCodes, outboxpartition.DefaultDiscoveryRefreshInterval), outboxCtx: outboxCtx, outboxCancel: outboxCancel, cfg: cfg}, nil
} }
func (a *App) Run() error { func (a *App) Run() error {
@ -197,6 +212,9 @@ func (a *App) Close() {
if a.robotConn != nil { if a.robotConn != nil {
_ = a.robotConn.Close() _ = a.robotConn.Close()
} }
if a.roomConn != nil {
_ = a.roomConn.Close()
}
if a.repo != nil { if a.repo != nil {
_ = a.repo.Close() _ = a.repo.Close()
} }

View File

@ -20,13 +20,15 @@ type Config struct {
Environment string `yaml:"environment"` Environment string `yaml:"environment"`
GRPCAddr string `yaml:"grpc_addr"` GRPCAddr string `yaml:"grpc_addr"`
// HealthHTTPAddr 是给 CLB/发布脚本探活使用的 HTTP 监听地址,不承载业务流量。 // HealthHTTPAddr 是给 CLB/发布脚本探活使用的 HTTP 监听地址,不承载业务流量。
HealthHTTPAddr string `yaml:"health_http_addr"` HealthHTTPAddr string `yaml:"health_http_addr"`
MySQLDSN string `yaml:"mysql_dsn"` MySQLDSN string `yaml:"mysql_dsn"`
WalletServiceAddr string `yaml:"wallet_service_addr"` WalletServiceAddr string `yaml:"wallet_service_addr"`
UserServiceAddr string `yaml:"user_service_addr"` UserServiceAddr string `yaml:"user_service_addr"`
ActivityServiceAddr string `yaml:"activity_service_addr"` ActivityServiceAddr string `yaml:"activity_service_addr"`
RobotServiceAddr string `yaml:"robot_service_addr"` RobotServiceAddr string `yaml:"robot_service_addr"`
LaunchSessionTTL time.Duration `yaml:"launch_session_ttl"` // RoomServiceAddr 用于把 room-rps 最终败者礼物提交给 Room Cellgame-service 不持有火箭状态。
RoomServiceAddr string `yaml:"room_service_addr"`
LaunchSessionTTL time.Duration `yaml:"launch_session_ttl"`
// TencentIM 是房内猜拳向房间群投递 PK 事件的腾讯 IM REST 配置;缺配置时必须显式关闭,不能靠环境变量隐式漂移。 // TencentIM 是房内猜拳向房间群投递 PK 事件的腾讯 IM REST 配置;缺配置时必须显式关闭,不能靠环境变量隐式漂移。
TencentIM TencentIMConfig `yaml:"tencent_im"` TencentIM TencentIMConfig `yaml:"tencent_im"`
RocketMQ RocketMQConfig `yaml:"rocketmq"` RocketMQ RocketMQConfig `yaml:"rocketmq"`
@ -117,6 +119,7 @@ func Default() Config {
UserServiceAddr: "127.0.0.1:13005", UserServiceAddr: "127.0.0.1:13005",
ActivityServiceAddr: "127.0.0.1:13006", ActivityServiceAddr: "127.0.0.1:13006",
RobotServiceAddr: "127.0.0.1:13011", RobotServiceAddr: "127.0.0.1:13011",
RoomServiceAddr: "127.0.0.1:13001",
LaunchSessionTTL: 15 * time.Minute, LaunchSessionTTL: 15 * time.Minute,
TencentIM: TencentIMConfig{ TencentIM: TencentIMConfig{
AdminIdentifier: "administrator", AdminIdentifier: "administrator",
@ -196,6 +199,10 @@ func (cfg *Config) Normalize() error {
if cfg.RobotServiceAddr == "" { if cfg.RobotServiceAddr == "" {
return fmt.Errorf("robot_service_addr is required") return fmt.Errorf("robot_service_addr is required")
} }
cfg.RoomServiceAddr = strings.TrimSpace(cfg.RoomServiceAddr)
if cfg.RoomServiceAddr == "" {
return fmt.Errorf("room_service_addr is required")
}
if cfg.LaunchSessionTTL <= 0 { if cfg.LaunchSessionTTL <= 0 {
cfg.LaunchSessionTTL = 15 * time.Minute cfg.LaunchSessionTTL = 15 * time.Minute
} }

View File

@ -13,8 +13,10 @@ import (
"sync" "sync"
"time" "time"
"google.golang.org/grpc"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
gamev1 "hyapp.local/api/proto/game/v1" gamev1 "hyapp.local/api/proto/game/v1"
roomv1 "hyapp.local/api/proto/room/v1"
userv1 "hyapp.local/api/proto/user/v1" userv1 "hyapp.local/api/proto/user/v1"
walletv1 "hyapp.local/api/proto/wallet/v1" walletv1 "hyapp.local/api/proto/wallet/v1"
"hyapp/pkg/appcode" "hyapp/pkg/appcode"
@ -72,6 +74,11 @@ type WalletClient interface {
ApplyGameCoinChange(ctx context.Context, req *walletv1.ApplyGameCoinChangeRequest) (*walletv1.ApplyGameCoinChangeResponse, error) ApplyGameCoinChange(ctx context.Context, req *walletv1.ApplyGameCoinChangeRequest) (*walletv1.ApplyGameCoinChangeResponse, error)
} }
// RoomClient 只暴露 PK 结算礼物进入 Room Cell 的能力;火箭状态和规则始终由 room-service 持有。
type RoomClient interface {
ApplyRoomRPSGift(ctx context.Context, req *roomv1.ApplyRoomRPSGiftRequest, opts ...grpc.CallOption) (*roomv1.ApplyRoomRPSGiftResponse, error)
}
// ConfigStore 是 room-rps 配置的持久化边界service 只关心完整配置快照,表结构和 JSON 编码留在 MySQL 仓储层。 // ConfigStore 是 room-rps 配置的持久化边界service 只关心完整配置快照,表结构和 JSON 编码留在 MySQL 仓储层。
type ConfigStore interface { type ConfigStore interface {
GetRoomRPSConfig(ctx context.Context, appCode string, gameID string) (*gamev1.RoomRPSConfig, error) GetRoomRPSConfig(ctx context.Context, appCode string, gameID string) (*gamev1.RoomRPSConfig, error)
@ -94,6 +101,7 @@ type Service struct {
user UserClient user UserClient
gifts GiftCatalogClient gifts GiftCatalogClient
wallet WalletClient wallet WalletClient
room RoomClient
pub Publisher pub Publisher
store ConfigStore store ConfigStore
@ -117,6 +125,7 @@ func New(config Config, user UserClient, publisher Publisher, extras ...any) *Se
var gifts GiftCatalogClient var gifts GiftCatalogClient
var wallet WalletClient var wallet WalletClient
var store ConfigStore var store ConfigStore
var room RoomClient
for _, extra := range extras { for _, extra := range extras {
if typed, ok := extra.(GiftCatalogClient); ok { if typed, ok := extra.(GiftCatalogClient); ok {
// room-rps 运行配置只保存四个 gift_id后台不再携带展示字段时必须从 wallet-service 读取真实礼物快照。 // room-rps 运行配置只保存四个 gift_id后台不再携带展示字段时必须从 wallet-service 读取真实礼物快照。
@ -130,12 +139,17 @@ func New(config Config, user UserClient, publisher Publisher, extras ...any) *Se
// MySQL 是配置事实源;没有仓储的测试场景才落回进程内 map避免把运行态差异写成前端兜底。 // MySQL 是配置事实源;没有仓储的测试场景才落回进程内 map避免把运行态差异写成前端兜底。
store = typed store = typed
} }
if typed, ok := extra.(RoomClient); ok {
// PK 最终败者礼物必须进入 Room Cell不能由 game-service 自己修改火箭状态。
room = typed
}
} }
return &Service{ return &Service{
config: config, config: config,
user: user, user: user,
gifts: gifts, gifts: gifts,
wallet: wallet, wallet: wallet,
room: room,
pub: publisher, pub: publisher,
store: store, store: store,
configs: make(map[string]*gamev1.RoomRPSConfig), configs: make(map[string]*gamev1.RoomRPSConfig),
@ -921,6 +935,9 @@ func (s *Service) settleChallenge(ctx context.Context, requestID string, challen
return settled, err return settled, err
} }
settled.Initiator.BalanceAfter = balanceAfter settled.Initiator.BalanceAfter = balanceAfter
if err := s.applySettledGiftToRoom(ctx, requestID, settled, settled.GetChallenger().GetUserId(), settled.GetInitiator().GetUserId()); err != nil {
return settled, err
}
settled.SettlementStatus = SettlementSettled settled.SettlementStatus = SettlementSettled
return settled, nil return settled, nil
case settled.GetChallenger().GetUserId(): case settled.GetChallenger().GetUserId():
@ -930,6 +947,9 @@ func (s *Service) settleChallenge(ctx context.Context, requestID string, challen
return settled, err return settled, err
} }
settled.Challenger.BalanceAfter = balanceAfter settled.Challenger.BalanceAfter = balanceAfter
if err := s.applySettledGiftToRoom(ctx, requestID, settled, settled.GetInitiator().GetUserId(), settled.GetChallenger().GetUserId()); err != nil {
return settled, err
}
settled.SettlementStatus = SettlementSettled settled.SettlementStatus = SettlementSettled
return settled, nil return settled, nil
default: default:
@ -937,6 +957,32 @@ func (s *Service) settleChallenge(ctx context.Context, requestID string, challen
} }
} }
func (s *Service) applySettledGiftToRoom(ctx context.Context, requestID string, challenge *gamev1.RoomRPSChallenge, loserUserID int64, winnerUserID int64) error {
if s.room == nil {
// 仅保留给不装配跨服务依赖的隔离单测;生产 App.New 始终注入 room client缺地址会在启动阶段失败。
return nil
}
if challenge == nil || loserUserID <= 0 || winnerUserID <= 0 || challenge.GetStakeCoin() <= 0 {
return xerr.New(xerr.InvalidArgument, "room rps settled gift is incomplete")
}
// challenge_id 对应一局最多一份真实礼物;赢家退款重放后再次调用也只会命中 Room Cell command log。
_, err := s.room.ApplyRoomRPSGift(ctx, &roomv1.ApplyRoomRPSGiftRequest{
Meta: &roomv1.RequestMeta{
AppCode: challenge.GetAppCode(),
RequestId: strings.TrimSpace(requestID),
CommandId: "room_rps_gift_" + challenge.GetChallengeId(),
ActorUserId: loserUserID,
RoomId: challenge.GetRoomId(),
},
RoomId: challenge.GetRoomId(),
SenderUserId: loserUserID,
TargetUserId: winnerUserID,
GiftId: roomRPSChallengeGiftID(challenge),
HeatValue: challenge.GetStakeCoin(),
})
return err
}
func (s *Service) refundPendingChallenge(ctx context.Context, requestID string, challenge *gamev1.RoomRPSChallenge) (*gamev1.RoomRPSChallenge, error) { func (s *Service) refundPendingChallenge(ctx context.Context, requestID string, challenge *gamev1.RoomRPSChallenge) (*gamev1.RoomRPSChallenge, error) {
if challenge == nil || challenge.GetInitiator().GetUserId() <= 0 || challenge.GetStakeCoin() <= 0 { if challenge == nil || challenge.GetInitiator().GetUserId() <= 0 || challenge.GetStakeCoin() <= 0 {
return nil, xerr.New(xerr.InvalidArgument, "room rps pending refund challenge is incomplete") return nil, xerr.New(xerr.InvalidArgument, "room rps pending refund challenge is incomplete")

View File

@ -6,7 +6,9 @@ import (
"testing" "testing"
"time" "time"
"google.golang.org/grpc"
gamev1 "hyapp.local/api/proto/game/v1" gamev1 "hyapp.local/api/proto/game/v1"
roomv1 "hyapp.local/api/proto/room/v1"
walletv1 "hyapp.local/api/proto/wallet/v1" walletv1 "hyapp.local/api/proto/wallet/v1"
"hyapp/pkg/xerr" "hyapp/pkg/xerr"
) )
@ -324,7 +326,8 @@ func TestAcceptChallengeRejectsInsufficientCoinBalance(t *testing.T) {
func TestAcceptChallengeRecordsChallengerCoinBalance(t *testing.T) { func TestAcceptChallengeRecordsChallengerCoinBalance(t *testing.T) {
wallet := newFakeRoomRPSWallet(map[int64]int64{41: 1000, 42: 500}) wallet := newFakeRoomRPSWallet(map[int64]int64{41: 1000, 42: 500})
svc := New(Config{}, nil, nil, wallet) room := &fakeRoomRPSRoom{}
svc := New(Config{}, nil, nil, wallet, room)
svc.now = func() time.Time { return time.UnixMilli(1770000000000) } svc.now = func() time.Time { return time.UnixMilli(1770000000000) }
created, _, err := svc.CreateChallenge(context.Background(), &gamev1.CreateRoomRPSChallengeRequest{ created, _, err := svc.CreateChallenge(context.Background(), &gamev1.CreateRoomRPSChallengeRequest{
@ -356,6 +359,13 @@ func TestAcceptChallengeRecordsChallengerCoinBalance(t *testing.T) {
if got := wallet.ops(); fmt.Sprint(got) != "[debit debit refund]" { if got := wallet.ops(); fmt.Sprint(got) != "[debit debit refund]" {
t.Fatalf("winner settlement should only debit both and refund winner, got ops=%v", got) t.Fatalf("winner settlement should only debit both and refund winner, got ops=%v", got)
} }
if len(room.requests) != 1 {
t.Fatalf("settled PK must apply exactly one loser gift to room rocket, got %d", len(room.requests))
}
rocketGift := room.requests[0]
if rocketGift.GetSenderUserId() != 41 || rocketGift.GetTargetUserId() != 42 || rocketGift.GetGiftId() != "10001" || rocketGift.GetHeatValue() != 100 {
t.Fatalf("room rocket gift must describe loser -> winner and server stake: %+v", rocketGift)
}
} }
func TestAcceptChallengeReturnsTakenWhenAnotherUserAlreadyAccepted(t *testing.T) { func TestAcceptChallengeReturnsTakenWhenAnotherUserAlreadyAccepted(t *testing.T) {
@ -585,6 +595,15 @@ type fakeRoomRPSWallet struct {
replays map[string]*walletv1.ApplyGameCoinChangeResponse replays map[string]*walletv1.ApplyGameCoinChangeResponse
} }
type fakeRoomRPSRoom struct {
requests []*roomv1.ApplyRoomRPSGiftRequest
}
func (f *fakeRoomRPSRoom) ApplyRoomRPSGift(_ context.Context, req *roomv1.ApplyRoomRPSGiftRequest, _ ...grpc.CallOption) (*roomv1.ApplyRoomRPSGiftResponse, error) {
f.requests = append(f.requests, req)
return &roomv1.ApplyRoomRPSGiftResponse{}, nil
}
func newFakeRoomRPSWallet(balances map[int64]int64) *fakeRoomRPSWallet { func newFakeRoomRPSWallet(balances map[int64]int64) *fakeRoomRPSWallet {
return &fakeRoomRPSWallet{balances: balances, replays: make(map[string]*walletv1.ApplyGameCoinChangeResponse)} return &fakeRoomRPSWallet{balances: balances, replays: make(map[string]*walletv1.ApplyGameCoinChangeResponse)}
} }

View File

@ -585,6 +585,34 @@ type SendGift struct {
// Type 返回命令类型。 // Type 返回命令类型。
func (SendGift) Type() string { return "send_gift" } func (SendGift) Type() string { return "send_gift" }
// ApplyRoomRPSGift 记录房内 PK 最终结算后唯一真实支付的败者礼物。
// 它只恢复火箭状态,不重复执行钱包改账,也不冒充普通 SendGift 产生第二份礼物事实。
type ApplyRoomRPSGift struct {
Base
TargetUserID int64 `json:"target_user_id"`
GiftID string `json:"gift_id"`
HeatValue int64 `json:"heat_value"`
RocketTouched bool `json:"rocket_touched,omitempty"`
RocketAddedFuel int64 `json:"rocket_added_fuel,omitempty"`
RocketEffectiveFuel int64 `json:"rocket_effective_fuel,omitempty"`
RocketOverflowFuel int64 `json:"rocket_overflow_fuel,omitempty"`
RocketLevel int32 `json:"rocket_level,omitempty"`
RocketFuel int64 `json:"rocket_fuel,omitempty"`
RocketStatus string `json:"rocket_status,omitempty"`
RocketFuelThreshold int64 `json:"rocket_fuel_threshold,omitempty"`
RocketIgnitedAtMS int64 `json:"rocket_ignited_at_ms,omitempty"`
RocketLaunchAtMS int64 `json:"rocket_launch_at_ms,omitempty"`
RocketResetAtMS int64 `json:"rocket_reset_at_ms,omitempty"`
RocketTop1UserID int64 `json:"rocket_top1_user_id,omitempty"`
RocketIgniterUserID int64 `json:"rocket_igniter_user_id,omitempty"`
RocketID string `json:"rocket_id,omitempty"`
RocketConfigVersion int64 `json:"rocket_config_version,omitempty"`
RocketPendingLaunches []RocketPendingLaunch `json:"rocket_pending_launches,omitempty"`
RocketCurrentContributions []RocketContribution `json:"rocket_current_contributions,omitempty"`
}
func (ApplyRoomRPSGift) Type() string { return "apply_room_rps_gift" }
// GiftTargetHostScope 记录一个接收方在 gateway 入站时看到的主播工资入账资格。 // GiftTargetHostScope 记录一个接收方在 gateway 入站时看到的主播工资入账资格。
type GiftTargetHostScope struct { type GiftTargetHostScope struct {
TargetUserID int64 `json:"target_user_id"` TargetUserID int64 `json:"target_user_id"`
@ -881,6 +909,8 @@ func Deserialize(commandType string, payload []byte) (Command, error) {
cmd = &UnbanUser{} cmd = &UnbanUser{}
case SendGift{}.Type(): case SendGift{}.Type():
cmd = &SendGift{} cmd = &SendGift{}
case ApplyRoomRPSGift{}.Type():
cmd = &ApplyRoomRPSGift{}
case LaunchRoomRocket{}.Type(): case LaunchRoomRocket{}.Type():
cmd = &LaunchRoomRocket{} cmd = &LaunchRoomRocket{}
default: default:

View File

@ -533,6 +533,12 @@ func replay(current *state.RoomState, cmd command.Command, committedAtMS int64)
current.Rocket = rocketStateFromSettledGift(typed) current.Rocket = rocketStateFromSettledGift(typed)
} }
current.Version++
case *command.ApplyRoomRPSGift:
// PK 账务已在 game/wallet owner 完成;恢复只应用首次提交时固化的火箭快照,绝不能再次扣费或补普通礼物热度。
if typed.RocketTouched {
current.Rocket = rocketStateFromRoomRPSGift(typed)
}
current.Version++ current.Version++
case *command.LaunchRoomRocket: case *command.LaunchRoomRocket:
if current.Rocket == nil || !rocketPendingLaunchExists(current.Rocket.PendingLaunches, typed.RocketID, typed.Level) { if current.Rocket == nil || !rocketPendingLaunchExists(current.Rocket.PendingLaunches, typed.RocketID, typed.Level) {
@ -579,6 +585,24 @@ func rocketStateFromSettledGift(cmd *command.SendGift) *state.RocketState {
} }
} }
func rocketStateFromRoomRPSGift(cmd *command.ApplyRoomRPSGift) *state.RocketState {
return &state.RocketState{
CurrentLevel: cmd.RocketLevel,
CurrentFuel: cmd.RocketFuel,
FuelThreshold: cmd.RocketFuelThreshold,
Status: cmd.RocketStatus,
IgnitedAtMS: cmd.RocketIgnitedAtMS,
LaunchAtMS: cmd.RocketLaunchAtMS,
ResetAtMS: cmd.RocketResetAtMS,
Top1UserID: cmd.RocketTop1UserID,
IgniterUserID: cmd.RocketIgniterUserID,
RocketID: cmd.RocketID,
ConfigVersion: cmd.RocketConfigVersion,
PendingLaunches: rocketPendingLaunchesFromCommand(cmd.RocketPendingLaunches),
CurrentContributions: rocketContributionsFromCommand(cmd.RocketCurrentContributions),
}
}
func rocketStateFromLaunchCommand(cmd *command.LaunchRoomRocket) *state.RocketState { func rocketStateFromLaunchCommand(cmd *command.LaunchRoomRocket) *state.RocketState {
return &state.RocketState{ return &state.RocketState{
CurrentLevel: cmd.CurrentLevel, CurrentLevel: cmd.CurrentLevel,

View File

@ -1361,6 +1361,34 @@ func TestRoomRocketGiftOverflowAndImmediateNextLevel(t *testing.T) {
} }
} }
func TestApplyRoomRPSGiftChargesRocketOnceWithoutOrdinaryGiftFact(t *testing.T) {
ctx := context.Background()
repository := mysqltest.NewRepository(t)
now := &fixedRoomRocketClock{now: time.Date(2026, 5, 20, 12, 0, 0, 0, time.UTC)}
svc := newRocketTestServiceWithDirectIM(t, repository, &rocketTestWallet{}, now, nil, newRecordingRoomDirectIMPublisher())
writeRocketConfig(t, ctx, repository, rocketConfigForTest(1000, 1000))
createRocketRoom(t, ctx, svc, "room-rps-rocket", 101, 9001)
req := &roomv1.ApplyRoomRPSGiftRequest{
Meta: &roomv1.RequestMeta{AppCode: "lalu", RequestId: "req-rps", CommandId: "room_rps_gift_challenge-1", ActorUserId: 202, RoomId: "room-rps-rocket"},
RoomId: "room-rps-rocket", SenderUserId: 202, TargetUserId: 101, GiftId: "10001", HeatValue: 100,
}
first, err := svc.ApplyRoomRPSGift(ctx, req)
if err != nil {
t.Fatalf("ApplyRoomRPSGift() error = %v", err)
}
replay, err := svc.ApplyRoomRPSGift(ctx, req)
if err != nil {
t.Fatalf("ApplyRoomRPSGift() replay error = %v", err)
}
if first.GetRocket().GetCurrentFuel() != 100 || replay.GetRocket().GetCurrentFuel() != 100 || replay.GetResult().GetApplied() {
t.Fatalf("PK gift must fuel once and replay from command log: first=%+v replay=%+v", first, replay)
}
if got := outboxEventCounts(t, ctx, repository)["RoomGiftSent"]; got != 0 {
t.Fatalf("PK settlement must not fabricate an ordinary RoomGiftSent fact, got %d", got)
}
}
func TestRoomRocketProgressCoalescesOneSecondWindow(t *testing.T) { func TestRoomRocketProgressCoalescesOneSecondWindow(t *testing.T) {
ctx := context.Background() ctx := context.Background()
repository := mysqltest.NewRepository(t) repository := mysqltest.NewRepository(t)

View File

@ -0,0 +1,107 @@
package service
import (
"context"
"strings"
"time"
roomv1 "hyapp.local/api/proto/room/v1"
walletv1 "hyapp.local/api/proto/wallet/v1"
"hyapp/pkg/appcode"
"hyapp/pkg/xerr"
"hyapp/services/room-service/internal/room/command"
"hyapp/services/room-service/internal/room/outbox"
"hyapp/services/room-service/internal/room/rank"
"hyapp/services/room-service/internal/room/state"
)
// ApplyRoomRPSGift 把 room-rps 最终由败者支付的一份礼物应用到火箭。
// 钱包已由 game-service 结算,因此本入口只接受服务端锁定的 heat_value并用 command_id 保证重试不重复充能。
func (s *Service) ApplyRoomRPSGift(ctx context.Context, req *roomv1.ApplyRoomRPSGiftRequest) (*roomv1.ApplyRoomRPSGiftResponse, error) {
ctx = contextFromMeta(ctx, req.GetMeta())
if req.GetSenderUserId() <= 0 || req.GetTargetUserId() <= 0 || strings.TrimSpace(req.GetGiftId()) == "" || req.GetHeatValue() <= 0 {
return nil, xerr.New(xerr.InvalidArgument, "room rps settled gift is incomplete")
}
cmd := command.ApplyRoomRPSGift{
Base: baseFromMeta(req.GetMeta()),
TargetUserID: req.GetTargetUserId(),
GiftID: strings.TrimSpace(req.GetGiftId()),
HeatValue: req.GetHeatValue(),
}
cmd.Base.Room = strings.TrimSpace(req.GetRoomId())
cmd.Base.ActorID = req.GetSenderUserId()
result, err := s.mutateRoom(ctx, cmd, true, func(now time.Time, current *state.RoomState, _ *rank.LocalRank) (mutationResult, []outbox.Record, error) {
roomMeta, exists, err := s.repository.GetRoomMeta(ctx, cmd.RoomID())
if err != nil {
return mutationResult{}, nil, err
}
if !exists {
return mutationResult{}, nil, xerr.New(xerr.NotFound, "room not found")
}
cfg, err := s.roomRocketConfig(ctx)
if err != nil {
return mutationResult{}, nil, err
}
// 复用普通送礼的唯一火箭规则实现,但不进入钱包、房间热度、礼物榜或 RoomGiftSent 链路。
giftCmd := command.SendGift{Base: cmd.Base, TargetUserID: cmd.TargetUserID, TargetUserIDs: []int64{cmd.TargetUserID}, GiftID: cmd.GiftID, GiftCount: 1, HeatValue: cmd.HeatValue}
settledGift := giftCmd
billing := &walletv1.DebitGiftResponse{HeatValue: cmd.HeatValue}
rocketApply, err := s.applyRoomRocketGift(now, current, cfg, giftCmd, &settledGift, billing, roomMeta)
if err != nil {
return mutationResult{}, nil, err
}
copyRoomRPSRocketSnapshot(&cmd, settledGift)
payload, err := command.Serialize(cmd)
if err != nil {
return mutationResult{}, nil, err
}
current.Version++
records := make([]outbox.Record, 0, 1)
var progress *roomRocketProgressPending
if rocketApply.progressEvent != nil {
progressRecord, err := outbox.Build(current.RoomID, "RoomRocketFuelChanged", current.Version, now, rocketApply.progressEvent)
if err != nil {
return mutationResult{}, nil, err
}
progressRecord.AppCode = appcode.FromContext(ctx)
if progressRecord.Envelope != nil {
progressRecord.Envelope.AppCode = progressRecord.AppCode
}
progress = &roomRocketProgressPending{record: progressRecord, rocketID: rocketApply.progressEvent.GetRocketId(), level: rocketApply.progressEvent.GetLevel(), currentFuel: rocketApply.progressEvent.GetCurrentFuel(), roomVersion: current.Version}
}
if rocketApply.ignited != nil {
ignitedRecord, err := outbox.Build(current.RoomID, "RoomRocketIgnited", current.Version, now, rocketApply.ignited)
if err != nil {
return mutationResult{}, nil, err
}
records = append(records, ignitedRecord)
}
return mutationResult{snapshot: current.ToProto(), commandPayload: payload, roomRocketProgress: progress}, records, nil
})
if err != nil {
return nil, err
}
return &roomv1.ApplyRoomRPSGiftResponse{Result: commandResult(result.applied, result.snapshot.GetVersion(), s.clock.Now()), Rocket: result.snapshot.GetRocket()}, nil
}
func copyRoomRPSRocketSnapshot(target *command.ApplyRoomRPSGift, source command.SendGift) {
target.RocketTouched = source.RocketTouched
target.RocketAddedFuel = source.RocketAddedFuel
target.RocketEffectiveFuel = source.RocketEffectiveFuel
target.RocketOverflowFuel = source.RocketOverflowFuel
target.RocketLevel = source.RocketLevel
target.RocketFuel = source.RocketFuel
target.RocketStatus = source.RocketStatus
target.RocketFuelThreshold = source.RocketFuelThreshold
target.RocketIgnitedAtMS = source.RocketIgnitedAtMS
target.RocketLaunchAtMS = source.RocketLaunchAtMS
target.RocketResetAtMS = source.RocketResetAtMS
target.RocketTop1UserID = source.RocketTop1UserID
target.RocketIgniterUserID = source.RocketIgniterUserID
target.RocketID = source.RocketID
target.RocketConfigVersion = source.RocketConfigVersion
target.RocketPendingLaunches = source.RocketPendingLaunches
target.RocketCurrentContributions = source.RocketCurrentContributions
}

View File

@ -439,6 +439,20 @@ func (s *Server) SendGift(ctx context.Context, req *roomv1.SendGiftRequest) (*ro
return mapServiceResult(s.svc.SendGift(ctx, req)) return mapServiceResult(s.svc.SendGift(ctx, req))
} }
// ApplyRoomRPSGift 接收 game-service 已完成结算的败者礼物,并路由到房间 owner 节点的 Room Cell。
func (s *Server) ApplyRoomRPSGift(ctx context.Context, req *roomv1.ApplyRoomRPSGiftRequest) (*roomv1.ApplyRoomRPSGiftResponse, error) {
if req == nil || req.GetMeta() == nil {
return nil, xerr.ToGRPCError(xerr.New(xerr.InvalidArgument, "room rps settled gift meta is required"))
}
ctx = contextWithMetaApp(ctx, req.GetMeta())
if resp, forwarded, err := forwardCommand(s, ctx, req.GetMeta(), func(callCtx context.Context, client roomv1.RoomCommandServiceClient) (*roomv1.ApplyRoomRPSGiftResponse, error) {
return client.ApplyRoomRPSGift(callCtx, req)
}); forwarded || err != nil {
return resp, err
}
return mapServiceResult(s.svc.ApplyRoomRPSGift(ctx, req))
}
// FollowRoom 建立用户对房间的关注关系。 // FollowRoom 建立用户对房间的关注关系。
func (s *Server) FollowRoom(ctx context.Context, req *roomv1.FollowRoomRequest) (*roomv1.FollowRoomResponse, error) { func (s *Server) FollowRoom(ctx context.Context, req *roomv1.FollowRoomRequest) (*roomv1.FollowRoomResponse, error) {
// 房间关注是用户-房间关系事实,不改变 Room Cell 核心状态,因此不需要 owner 转发。 // 房间关注是用户-房间关系事实,不改变 Room Cell 核心状态,因此不需要 owner 转发。