defmodule Giocci do
@moduledoc """
`Giocci.start_link([DESTINATION_GIOCCI_RELAY])` で起動する。
## Examples
iex> Giocci.start_link([{:global, :relay}])
"""
use GenServer
require Logger
@timeout_ms 180_000
#
# Client API
#
def start_link([state]) do
state = %{relay: state}
GenServer.start_link(__MODULE__, state, name: __MODULE__)
end
def stop(pname) do
GenServer.stop(pname)
end
#
# Callbacks
#
@impl true
def handle_call({:detect, binary, destination}, _from, state) do
detection = GenServer.call(state.relay, {:detect, binary, destination}, @timeout_ms)
{:reply, detection, state}
end
@impl true
def handle_call({:get, vcontact_id}, _from, state) do
vcontact = GenServer.call(state.relay, {:get, vcontact_id})
{:reply, vcontact, state}
end
@impl true
def handle_call(:list, _from, state) do
current_list = GenServer.call(state.relay, :list)
{:reply, current_list, state}
end
@impl true
def handle_call({:list_filter, filter_key, filter_value}, _from, state) do
filtered_list = GenServer.call(state.relay, {:list_filter, filter_key, filter_value})
{:reply, filtered_list, state}
end
@impl true
def handle_cast({:delete, vcontact_id}, state) do
GenServer.cast(state.relay, {:delete, vcontact_id})
{:noreply, state}
end
@impl true
def init(state) do
{:ok, state}
end
@impl true
def terminate(reason, _state) do
reason
end
#
# Function
#
def delete(vcontact_id) do
GenServer.call(__MODULE__, {:delete, vcontact_id})
end
def detect(binary, destination) do
GenServer.call(__MODULE__, {:detect, binary, destination}, @timeout_ms)
end
def get(vcontact_id) do
GenServer.call(__MODULE__, {:get, vcontact_id})
end
def list() do
GenServer.call(__MODULE__, :list)
end
def list_filter(filter_key, filter_value) do
GenServer.call(__MODULE__, {:list_filter, filter_key, filter_value})
end
def put() do
end
end