diff options
| author | Adam Kocoloski <adam@cloudant.com> | 2010-05-25 12:42:51 -0400 |
|---|---|---|
| committer | Adam Kocoloski <adam@cloudant.com> | 2010-05-25 12:42:51 -0400 |
| commit | 03451da61ceb390805861e6bb50aea3904d4ff28 (patch) | |
| tree | 93a90b6d09de5716d318da0865406be2503effbc | |
| parent | 1ebf9657e9fd9e2e34435e8d90b92b685be3f3c9 (diff) | |
_changes resource for feed=normal, BugzID 1330
| -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 |
