Packages
membrane_core
0.6.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)
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_t, args_t, opts_t}
@type type_t :: atom
@type args_t :: list | any
@type opts_t :: 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_t, args_t, opts_t) :: t
def send(pid, type, args \\ [], opts \\ []) do
Kernel.send(pid, message(type: type, args: args, opts: opts))
end
@spec self(type_t, args_t, opts_t) :: t
def self(type, args \\ [], opts \\ []) do
__MODULE__.send(self(), type, args, opts)
end
@spec call(GenServer.server(), type_t, args_t, opts_t, 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_t()
def for_pad(message(opts: opts)), do: Keyword.get(opts, :for_pad)
@spec set_for_pad(t(), Pad.ref_t()) :: t()
def set_for_pad(message(opts: opts) = msg, pad),
do: message(msg, opts: Keyword.put(opts, :for_pad, pad))
end