customstack.md
February 2, 2014 ยท View on GitHub
Show them what it will look like
Start our customserver
$> iex customstack.exs
iex> Stack.CustomServer.start []
iex> sned :custom_server, { :push, 10 }
iex> send :custom_server, { :self, :pop }
###iex manual receive
receive do
val -> IO.puts "Pop resulted in #{val}"
end
Guided customstack.exs
Module receive loop with after outputting "nothing received"
defmodule Stack.CustomServer do
def start(initial_stack) do
spawn_link fn ->
Process.register self, :custom_server
listen initial_stack
end
end
def listen(stack) do
receive do
after 2000 ->
IO.puts "Nothing to do"
listen stack
end
end
end
add receive push
{:push, value} -> listen([value|stack])
run iex and push value (cast())
send :custom_server, { :push, 10 }
add receive pop
{sender, :pop} -> handle_pop(sender, stack)
#...
def handle_pop(sender, [head|tail]) do
send sender, head
listen tail
end
run iex and pop value (call() - req/reply)
send :custom_server, {self, :pop}