// Protobufs for objects that represent runtime status, and are
// exchanged between processes over GRPC.

syntax = "proto3";

package autoradio;

//import "google/protobuf/empty.proto";

message IcecastMount {
  string path = 1;
  int32 listeners = 2;
  int32 bit_rate = 3;
  int32 sample_rate = 4;
  float quality = 5;
  int32 channels = 6;
  string artist = 7;
  string title = 8;
  string name = 9;
  string description = 10;
}

message Status {
  string name = 1;
  uint64 timestamp = 2;

  bool icecast_ok = 3;
  repeated IcecastMount icecast_mounts = 4;

  int32 cur_bandwidth = 5;
  int32 max_bandwidth = 6;
  int32 max_listeners = 7;
  int32 num_listeners = 8;
}

// The GossipService is used by frontends to exchange NodeStatus
// between themselves with a gossip-like protocol.
service GossipService {
  rpc Exchange(ExchangeRequest) returns (ExchangeResponse) {}
}

message ExchangeRequest {
  repeated Status nodes = 1;
}

message ExchangeResponse {
  repeated Status nodes = 1;
}