Current section
Files
Jump to
Current section
Files
lib/Dlist/node_server.ex
defmodule Dlist.NodeServer do
alias Dlist.Node
use GenServer
## Client API
def start_link(args, opts \\ []) do
GenServer.start_link(__MODULE__, args, opts)
end
def data(server) do
GenServer.call(server, :data)
end
def left(server) do
GenServer.call(server, :left)
end
def right(server) do
GenServer.call(server, :right)
end
def left(server, left) do
GenServer.cast(server, {:left, left})
end
def right(server, right) do
GenServer.cast(server, {:right, right})
end
def stop(server) do
GenServer.cast(server, :stop)
end
## Server Callbacks
def init([data]) do
{:ok, Node.new(data)}
end
def handle_call(:data, _from, node) do
{:reply, node.data, node}
end
def handle_call(:left, _from, node) do
{:reply, node.left, node}
end
def handle_call(:right, _from, node) do
{:reply, node.right, node}
end
def handle_cast({:left, new_left}, node) do
{:noreply, Node.left(node, new_left)}
end
def handle_cast({:right, new_right}, node) do
{:noreply, Node.right(node, new_right)}
end
def handle_cast(:stop, node) do
{:stop, :normal, node}
end
end