Skip to content

Instantly share code, notes, and snippets.

@fdmanana
Created November 6, 2011 20:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fdmanana/1343454 to your computer and use it in GitHub Desktop.
Save fdmanana/1343454 to your computer and use it in GitHub Desktop.
Erlang/OTP gen_server simplified API, basics

Client side API

Start a gen_server programmatically

gen_server:start(ModuleName, Arguments, Options) -> {ok, Pid} | {error, Reason}

gen_server:start(ServerName, ModuleName, Arguments, Options) -> {ok, Pid} | {error, Reason}

(Also gen_server:star_link/3 and gen_server:start_link/4 variants)

Synchronous calls

gen_server:call(PidOrName, Message) -> ReplyMessage

gen_server:call(PidOrName, Message, Timeout)

Asynchronous call (cast)

gen_server:cast(PidOrName, Message)

Server API, most important callbacks

Callback module declaration

-module(your_module_name).
-behaviour(gen_server).

Essential callbacks

init(Arguments) -> {ok, InitialState} | {stop, Reason}

handle_call(Message, From, CurrentState) -> {reply, ReplyMessage, NewState} | {noreply, NewState} | {stop, Reason, NewState}

handle_cast(Message, CurrentState) -> {noreply, NewState} | {stop, NewState}

handle_info(Message, CurrentState) -> {noreply, NewState} | {stop, NewState}

terminate(Reason, State) -> ReturnValueIgnored

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment