Packages
membrane_core
0.12.3
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
retired
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc1
1.1.2
1.1.1
1.1.0
1.1.0-rc1
1.1.0-rc0
1.0.1
1.0.0
1.0.0-rc1
1.0.0-rc0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
retired
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Membrane Multimedia Framework (Core)
Current section
Files
Jump to
Current section
Files
lib/membrane/core/message.ex
defmodule Membrane.Core.Message do
@moduledoc false
# Record representing membrane internal message
alias Membrane.Pad
require Record
Record.defrecord(:message, __MODULE__, type: nil, args: [], opts: [])
@type t :: {__MODULE__, type, args, opts}
@type type :: atom
@type args :: list | any
@type opts :: Keyword.t()
defmacro new(type, args \\ [], opts \\ []) do
quote do
unquote(__MODULE__).message(type: unquote(type), args: unquote(args), opts: unquote(opts))
end
end
@spec send(pid, type, args, opts) :: :ok
def send(pid, type, args \\ [], opts \\ []) do
Kernel.send(pid, message(type: type, args: args, opts: opts))
:ok
end
@spec self(type, args, opts) :: :ok
def self(type, args \\ [], opts \\ []) do
__MODULE__.send(self(), type, args, opts)
:ok
end
@spec call(GenServer.server(), type, args, opts, timeout()) ::
term() | {:error, {:call_failure, any}}
def call(pid, type, args \\ [], opts \\ [], timeout \\ 5000) do
try do
GenServer.call(pid, message(type: type, args: args, opts: opts), timeout)
catch
:exit, reason ->
{:error, {:call_failure, reason}}
end
end
@spec call!(GenServer.server(), type, args, opts, timeout()) :: term()
def call!(pid, type, args \\ [], opts \\ [], timeout \\ 5000) do
GenServer.call(pid, message(type: type, args: args, opts: opts), timeout)
end
@spec for_pad(t()) :: Pad.ref()
def for_pad(message(opts: opts)), do: Keyword.get(opts, :for_pad)
@spec set_for_pad(t(), Pad.ref()) :: t()
def set_for_pad(message(opts: opts) = msg, pad),
do: message(msg, opts: Keyword.put(opts, :for_pad, pad))
end