syntax = "proto3";

package bilibili.broadcast.v1;

option java_multiple_files = true;

import "bilibili/rpc/status.proto";
import "google/protobuf/any.proto";

//
service BroadcastRoom {
  //
  rpc Enter(stream RoomReq) returns (stream RoomResp);
}

//
message RoomErrorEvent {
  //
  bilibili.rpc.Status status = 1;
}

//
message RoomJoinEvent {

}

//
message RoomLeaveEvent {

}

//
message RoomMessageEvent {
  //
  string target_path = 1;
  //
  google.protobuf.Any body = 2;
}

//
message RoomOnlineEvent {
  //
  int32 online = 1;
  //
  int32 all_online = 2;
}

//
message RoomReq {
  // {type}://{room_id}
  string id = 1;
  oneof event {
    //
    RoomJoinEvent join = 2;
    //
    RoomLeaveEvent leave = 3;
    //
    RoomOnlineEvent online = 4;
    //
    RoomMessageEvent msg = 5;
  }
}

//
message RoomResp {
  // {type}://{room_id}
  string id = 1;
  oneof event {
    //
    RoomJoinEvent join = 2;
    //
    RoomLeaveEvent leave = 3;
    //
    RoomOnlineEvent online = 4;
    //
    RoomMessageEvent msg = 5;
    //
    RoomErrorEvent err = 6;
  }
}
