rove/proto/rove/rove.proto

153 lines
3.5 KiB
Protocol Buffer
Raw Normal View History

syntax = "proto3";
2020-06-13 13:38:12 +01:00
// Rove
//
// Rove is an asychronous nomadic game about exploring a planet as part of a loose community
package rove;
option go_package = "github.com/mdiluz/rove/pkg/rove";
import "google/api/annotations.proto";
2020-06-13 10:43:35 +01:00
service Rove {
// Server status
//
// Responds with various details about the current server status
rpc Status(StatusRequest) returns (StatusResponse) {
option (google.api.http) = {
get: "/status"
};
}
// Register an account
//
// Tries to register an account with the given name
rpc Register(RegisterRequest) returns (RegisterResponse) {
option (google.api.http) = {
post: "/register"
body: "*"
};
}
// Send commands to rover
//
// Sending commands to this endpoint will queue them to be executed during the following ticks, in the order sent
rpc Commands(CommandsRequest) returns (CommandsResponse) {
option (google.api.http) = {
post: "/commands"
body: "*"
};
}
// Get radar information
//
// Gets the radar output for the given rover
rpc Radar(RadarRequest) returns (RadarResponse) {
option (google.api.http) = {
post: "/radar"
body: "*"
};
}
// Get rover information
//
// Gets information for the account's rover
rpc Rover(RoverRequest) returns (RoverResponse) {
option (google.api.http) = {
post: "/rover"
body: "*"
};
}
}
message Command {
// The command to execute
// "move" - Move the rover in a direction, requires bearing
// "stash" - Stashes item at current location in rover inventory
// "repair" - Repairs the rover using an inventory object
string command = 1;
// The bearing, example: NE
string bearing = 2;
}
message CommandsRequest {
// The account to execute these commands
string account = 1;
// The set of desired commands
repeated Command commands = 2;
}
// Empty placeholder
message CommandsResponse {}
message Error {
// An explanation for the HTTP error returned
string error = 1;
}
message RadarRequest {
// The account for this request
string account = 1;
}
message RadarResponse {
// The range in tiles from the rover of the radar data
int32 range = 1;
// A 1D array representing range*2 + 1 squared set of tiles, origin bottom left and in row->column order
bytes tiles = 2;
}
// Empty placeholder
message RegisterResponse{}
message RegisterRequest {
// The desired account name
string name = 1;
}
message RoverRequest {
// The account for this request
string account = 1;
}
message RoverResponse {
// The name of the rover
string name = 1;
// Position of the rover in world coordinates
Vector position = 2;
// The range of this rover's radar
int32 range = 3;
// The items in the rover inventory
bytes inventory = 4;
// The current health of the rover
int32 Integrity = 5;
}
// Empty placeholder
message StatusRequest {}
message StatusResponse {
// The time the next tick will occur
string next_tick = 1;
// Whether the server is ready to accept requests
bool ready = 2;
// The tick rate of the server in minutes (how many minutes per tick)
int32 tick = 3;
// The version of the server in v{major}.{minor}-{delta}-{sha} form
string version = 4;
}
message Vector {
int32 x = 1;
int32 y = 2;
}