Packages
membrane_core
0.4.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
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, timeout()) :: term()
def call(pid, type, args \\ [], opts \\ [], timeout \\ 5000) do
GenServer.call(pid, message(type: type, args: args, opts: opts), timeout)
end
def for_pad(message(opts: opts)), do: Keyword.get(opts, :for_pad)
end