Skip to content

Latest commit

 

History

History
73 lines (57 loc) · 1.2 KB

customstack.md

File metadata and controls

73 lines (57 loc) · 1.2 KB

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}

crash - lots of logic leads us to use OTP applications