elixir-in-action/chapter5/calculator.ex

47 lines
1 KiB
Elixir
Raw Permalink Normal View History

2020-06-20 13:57:33 -05:00
defmodule Calculator do
def start do
spawn(fn -> loop(0) end)
end
defp loop(current_value) do
new_value =
receive do
{:value, caller} ->
send(caller, {:response, current_value})
current_value
{:add, value} ->
current_value + value
{:sub, value} ->
current_value - value
{:mul, value} ->
current_value * mul
{:div, value} ->
current_value / value
invalid_request ->
IO.puts("invalid request #{inspect(invalid_request)}")
current_value
end
loop(new_value)
end
def value(server_pid) do
send(server_pid, {:value, self()})
receive do
{:response, value} ->
value
end
end
def add(server_pid, value), do: send(server_pid, {:add, value})
def sub(server_pid, value), do: send(server_pid, {:sub, value})
def mul(server_pid, value), do: send(server_pid, {:mul, value})
def div(server_pid, value), do: send(server_pid, {:div, value})
end