Files
2026-03-09 23:09:46 -04:00

80 lines
2.1 KiB
Clojure

(ns gen_server
"Erlang :gen_server module — generic server (low-level OTP API).
In CljElixir: prefer Elixir's GenServer module for most use cases.
Use this for direct Erlang OTP interop.")
(defn start
"Starts a gen_server. Returns {:ok pid} or {:error reason}.
(gen_server/start module init-arg opts)"
([module init-arg opts])
([server-name module init-arg opts]))
(defn start-link
"Starts a linked gen_server."
([module init-arg opts])
([server-name module init-arg opts]))
(defn call
"Makes a synchronous call.
(gen_server/call pid request) ;=> reply
(gen_server/call pid request 5000)"
([server-ref request])
([server-ref request timeout]))
(defn cast
"Sends an async message.
(gen_server/cast pid message) ;=> :ok"
[server-ref request])
(defn reply
"Replies to a caller from within handle_call.
(gen_server/reply from reply-value)"
[client reply])
(defn stop
"Stops the server.
(gen_server/stop pid)"
([server-ref])
([server-ref reason])
([server-ref reason timeout]))
(defn multi-call
"Calls all registered servers on all/specified nodes."
([name request])
([nodes name request])
([nodes name request timeout]))
(defn abcast
"Casts to all registered servers on all/specified nodes."
([name request])
([nodes name request]))
(defn enter-loop
"Makes calling process enter the gen_server receive loop."
([module opts state])
([module opts state server-name])
([module opts state server-name timeout]))
(defn wait-response
"Waits for a gen_server response."
([request-id timeout])
([request-id]))
(defn send-request
"Sends an async request. Returns request-id.
(gen_server/send-request pid request)"
([server-ref request])
([server-ref request label req-id-collection]))
(defn receive-response
"Receives a response from send-request.
(gen_server/receive-response request-id timeout)"
([request-id timeout])
([request-id]))
(defn check-response
"Checks if a response has arrived (non-blocking).
(gen_server/check-response msg request-id-or-collection)"
[msg request-id-or-collection])