syntax = "proto3"; package api; option go_package = "git.netflux.io/rob/octoplex/internal/generated/grpc/proto"; service InternalAPI { rpc Communicate(stream Envelope) returns (stream Envelope); } message Envelope { oneof payload { Command command = 1; Event event = 2; } } message Command { oneof command_type { AddDestinationCommand add_destinaion = 1; RemoveDestinationCommand remove_destination = 2; StartDestinationCommand start_destination = 3; StopDestinationCommand stop_destination = 4; CloseOtherInstancesCommand close_other_instances = 5; QuitCommand quit = 6; } } message AddDestinationCommand { string name = 1; string url = 2; } message RemoveDestinationCommand { string url= 1; } message StartDestinationCommand { string url = 1; } message StopDestinationCommand { string url = 1; } message CloseOtherInstancesCommand {} message QuitCommand {} message Event { oneof event_type { AppStateChangedEvent app_state_changed = 1; DestinationStreamExitedEvent destination_stream_exited = 2; DestinationAddedEvent destination_added = 3; AddDestinationFailedEvent add_destination_failed = 4; DestinationRemovedEvent destination_removed = 5; RemoveDestinationFailedEvent remove_destination_failed = 6; StartDestinationFailedEvent start_destination_failed = 7; MediaServerStartedEvent media_server_started = 8; OtherInstanceDetectedEvent other_instance_detected = 9; FatalErrorEvent fatal_error = 10; } } // TODO: complete message AppStateChangedEvent {} message DestinationStreamExitedEvent { string name = 1; string error = 2; } message DestinationAddedEvent { string url = 1; } message AddDestinationFailedEvent { string url = 1; string error = 2; } message DestinationRemovedEvent { string url = 1; } message RemoveDestinationFailedEvent { string url = 1; string error = 2; } message StartDestinationFailedEvent { string url = 1; string error = 2; } message MediaServerStartedEvent { string rtmp_url = 1; string rtmps_url = 2; } message OtherInstanceDetectedEvent {} message FatalErrorEvent { string error = 1; }