Current section

Files

Jump to
soft_bank lib Supervisor.ex
Raw

lib/Supervisor.ex

defmodule SoftBank.Tellers.Supervisor do
use Supervisor
@pool_name :soft_bank_tellers
alias SoftBank.Config
def start_link do
Supervisor.start_link(__MODULE__, nil, name: __MODULE__)
end
def start() do
Supervisor.start_child(__MODULE__, [])
end
def stop(id) do
Process.exit(id, :shutdown)
:ok
end
def init([]) do
# Here are my pool options
pool_options = [
name: {:local, @pool_name},
worker_module: SoftBank.Teller,
size: Config.get(:pool_size, 10),
max_overflow: Config.get(:pool_max_overflow, 1)
]
children = [
:poolboy.child_spec(@pool_name, pool_options, [])
]
supervise(children, strategy: :one_for_one)
end
def transfer(destination_account_number) do
:poolboy.transaction(@pool_name, fn(worker) -> GenServer.cast(worker, {:transfer, destination_account_number}) end, Config.get(:timeout, 5000))
end
def withdrawl(amount) do
:poolboy.transaction(@pool_name, fn(worker) -> GenServer.call(worker, {:withdrawl, amount}) end, Config.get(:timeout, 5000))
end
def deposit(amount) do
:poolboy.transaction(@pool_name, fn(worker) -> GenServer.call(worker, {:deposit, amount}) end, Config.get(:timeout, 5000))
end
def convert(amount, dest_currency) do
:poolboy.transaction(@pool_name, fn(worker) -> GenServer.call(worker, {:convert, amount, dest_currency}) end, Config.get(:timeout, 5000))
end
def balance(account_number) do
:poolboy.transaction(@pool_name, fn(worker) -> GenServer.call(worker, {:balance, account_number}) end, Config.get(:timeout, 5000))
end
def login(account_number) do
:poolboy.transaction(@pool_name, fn(worker) -> GenServer.call(worker, {:balance, account_number}) end, Config.get(:timeout, 5000))
end
def show(account_number) do
:poolboy.transaction(@pool_name, fn(worker) -> GenServer.call(worker, :show_state) end, Config.get(:timeout, 5000))
end
end