View Source Grizzly.Transport behaviour (grizzly v8.0.1)

Behaviour and functions for communicating to zipgateway

Summary

Types

After starting a server options can be passed back to the caller so that the caller can do any other work it might seem fit.

t()

Functions

Accept a new connection

Get the assign value for the field

Update the assigns with this field and value

Preform the handshake

Listen using a transport

Open the transport

Parse the response for the transport

Send binary data using a transport

Types

@type args() :: [
  ip_address: :inet.ip_address(),
  port: :inet.port_number(),
  transport: t()
]
@type listen_option() :: {:strategy, :none | :accept}

After starting a server options can be passed back to the caller so that the caller can do any other work it might seem fit.

Options:

    • :strategy - this informs the caller if the transport needs to wait for connects to accept or if the socket can just process incoming messages. If the strategy is :accept that is to mean the socket is okay to start accepting new connections.
@type parse_opt() :: {:raw, boolean()}
@type socket() :: :ssl.sslsocket() | :inet.socket()
@opaque t()

Callbacks

@callback accept(t()) :: {:ok, t()} | {:error, any()}
@callback close(t()) :: :ok
@callback handshake(t()) :: {:ok, t()} | {:error, any()}
@callback listen(t()) :: {:ok, t(), [listen_option()]} | {:error, any()}
@callback open(keyword()) :: {:ok, t()} | {:error, :timeout}
Link to this callback

parse_response(any, list)

View Source
@callback parse_response(any(), [parse_opt()]) ::
  {:ok, Grizzly.Transport.Response.t() | binary() | :connection_closed}
  | {:error, Grizzly.ZWave.DecodeError.t()}
@callback peername(t()) ::
  {:ok, {:inet.ip_address(), :inet.port_number()}} | {:error, any()}
Link to this callback

send(t, binary, keyword)

View Source
@callback send(t(), binary(), keyword()) :: :ok

Functions

@spec accept(t()) :: {:ok, t()} | {:error, any()}

Accept a new connection

Link to this function

assign(transport, assign, default \\ nil)

View Source
@spec assign(t(), atom(), any()) :: any()

Get the assign value for the field

Link to this function

assigns(transport, assign, assign_value)

View Source
@spec assigns(t(), atom(), any()) :: t()

Update the assigns with this field and value

@spec handshake(t()) :: {:ok, t()} | {:error, any()}

Preform the handshake

@spec listen(t()) :: {:ok, t(), [listen_option()]} | {:error, any()}

Listen using a transport

Link to this function

new(impl, assigns \\ %{})

View Source
@spec new(module(), map()) :: t()

Make a new Grizzly.Transport

If need to optionally assign some priv data you can map that into this function.

@spec node_id(t()) :: {:ok, Grizzly.node_id()} | {:error, any()}
Link to this function

open(transport_module, args)

View Source
@spec open(module(), args()) :: {:ok, t()} | {:error, :timeout}

Open the transport

Link to this function

parse_response(transport, response, opts \\ [])

View Source

Parse the response for the transport

@spec peername(t()) ::
  {:ok, {:inet.ip_address(), :inet.port_number()}} | {:error, any()}
Link to this function

send(transport, binary, opts \\ [])

View Source
@spec send(t(), binary(), keyword()) :: :ok

Send binary data using a transport