234 lines
6.0 KiB
Protocol Buffer
234 lines
6.0 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package hyapp.room.v1;
|
|
|
|
option go_package = "hyapp/api/proto/room/v1;roomv1";
|
|
|
|
// RequestMeta 固定承载所有命令的调用元信息。
|
|
// room-service 用它串起幂等、追踪、路由和业务操作者身份。
|
|
message RequestMeta {
|
|
string request_id = 1;
|
|
string command_id = 2;
|
|
int64 actor_user_id = 3;
|
|
string room_id = 4;
|
|
string gateway_node_id = 5;
|
|
string session_id = 6;
|
|
int64 sent_at_ms = 7;
|
|
}
|
|
|
|
// CommandResult 统一返回命令是否真正落地,以及落地后的房间版本。
|
|
message CommandResult {
|
|
bool applied = 1;
|
|
int64 room_version = 2;
|
|
int64 server_time_ms = 3;
|
|
}
|
|
|
|
// RoomUser 只表达 room-service 需要保存的房间内轻量用户态。
|
|
message RoomUser {
|
|
int64 user_id = 1;
|
|
string role = 2;
|
|
int64 joined_at_ms = 3;
|
|
int64 last_seen_at_ms = 4;
|
|
}
|
|
|
|
// SeatState 表达单个麦位当前占用关系。
|
|
message SeatState {
|
|
int32 seat_no = 1;
|
|
int64 user_id = 2;
|
|
bool locked = 3;
|
|
}
|
|
|
|
// RankItem 表达房间内本地礼物榜项目。
|
|
message RankItem {
|
|
int64 user_id = 1;
|
|
int64 score = 2;
|
|
int64 gift_value = 3;
|
|
int64 updated_at_ms = 4;
|
|
}
|
|
|
|
// RoomSnapshot 把 room-service 对外需要暴露的房间投影集中返回。
|
|
message RoomSnapshot {
|
|
string room_id = 1;
|
|
int64 owner_user_id = 2;
|
|
int64 host_user_id = 3;
|
|
string mode = 4;
|
|
string status = 5;
|
|
bool chat_enabled = 6;
|
|
repeated SeatState mic_seats = 7;
|
|
repeated RoomUser online_users = 8;
|
|
repeated int64 admin_user_ids = 9;
|
|
repeated int64 ban_user_ids = 10;
|
|
repeated int64 mute_user_ids = 11;
|
|
repeated RankItem gift_rank = 12;
|
|
map<string, string> room_ext = 13;
|
|
int64 heat = 14;
|
|
int64 version = 15;
|
|
}
|
|
|
|
// CreateRoomRequest 创建一个新的房间执行单元。
|
|
message CreateRoomRequest {
|
|
RequestMeta meta = 1;
|
|
int64 owner_user_id = 2;
|
|
int64 host_user_id = 3;
|
|
int32 seat_count = 4;
|
|
string mode = 5;
|
|
}
|
|
|
|
// CreateRoomResponse 返回新建后的房间快照。
|
|
message CreateRoomResponse {
|
|
CommandResult result = 1;
|
|
RoomSnapshot room = 2;
|
|
}
|
|
|
|
// JoinRoomRequest 把用户 presence 接入房间业务态。
|
|
message JoinRoomRequest {
|
|
RequestMeta meta = 1;
|
|
string role = 2;
|
|
}
|
|
|
|
// JoinRoomResponse 返回加入后的房间快照。
|
|
message JoinRoomResponse {
|
|
CommandResult result = 1;
|
|
RoomUser user = 2;
|
|
RoomSnapshot room = 3;
|
|
}
|
|
|
|
// LeaveRoomRequest 把用户从房间 presence 移出。
|
|
message LeaveRoomRequest {
|
|
RequestMeta meta = 1;
|
|
}
|
|
|
|
// LeaveRoomResponse 返回离房后的房间快照。
|
|
message LeaveRoomResponse {
|
|
CommandResult result = 1;
|
|
RoomSnapshot room = 2;
|
|
}
|
|
|
|
// MicUpRequest 申请把用户放到指定麦位。
|
|
message MicUpRequest {
|
|
RequestMeta meta = 1;
|
|
int32 seat_no = 2;
|
|
}
|
|
|
|
// MicUpResponse 返回最新房间快照与目标麦位。
|
|
message MicUpResponse {
|
|
CommandResult result = 1;
|
|
int32 seat_no = 2;
|
|
RoomSnapshot room = 3;
|
|
}
|
|
|
|
// MicDownRequest 把用户从当前麦位移下。
|
|
message MicDownRequest {
|
|
RequestMeta meta = 1;
|
|
int64 target_user_id = 2;
|
|
}
|
|
|
|
// MicDownResponse 返回最新房间快照与目标麦位。
|
|
message MicDownResponse {
|
|
CommandResult result = 1;
|
|
int32 seat_no = 2;
|
|
RoomSnapshot room = 3;
|
|
}
|
|
|
|
// ChangeMicSeatRequest 直接调整指定用户所在麦位。
|
|
message ChangeMicSeatRequest {
|
|
RequestMeta meta = 1;
|
|
int64 target_user_id = 2;
|
|
int32 seat_no = 3;
|
|
}
|
|
|
|
// ChangeMicSeatResponse 返回变更后的房间快照。
|
|
message ChangeMicSeatResponse {
|
|
CommandResult result = 1;
|
|
RoomSnapshot room = 2;
|
|
}
|
|
|
|
// MuteUserRequest 修改房间内禁言态。
|
|
message MuteUserRequest {
|
|
RequestMeta meta = 1;
|
|
int64 target_user_id = 2;
|
|
bool muted = 3;
|
|
}
|
|
|
|
// MuteUserResponse 返回最新房间快照。
|
|
message MuteUserResponse {
|
|
CommandResult result = 1;
|
|
RoomSnapshot room = 2;
|
|
}
|
|
|
|
// KickUserRequest 把指定用户踢出房间。
|
|
message KickUserRequest {
|
|
RequestMeta meta = 1;
|
|
int64 target_user_id = 2;
|
|
}
|
|
|
|
// KickUserResponse 返回最新房间快照。
|
|
message KickUserResponse {
|
|
CommandResult result = 1;
|
|
RoomSnapshot room = 2;
|
|
}
|
|
|
|
// SendGiftRequest 是首版房间内最重要的变现命令。
|
|
message SendGiftRequest {
|
|
RequestMeta meta = 1;
|
|
int64 target_user_id = 2;
|
|
string gift_id = 3;
|
|
int32 gift_count = 4;
|
|
int64 gift_unit_value = 5;
|
|
}
|
|
|
|
// SendGiftResponse 返回扣费成功并落到房间后的状态结果。
|
|
message SendGiftResponse {
|
|
CommandResult result = 1;
|
|
string billing_receipt_id = 2;
|
|
int64 room_heat = 3;
|
|
repeated RankItem gift_rank = 4;
|
|
RoomSnapshot room = 5;
|
|
}
|
|
|
|
// CheckSpeakPermissionRequest 让 im-service 在发公屏前同步问房间业务态。
|
|
message CheckSpeakPermissionRequest {
|
|
string room_id = 1;
|
|
int64 user_id = 2;
|
|
}
|
|
|
|
// CheckSpeakPermissionResponse 返回当前用户是否允许发言。
|
|
message CheckSpeakPermissionResponse {
|
|
bool allowed = 1;
|
|
string reason = 2;
|
|
int64 room_version = 3;
|
|
}
|
|
|
|
// VerifyRoomPresenceRequest 让 im-service 在订阅房间频道前确认用户业务上仍在房间内。
|
|
message VerifyRoomPresenceRequest {
|
|
string room_id = 1;
|
|
int64 user_id = 2;
|
|
string session_id = 3;
|
|
}
|
|
|
|
// VerifyRoomPresenceResponse 返回用户是否仍然属于该房间。
|
|
message VerifyRoomPresenceResponse {
|
|
bool present = 1;
|
|
string reason = 2;
|
|
int64 room_version = 3;
|
|
}
|
|
|
|
// RoomCommandService 承载所有会改变房间状态的命令。
|
|
service RoomCommandService {
|
|
rpc CreateRoom(CreateRoomRequest) returns (CreateRoomResponse);
|
|
rpc JoinRoom(JoinRoomRequest) returns (JoinRoomResponse);
|
|
rpc LeaveRoom(LeaveRoomRequest) returns (LeaveRoomResponse);
|
|
rpc MicUp(MicUpRequest) returns (MicUpResponse);
|
|
rpc MicDown(MicDownRequest) returns (MicDownResponse);
|
|
rpc ChangeMicSeat(ChangeMicSeatRequest) returns (ChangeMicSeatResponse);
|
|
rpc MuteUser(MuteUserRequest) returns (MuteUserResponse);
|
|
rpc KickUser(KickUserRequest) returns (KickUserResponse);
|
|
rpc SendGift(SendGiftRequest) returns (SendGiftResponse);
|
|
}
|
|
|
|
// RoomGuardService 只提供给 im-service 做实时守卫查询。
|
|
service RoomGuardService {
|
|
rpc CheckSpeakPermission(CheckSpeakPermissionRequest) returns (CheckSpeakPermissionResponse);
|
|
rpc VerifyRoomPresence(VerifyRoomPresenceRequest) returns (VerifyRoomPresenceResponse);
|
|
}
|