diff options
-rw-r--r-- | src/rexi.erl | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/rexi.erl b/src/rexi.erl index abcea295..a344af7d 100644 --- a/src/rexi.erl +++ b/src/rexi.erl @@ -1,7 +1,7 @@ -module(rexi). -export([start/0, stop/0, restart/0]). -export([cast/2, cast/3, kill/2]). --export([reply/1]). +-export([reply/1, sync_reply/1, sync_reply/2]). -export([async_server_call/2, async_server_call/3]). -define(SERVER, rexi_server). @@ -61,6 +61,24 @@ reply(Reply) -> {Caller, Ref} = get(rexi_from), erlang:send(Caller, {Ref,Reply}). +%% @equiv sync_reply(Reply, infinity) +sync_reply(Reply) -> + sync_reply(Reply, infinity). + +%% @doc convenience function to reply to caller and wait for response. Message +%% is of the form {OriginalRef, {self(),reference()}, Reply}, which enables the +%% original caller to respond back. +-spec sync_reply(any(), pos_integer() | infinity) -> any(). +sync_reply(Reply, Timeout) -> + {Caller, Ref} = get(rexi_from), + Tag = make_ref(), + erlang:send(Caller, {Ref, {self(),Tag}, Reply}), + receive {Tag, Response} -> + Response + after Timeout -> + timeout + end. + %% internal functions %% % send a message as quickly as possible |