syntax = "proto3";

package pgc.gateway.vega.v1;

option java_multiple_files = true;

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

//
service Vega {
  //
  rpc CreateTunnel (VegaFrame) returns (VegaFrame);
}

//
service VegaFrameDoc {
  //
  rpc Auth (AuthReq) returns (AuthResp);
  //
  rpc Heartbeat (HeartbeatReq) returns (HeartbeatResp);
  //
  rpc MessageAck (MessageAckReq) returns (google.protobuf.Empty);
  //
  rpc Subscribe (SubscribeReq) returns (google.protobuf.Empty);
}

//
message AuthReq {}

//
message AuthResp {}

//
message FrameOption {
  //
  int64 vega_id = 1;
  //
  string req_id = 2;
  //
  int64 sequence = 3;
  //
  bool is_ack = 4;
  //
  bilibili.rpc.Status status = 5;
  //
  string ack_origin = 6;
  //
  int64 mid = 7;
}

//
message HeartbeatReq {}

//
message HeartbeatResp {}

//
message MessageAckReq {
  //
  string vega_id = 1;
  //
  string req_id = 2;
  //
  string origin = 3;
  //
  string target_path = 4;
}

//
message SubscribeReq {
  //
  repeated TargetPath target_paths = 1;
}

//
message TargetPath {
  //
  string key = 1;
  //
  google.protobuf.Any subs = 2;
}

//
message VegaFrame {
  //
  FrameOption options = 1;
  //
  string route_path = 2;
  //
  google.protobuf.Any body = 3;
  //
  google.protobuf.Any sub_biz = 4;
}
