Skip to content

Commit

Permalink
stateful server 4
Browse files Browse the repository at this point in the history
  • Loading branch information
hexisdylan committed Jul 26, 2022
1 parent f578de4 commit e32ac32
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 7 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@

27. pragstudio-elixir-24-stateful-server-2 - [Stateful Server 2](https://github.com/skedaddl3/elixir-pragstudio/commit/d010b388a987846f52203f91bfc21bc274074a3e)

28. pragstudio-elixir-24-stateful-server-3 - [Stateful Server 3]()
28. pragstudio-elixir-24-stateful-server-3 - [Stateful Server 3](https://github.com/skedaddl3/elixir-pragstudio/commit/f578de42d114949943d687a9d3e3b07df2307780)

29. pragstudio-elixir-24-stateful-server-4 - [Stateful Server 4]()

Expand Down
36 changes: 30 additions & 6 deletions lib/pledge_server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ defmodule Servy.PledgeServer do
pid
end

def create_pledge(name, amount) do
send(@name, {self(), :create_pledge, name, amount})

receive do
{:response, status} -> status
end
end

# Server

def listen_loop(state) do
receive do
{sender, :create_pledge, name, amount} ->
Expand All @@ -20,14 +30,15 @@ defmodule Servy.PledgeServer do
{sender, :recent_pledges} ->
send(sender, {:response, state})
listen_loop(state)
end
end

def create_pledge(name, amount) do
send(@name, {self(), :create_pledge, name, amount})
{sender, :total_pledged} ->
total = Enum.map(state, &elem(&1, 1)) |> Enum.sum()
send(sender, {:response, total})
listen_loop(state)

receive do
{:response, status} -> status
unexpected ->
IO.puts("Unexpected messaged: #{inspect(unexpected)}")
listen_loop(state)
end
end

Expand All @@ -40,6 +51,14 @@ defmodule Servy.PledgeServer do
end
end

def total_pledged do
send(@name, {self(), :total_pledged})

receive do
{:response, total} -> total
end
end

defp send_pledge_to_service(_name, _amount) do
# code to send pledge to an external service
{:ok, "pledge-#{:rand.uniform(1000)}"}
Expand All @@ -50,10 +69,15 @@ alias Servy.PledgeServer

pid = PledgeServer.start()

send(pid, {:stop, "hammertime"})

IO.inspect(PledgeServer.create_pledge("larry", 10))
IO.inspect(PledgeServer.create_pledge("moe", 20))
IO.inspect(PledgeServer.create_pledge("curly", 30))
IO.inspect(PledgeServer.create_pledge("daisy", 40))
IO.inspect(PledgeServer.create_pledge("grace", 50))

IO.inspect(PledgeServer.recent_pledges())
IO.inspect(PledgeServer.total_pledged())

IO.inspect(Process.info(pid, :messages))

0 comments on commit e32ac32

Please sign in to comment.