Packages
membrane_core
0.12.0
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)
Retired package: Deprecated - Package has an API change that will be no longer supported, use version 0.12.1 instead of this one
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