defmodule Membrane.RemoteControlled.Message do
@moduledoc """
An abstract module aggregating all the messages that can be sent by the `RemoteControlled.Pipeline`.
The available messages are:
* `Membrane.RemoteControlled.Message.PlaybackState.t()`
* `Membrane.RemoteControlled.Message.StartOfStream.t()`
* `Membrane.RemoteControlled.Message.EndOfStream.t()`
* `Membrane.RemoteControlled.Message.Notification.t()`
* `Membrane.RemoteControlled.Message.Terminated.t()`
"""
@type t ::
__MODULE__.PlaybackState.t()
| __MODULE__.StartOfStream.t()
| __MODULE__.EndOfStream.t()
| __MODULE__.Notification.t()
| __MODULE__.Terminated.t()
defmodule PlaybackState do
@moduledoc """
Message sent when the pipeline changes its playback state
"""
@type t :: %__MODULE__{from: pid(), state: Membrane.PlaybackState.t()}
@enforce_keys [:from, :state]
defstruct @enforce_keys
end
defmodule StartOfStream do
@moduledoc """
Message sent when some element of the pipeline receives the start of stream event on some pad.
"""
@type t :: %__MODULE__{
from: pid(),
element: Membrane.Element.name_t(),
pad: Membrane.Pad.name_t()
}
@enforce_keys [:from, :element, :pad]
defstruct @enforce_keys
end
defmodule EndOfStream do
@moduledoc """
Message sent when some element of the pipeline receives the start of stream event on some pad.
"""
@type t :: %__MODULE__{
from: pid(),
element: Membrane.Element.name_t(),
pad: Membrane.Pad.name_t()
}
@enforce_keys [:from, :element, :pad]
defstruct @enforce_keys
end
defmodule Notification do
@moduledoc """
Message sent when the some element of the pipeline receives a notification.
"""
@type t :: %__MODULE__{
from: pid(),
element: Membrane.Element.name_t(),
data: Membrane.Notification.t()
}
@enforce_keys [:from, :element, :data]
defstruct @enforce_keys
end
defmodule Terminated do
@moduledoc """
Message sent when the pipeline gracefully terminates.
"""
@type t :: %__MODULE__{from: pid(), reason: :normal | :shutdown | {:shutdown, any()} | term()}
@enforce_keys [:from, :reason]
defstruct @enforce_keys
end
end