syntax = "proto3";
package micro_traffic_sim;
option go_package = "github.com/LdDl/micro_traffic_sim_grpc/clients/go;microtraffic";
import "uuid.proto";
import "session.proto";
import "cell.proto";
import "trip.proto";
import "step.proto";
import "tls.proto";
import "conflict_zones.proto";
import "record.proto";
service Service {
// Create a new computation session
rpc NewSession (SessionReq) returns (NewSessionResponse) {}
// Get session info
rpc InfoSession (UUIDv4) returns (InfoSessionResponse) {}
// Set grid cell data for the given session (bidirectional streaming)
rpc PushSessionGrid (stream SessionGrid) returns (stream SessionGridResponse) {}
// Set trip data for the given session (bidirectional streaming)
rpc PushSessionTrip (stream SessionTrip) returns (stream SessionTripResponse) {}
// Run one simulation step for the given session (bidirectional streaming)
rpc SimulationStepSession (stream SessionStep) returns (stream SessionStepResponse) {}
// Set traffic light data for the given session (bidirectional streaming)
rpc PushSessionTLS (stream SessionTLS) returns (stream SessionTLSResponse) {}
// Set conflict zones for the given session (bidirectional streaming)
rpc PushSessionConflictZones (stream SessionConflictZones) returns (stream SessionConflictZonesResponse) {}
// Run the session forward headless (no per-tick round-trip) and stream
// recorded trajectory batches for offline Parquet assembly + windowed replay.
rpc RunAndRecord (RunAndRecordRequest) returns (stream RunAndRecordResponse) {}
// Poll the progress/state of a running recording by session id (from any connection).
rpc RecordingStatus (RecordingStatusRequest) returns (RecordingStatusResponse) {}
// Request a running recording to stop (cooperative), by session id (from any connection).
rpc StopRecording (StopRecordingRequest) returns (StopRecordingResponse) {}
}