diff options
-rw-r--r-- | src/rexi.erl | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/rexi.erl b/src/rexi.erl index fced6ab2..aca029b5 100644 --- a/src/rexi.erl +++ b/src/rexi.erl @@ -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 |