diff options
author | Adam Kocoloski <adam@cloudant.com> | 2010-06-01 10:58:17 -0400 |
---|---|---|
committer | Adam Kocoloski <adam@cloudant.com> | 2010-06-01 10:58:17 -0400 |
commit | 850e7c23551696c952b8f1a57b76efa38fcf6f77 (patch) | |
tree | 216a09d81e0c2fd80cddfe8edf0210d88de7d27e | |
parent | a2843a05ac55ff639a7f622e02a850e1d74947f8 (diff) |
add sync_reply, change msg format to be more like gen_server
-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 |