Skip to content

Instantly share code, notes, and snippets.

@killme2008
Created October 23, 2015 03:25
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save killme2008/7d358688a6a922c1dbab to your computer and use it in GitHub Desktop.
Save killme2008/7d358688a6a922c1dbab to your computer and use it in GitHub Desktop.
Elixir gen server example
defmodule Counter do
use GenServer
def start_link(init_value \\ 0, opts \\ []) do
GenServer.start_link(__MODULE__, init_value, opts)
end
## client apis
def get(c) do
GenServer.call(c, {:get})
end
def increment(c, delta \\ 1) do
GenServer.cast(c, {:increment, delta})
end
def increment_and_get(c, delta \\ 1) do
GenServer.call(c, {:increment_and_get, delta})
end
##GenServer callbacks
def init(v) do
{:ok, v}
end
def handle_call({:get}, _from, v) do
{:reply, v, v}
end
def handle_call({:increment_and_get, detal}, _from, v) do
new_v = v + detal
{:reply, new_v, new_v}
end
def handle_cast({:increment, delta}, v) do
{:noreply, delta + v}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment